transform.Translate不会削减它和rigidbody.AddRelativeForce不会移动我的角色(Unity和c#)

时间:2016-10-12 11:21:15

标签: c# unity3d game-engine game-physics unity5

我正在使用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时它们不会移动我的角色,无论力量有多大。 如何更改代码和组件以使我的角色在物理学中移动?

以下是我的场景层次结构的屏幕截图: enter image description here

0 个答案:

没有答案