DoTween简单的API,以及一些回调

3,607 阅读3分钟

Transform组件的Dotween

在两个旋转之间来回切换

		//类似汽车的雨刮器
        gameObject.transform.DOLocalRotate(new Vector3(0, 0, 90), 2).SetLoops(-1,LoopType.Yoyo);
		//用两秒钟渐变的旋转到90度,以最短距离
        gameObject.transform.DORotate(new Vector3(90f, 0f, 0f), 2,RotateMode.Fast);

 1. RotateMode.Fast 最快的方式
 2. FastBeyond360 旋转超过360度
 3. WorldAxisAdd 没搞明白
 4. LocalAxisAdd  将给定的旋转添加到转换的局部轴(就像在Unity的编辑器中启用“局部”开关或使用transform. rotate (Space.Self)旋转一个对象)。在这种模式下,最终值总是被认为是相对的 (没搞明白)
		//看向某个目标,只会旋转一次
        gameObject.transform.DOLookAt(cu.transform.position, 2);

在两个点之间坐标进行切换

		//在当前位置与Vector3(4f,4f,4f)之间来回切换,往返的
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f),2).SetLoops(-1,LoopType.Yoyo);
	//在当前位置与Vector3(4f,4f,4f)之间来回切换,耗时2s,每次都从开始点进行
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1,LoopType.Restart);
		//gameobject在两个点   new Vector3(5, 5f, 5f)  之间进行跳跃
        gameObject.transform.DOLocalJump(new Vector3(5, 5f, 5f), 2f, 1, 1).SetLoops(-1,LoopType.Yoyo);
       //DOLocalJump(Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping)
       //endValue 结束点
       //jumpPower 跳跃的力量,Y轴的高度
       //duration 跳跃的总数,分几次跳跃到目标位置
       //snapping 是否平滑,True不平滑,Flase平滑

来回膨胀和变小

就像是心脏的跳动一样
        gameObject.transform.DOScale(new Vector3(3f,3f,3f),2).SetLoops(-1,LoopType.Yoyo);
//旋转到指定的大小
        gameObject.transform.DOScale(new Vector3(3f, 3f, 3f), 2);

Material.Color

    private Color _OrgionColor = Color.black;
    private Color _TargetColor = Color.green;

    private void Start()
    {
       //可用于提示闪烁效果
        gameObject.GetComponent<MeshRenderer>().material.color = _OrgionColor;
        gameObject.GetComponent<MeshRenderer>().material.DOColor(_TargetColor, 2).SetLoops(-1, LoopType.Yoyo).SetId("DotweenAni");
        //获取材质,设置目标颜色,设置切换次数,切换模式,设置ID。
		
            DOTween.Kill("DotweenAni");//在想要停止的地方调用,可以停止动画

    }

可以多个动画同时播放

//很复杂我描述不出来
        gameObject.transform.DOScale(new Vector3(4f, 4f, 4f), 2).SetLoops(-1,LoopType.Yoyo);
        gameObject.GetComponent<MeshRenderer>().material.DOColor(Color.black, 2).SetLoops(-1, LoopType.Yoyo);
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo);
        gameObject.transform.DORotate(new Vector3(180f,180f,180f),2).SetLoops(-1,LoopType.Yoyo);

使用回调

OnComplete_播放结束时调用

yoyo的次数为-1则不会被调用 在运动三次后调用OnComplete

  private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(3, LoopType.Yoyo).OnComplete(MyCallBack);
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Kill("ha");
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

OnKill_被杀死的时候调用

  private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnComplete(MyCallBack).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Kill("ha");//按下A会调用回调
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

OnPlay_在开始播放的时候调用

在按下暂停然后再播放的时候会调用,第一次自动播放会调用

  private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnPlay(MyCallBack).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

OnPause_在暂停的时候调用

播放的时候按下一次调用一次

 private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnPause(MyCallBackPause).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }

    private void MyCallBack()
    {
        Debug.Log("哈哈哈");
    }

    private void MyCallBackPause()
    {
        Debug.Log("暂停的时候调用我");
    }

OnStepComplete_往返的时候调用

加入循环三次 0-1调用一次
1-2调用一次 2-3调用一次 Loop.Yoyo每次都会调用,0-0不调用

   private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnStepComplete(MyCallBackStepComplete).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }


    private void MyCallBackStepComplete()
    {
        Debug.Log("哈哈哈");
    }

OnUpdate_在播放的时候就调用

如果暂停或者杀死就不会调用了。

 private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnUpdate(MyCallBackUpdate).SetId("ha");
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }


    private void MyCallBackUpdate()
    {
        Debug.Log("哈哈哈");
    }

多个回调同时启用

private void Start()
{
    gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2)
        .SetLoops(-1, LoopType.Yoyo)
        .OnStart(MyCallBackStart)
        .OnUpdate(MyCallBackUpdate)
        .OnPlay(MyCallBackPlay)
        .OnKill(MyCallBackKill)
        .SetId("ha");
}


private void Update()
{
    if (Input.GetKeyDown(KeyCode.A))
    {
        DOTween.Pause("ha");
    }
    if (Input.GetKeyDown(KeyCode.D))
    {
        DOTween.Play("ha");
    }
}


private void MyCallBackPlay()
{
    Debug.Log("OnPlay");
}

private void MyCallBackStart()
{
    Debug.Log("开始");

}


private void MyCallBackUpdate()
{
    Debug.Log("哈哈哈");
}

private void MyCallBackKill()
{
    Debug.Log("杀死的时候调用我");

}

DoTween

public class DotweenTest : MonoBehaviour
{
    void Start()
    {
        DOTween.To(value =>
        {
            //todo something
        }, 1, 30, 5);
    }
}

图片.png

参数说明: start Value:起始值 end Value:结束值 duration:花费时间 todo something:需要做的事情

就这么多,太多了

请添加图片描述