老规矩,先介绍一下 Unity 的科普小知识:
在Unity中移动物体的方法有好几种,下面是精选的几种可直接使用的便捷方法
不管是移动3D游戏对象还是2D UI都可以使用哦!
public float Speed=5;
void Update(){
//将某个物体的本地坐标移动到(0, 0, 100)位置,速度为2
gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(0, 0, 100), Speed*Time.deltaTime());
}
上述代码是将gameObject的本地坐标transform.localPosition,变成一个我们赋予的新坐标new Vector3(0, 0, 100),按照我们设置的一个float的速度进行移动
使用该代码效果如下:
public float Speed = 5f;
void Update()
{
gameObject.transform.localPosition = new Vector3(Mathf.Lerp(gameObject.transform.localPosition.x, 20, Speed * Time.deltaTime), Mathf.Lerp(gameObject.transform.localPosition.y, 5, Speed * Time.deltaTime),0);
}
插值运算的特点是,游戏对象移动时不是匀速的,而是变速运动,会由快而慢,最后一部分数值甚至会一直都达不到!
例如上述代码就是将某个游戏对象 使用插值运算移动到(20,5,0)
DoTween
作为Unity中最常用的几种插件之一 作用可大了去了,这里只是演示最基本的物体移动方法
首先,需要再工程中导入DoTween插件才可以使用
1)改变世界坐标
//移动方法,第一个参数是要移动到的目标点,不是移动这个向量的距离
transform.DOMove(new Vector3(1, 1, 1), 2);
只控制x轴上的移动,其他两个方向同理
transform.DOMoveX(1, 2);
2)改变局部坐标
//移动方法,第一个参数是要移动到的目标点,不是移动这个向量的距离
transform.DOLocalMove(new Vector3(1, 1, 1), 2);
transform.DOLocalMoveX(1, 2);
public float Speed = 5f;
private void Start()
{
StartCoroutine(MoveToPosition());
}
IEnumerator MoveToPosition()
{
while (gameObject.transform.localPosition != new Vector3(20, 5, 0))
{
gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(20, 5, 0), Speed * Time.deltaTime);
yield return 0;
}
}
这种方法其实就是第一种方法的实现,只不过使用在了协程里面。
先启动协程,然后使用Vector3.MoveTowards,将游戏对象移动到我们指定的位置即可!