我是团结的新手,我有一个要移动的物体。 但是这个物体根本不会动。它会改变他的方向,因此对象可以向左/向右看,但不会偏离他的起点。
因此,基本上,对象可以旋转,但不能沿任何方向移动。
问题是:如何使对象移动
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");
}
}
答案 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之类的创作者积压了大量工作,这确实很有用。