移动刚体

时间:2019-08-26 13:35:30

标签: c# unity3d rigid-bodies

我是团结的新手,我有一个要移动的物体。 但是这个物体根本不会动。它会改变他的方向,因此对象可以向左/向右看,但不会偏离他的起点。

因此,基本上,对象可以旋转,但不能沿任何方向移动。

问题是:如何使对象移动

public float movementSpeed = 20;
Animator anim;
Rigidbody rb;

public Text countText;
public Text winText;

private int count;

void Start()
{
    anim = GetComponent<Animator>();
    rb = GetComponent<Rigidbody>();
    count = 0;
    SetCountText();
    winText.text = "";
}

void FixedUpdate()
{
    ControllPlayer();
}

void ControllPlayer()
{
    float moveHorizontal = Input.GetAxisRaw("Horizontal");
    float moveVertical = Input.GetAxisRaw("Vertical");

    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

    if (movement != Vector3.zero)
    {
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement), 0.15f);
        anim.SetInteger("Walk", 1);
    }
    else
    {
        anim.SetInteger("Walk", 0);
    }


    rb.addForce(movement * movementSpeed * Time.deltaTime);

}

public void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("Pick Up"))
    {
        other.gameObject.SetActive(false);
        count = count + 1;
        SetCountText();
    }
}

void SetCountText()
{
    countText.text = "Food: " + count.ToString();
    if (count >= 10)
    {
        SceneManager.LoadScene("Victory");
    }
}

1 个答案:

答案 0 :(得分:0)

这似乎使您要做的事情有些复杂。

目前我还没有真正在3D世界中做任何事情,但是YouTube快速搜索显示了this个视频。

他使用的代码是

transform.Translate(moveSpeed*Input.GetAxis("Horizontal")*Time.deltaTime,0f,moveSpeed*Input.GetAxis("Vertical")*Time.deltaTime); 
Update()方法内

,其中moveSpeed是公共变量,因此您可以在检查器中对其进行更改。

然后可以进行检查以查看是否在移动,并相应地设置动画值。

我总是建议您将玩家的动作放到Update()方法中,否则可能会感觉时滞和按键失误,尤其是在您进行大量动作(例如两次跳远)的情况下。

希望这会有所帮助,并祝Unity :)好运。

顺便说一句,因为您是新手,所以我已经建议您先在YouTube上搜索教程-大多数情况下,有人对您想做的事情做了一个。 Brackeys之类的创作者积压了大量工作,这确实很有用。