Dotween插件是一种快速,高效,完全类型安全的面向对象的动画引擎。我们可以通过AssetStore获取该插件,并在PackageManager中download、import。
案例:红色方块朝着绿色方块位置移动,发生碰撞,并产生碰撞效果。需要通过dotween控制方块的移动状态。移动状态分为移动、暂停移动、重启移动、移动动画的正放与倒放。
思路:
编辑器层面: 设置红色和绿色的方块碰撞器,并在移动的红色方块游戏物体上挂载rigidbody刚体组件。另外,为了产生符合物理引擎的碰撞效果,需要在绿色方块游戏物体上挂载rigidbody组件。
动画层面:主要涉及到Dotween插件的函数调用。
代码实现:
public class CubeMove : MonoBehaviour
{
Vector3 AimPos;
private void Update()
{
if (Input.GetKeyDown(KeyCode.S))
{
AimPos = GameObject.Find("Green").transform.position;
//红色方块移动,并设置该移动动画名为“move”
transform.DOMove(AimPos, 5).SetId<Tween>("move");
}
//暂停动画
if (Input.GetKeyDown(KeyCode.P))
{
DOTween.Pause("move");
}
//继续播放动画,可以继续播放
if (Input.GetKeyDown(KeyCode.O))
{
DOTween.Play("move");
}
//杀死动画,不能再播放
if (Input.GetKeyDown(KeyCode.K))
{
DOTween.Kill("move");
}
//动画正放
if (Input.GetKeyDown(KeyCode.R))
{
DOTween.PlayForward("move");
}
//动画倒放
if (Input.GetKeyDown(KeyCode.T))
{
DOTween.PlayBackwards("move");
}
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name.Equals("Green"))
{
Debug.LogError("红色方块在接触绿色方块");
}
}
private void OnCollisionStay(Collision collision)
{
if (collision.gameObject.name.Equals("Green"))
{
Debug.LogError("红色方块和绿色方块接触停留");
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name.Equals("Green"))
{
Debug.LogError("红色方块离开了绿色方块");
}
}
}