我想在Unity中移动一个GameObject。我想把它移动一个固定的距离。我尝试过使用AddForce,但游戏对象一直在无限移动。
这是我的代码:
Vector2 movementMonster = new Vector2(-4, 0);
rbMonster1.AddForce(movementMonster);
我也尝试过没有任何结果的翻译:
monster1.transform.Translate(Vector2.left * 5 * Time.deltaTime);
答案 0 :(得分:1)
.Translate需要Vector3:
Vector3 movementMonster = new Vector3(-4, 0, 0);
你想在一个帧中移动一个固定的距离吗?
monster1.transform.Translate(movementMonster);
或超过一定时间(例如一秒钟)?
monster1.transform.Translate(movementMonster * Time.deltaTime);
答案 1 :(得分:1)
每次调用时,Transform.Translate(movementMonster)都会通过定义的Vector3移动怪物移动你的GameObject。 例如:
如果是Vector3(0,0)
,我们假设怪物的起始位置monster1.transform.Translate(movementMonster);
第一次打电话给你的怪物现在是Vector3(-4,0,0)
monster1.transform.Translate(movementMonster);
第一次打电话给你的怪物后现在是Vector3(-8,0,0)
monster1.transform.Translate(movementMonster);
Vector3(-12,0,0)等..
只要我明白你需要随着时间的推移将'怪物'移动到某个位置。您可以使用Vector3.MoveTowards()
的方法,以便跳过一些数学运算。
using UnityEngine;
class Monster : MonoBehaviour {
public Vector3 endPosition;
public float speed = 1f; // The monster will move a one unity per second
public void Update(){
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, endPosition, step);
}
您可能想要点击Unity3D教程页面,其中介绍了这种基础知识。 https://unity3d.com/learn/tutorials/s/scripting