【Unity3D】2D Sprite基本动效(浮动、旋转等)实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DynamicEffect : MonoBehaviour
{
    private SpriteRenderer spriteRder;
    private float radian = 0; // 弧度
    private float perRadian = 0.05f; // 每次变化的弧度  
    private float radius = 0.2f; // 半径  
    private Vector3 oldPos, oldScale,oldRot;
    private float oldColorAlpha;

    public float _速度 = 5;
    public bool _浮动 = false;
    public bool _旋转 = false;
    public float _浮动和旋转幅度 = 1;
    public bool _伸缩 = false;
    public bool _果冻 = false;
    public float _伸缩和果冻横向变化幅度 = 1;
    public float _伸缩和果冻纵向变化幅度 = 1;
    public bool _渐隐渐显1 = false;
    public bool _渐隐渐显2 = false;
    public float _最隐程度 = 0;
    public bool _摇摆 = false;
    public float _摇摆角度 = 30; 


    void Start()
    {
        //初始化
        spriteRder = this.gameObject.GetComponent<SpriteRenderer>();
        oldPos = transform.localPosition;
        oldScale = transform.localScale;
        oldRot = transform.localEulerAngles;
        oldColorAlpha = spriteRder.color.a;

        //渐隐程度参数范围为0-1,超出范围调整
        _最隐程度 = Mathf.Min(Mathf.Max(0, _最隐程度), 1);

        /*//功能拓展1
        foreach (KeyValuePair<string, Vector3> nowpos in nowPos)
        {
            nowPos[nowpos.Key] = transform.localPosition;// 将最初的位置保存到oldPos  
        }
        */
    }


    void Update()
    {
        perRadian = _速度 / 100;
        radian += perRadian; // 弧度每次增加
        float dx = Mathf.Sin(radian) * radius;
        float dy = Mathf.Cos(radian) * radius;

        if (_浮动)
        {
            transform.localPosition = oldPos +  new Vector3(0, _浮动和旋转幅度 * dy, 0);
        }
        if (_旋转)
        {
            transform.localPosition = oldPos +  new Vector3(_浮动和旋转幅度 * dx, _浮动和旋转幅度 * dy, 0);
        }
        if (_伸缩)
        {
            transform.localScale = oldScale +  new Vector3(_伸缩和果冻横向变化幅度 * dx, _伸缩和果冻纵向变化幅度 * dx, 0);
        }
        if (_果冻)
        {
            transform.localScale = oldScale +  new Vector3(_伸缩和果冻横向变化幅度 * dx, _伸缩和果冻纵向变化幅度 * dy, 0);
        }
        if (_渐隐渐显1)
        {
            spriteRder.color = new Color(spriteRder.color.r, spriteRder.color.g, spriteRder.color.b, Mathf.Max((Mathf.Abs(dy)),_最隐程度));
        }
        if (_渐隐渐显2)
        {
            spriteRder.color = new Color(spriteRder.color.r, spriteRder.color.g, spriteRder.color.b, Mathf.Max(Mathf.Sqrt(Mathf.Abs(dy)),_最隐程度));
        }
        if (_摇摆)
        {
            transform.localEulerAngles = oldRot + new Vector3(0, 0, _摇摆角度*dx);
        }
    }
}
原文地址:https://www.cnblogs.com/garychen97/p/14370310.html