我正在使用Unity 5(3D)制作游戏并使用c#进行脚本编写。所以我基本上有第三个人用8个方向控件(WASD)来运行,我现在设置的方式是这样的(忽略所有公共变量进行测试):
public class Player8D : MonoBehaviour
{
public float moveSpeed;
public float moveSpeedMax = 13.5F;
public float turnSpeed = 4F;
public float transitionSpeed = 10F;
private float moveSmooth = 0.0F;
public float moveSmoothTime = 10F;
private Animator anim;
private Rigidbody rb;
private CharacterController cc;
void Start()
{
anim = gameObject.GetComponentInChildren<Animator>();
rb = gameObject.GetComponentInChildren<Rigidbody>();
cc = gameObject.GetComponentInChildren<CharacterController>();
}
void Update()
{
Vector3 NextDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
if (NextDir != Vector3.zero) //When movement input is happening
{
anim.SetInteger("Run", 1); //Animation stuff
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(NextDir), Time.deltaTime * turnSpeed);
moveSpeed = Mathf.SmoothDamp(moveSpeed, moveSpeedMax, ref moveSmooth, moveSmoothTime / 100);
} else
{
moveSpeed = Mathf.SmoothDamp(moveSpeed, 0.00F, ref moveSmooth, transitionSpeed / 100);
anim.SetInteger("Run", 0); //Animation stuff
anim.CrossFade("Idle", transitionSpeed / 100);
}
transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed); //Movement code
}
}
这给了我最好的感受,因为它朝着它面向的方向移动,而不是像cc.Move那样在8个不同的世界方向。据说它有一个不在物理学中的警告,我有点需要OnTriggerEnter并且现实地下降并且它使得上坡变得奇怪。我不知道如何管理rb.AddForce或AddRelativeForce函数,因为当我用它们替换transform.Translate时它们不会移动我的角色,无论力量有多大。 如何更改代码和组件以使我的角色在物理学中移动?