gpt4 book ai didi

c# - 移动刚体游戏对象的正确方法

转载 作者:行者123 更新时间:2023-11-30 19:23:55 24 4
gpt4 key购买 nike

我刚开始学习 Unity。我试图通过使用这个脚本来移动一个简单的盒子。前提是,每当有人按下“w”时,盒子就会向前移动。

public class PlayerMover : MonoBehaviour {

public float speed;
private Rigidbody rb;


public void Start () {
rb = GetComponent<Rigidbody>();
}

public void Update () {
bool w = Input.GetButton("w");

if (w) {
Vector3 move = new Vector3(0, 0, 1) * speed;
rb.MovePosition(move);
Debug.Log("Moved using w key");

}

}
}

每当我使用它时,按下“w”键时盒子都不会向前移动。我的代码有什么问题?我认为这可能是我设置 Vector 3 move 的方式,所以我尝试用速度替换 z 轴,但这没有用。谁能告诉我哪里搞砸了?

最佳答案

您使用 Rigidbody.MovePosition 移动 Rigidbody并用 Rigidbody.MoveRotation 旋转它如果您希望它与周围的对象正确碰撞。 Rigidbody 不应因其位置、旋转或 Translate 变量/函数而移动。

“w”不是预定义的 SherinBinu提到但这不是唯一的问题。如果您定义它并使用 KeyCode.W 它仍然无法正常工作。该对象将移动一次并停止。

改变

Vector3 move = new Vector3(0, 0, 1) * speed;
rb.MovePosition(move);

tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);

应该这样做:

public float speed;
private Rigidbody rb;


public void Start()
{
rb = GetComponent<Rigidbody>();
}

public void Update()
{
bool w = Input.GetKey(KeyCode.W);

if (w)
{
Vector3 tempVect = new Vector3(0, 0, 1);
tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);
}
}

最后,我想你想用 wasd 键移动你的对象。如果是这种情况,则使用 Input.GetAxisRawInput.GetAxis

public void Update()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");

Vector3 tempVect = new Vector3(h, 0, v);
tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);
}

关于c# - 移动刚体游戏对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43714781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com