我正在关注Unity网站上的太空射击教程。
我已经完成了玩家对象的移动动作。
当我开始游戏时,即使没有输入,宇宙飞船也会自动移动到左上角。
我完全按照原样遵循了教程。即使资产商店中可用的已完成场景也存在同样的问题。
我正在使用Unity 5.3。
PlayerController.cs
using UnityEngine;
using System.Collections;
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour {
public float speed;
public Boundary boundary;
public float tilt;
// Use this for initialization
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
GetComponent<Rigidbody>().velocity = movement * speed;
GetComponent<Rigidbody>().position = new Vector3(
Mathf.Clamp(GetComponent<Rigidbody>().position.x,boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(GetComponent<Rigidbody>().position.z, boundary.zMin, boundary.zMax));
GetComponent<Rigidbody>().rotation = Quaternion.Euler(0,0, GetComponent<Rigidbody>().velocity.x * -tilt);
}
}
答案 0 :(得分:2)
你的代码似乎是正确的,因为你说演示场景是一样的,我想问题来自你的Axis输入:线条添加运动
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
使用名为Horizontal
和Vertical
的轴。在您的统一实例上,这些输入可能链接到发送事件的设备(您可能插入了控制器......)
要测试此项,您可以在阅读输入的下方添加以下行:
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Debug.Log("Movement: " + moveHorizontal + ", " + moveVertical); // <-- add this
这会将您获得的值写为输入。如果你不接触任何东西,它们应该为零。如果它们不为零,请转到Edit -> Project Settings -> Input
,您将看到键盘,鼠标和其他控制器如何链接到Unity中的事件,例如Horizontal
和Vertical
有关输入管理器的详细信息,请参阅http://docs.unity3d.com/Manual/class-InputManager.html
祝你好运!