相机相对运动

时间:2016-06-05 02:46:31

标签: c# unity3d unity5

我遇到了一个我无法解决的问题。

我通过Unity制作一个自上而下的透视3D游戏。我有一个控制器,可以让我的角色在按下移动键时旋转和移动。按" D"例如,将播放器对象旋转到右侧然后然后刚性体在该方向上移动,但是如果我旋转相机,则播放器将不会相对于摄像机方向向右移动。

运动:

    //Player Movement
    void HandleMove()
    {
        if (canMove == true)
        {
           //Detect input movement
            var moveHorizontal = Input.GetAxis("Horizontal");
            var moveVertical = Input.GetAxis("Vertical");
            IsMoving = moveHorizontal != 0 || moveVertical != 0;

            Vector3 relative = transform.rotation.eulerAngles;
            relative.y = pCamera.playerRelativeAngle;

            //Rotate the character
            var movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
            var rot = movement * (speed / 10);

            if (attackTimer <= 0 && movement != Vector3.zero)
            {
                Vector3 temp = transform.rotation.eulerAngles;
                var newRotation = Quaternion.LookRotation(rot);
                transform.rotation = Quaternion.RotateTowards(transform.rotation, newRotation, 10F);
            }

            //Move the character
            if (IsMoving && offset.y != 0f)
            {
                movement.y = offset.normalized.y * movement.magnitude;
            }

            var characterMovement = transform.position + movement;
            if (attackTimer <= 0 || !IsGrounded)
            {
                rbody.MovePosition(characterMovement);
            }
    }

我对于该做什么有一点想法,但是我无法完全掌握它,我有一个可以返回其欧拉角的相机设置,我试图找出一种方法来使用它来进行相对运动,但我不是确定在我的运动控制器中何处或如何应用它。

相机:

//Find camera angle
public static float playerRelativeAngle;

//On awake, do this
void Awake()
{
    //Get the cameras angle so we can move the player relative to it???
    playerRelativeAngle = this.transform.localEulerAngles.y;
}

//Update every frame
void Update()
{
    playerRelativeAngle = this.transform.localEulerAngles.y;

    //If the right key is pressed then the caerma rotates to the right 
    if (Input.GetKey("right"))
    {
        this.transform.RotateAround(target.transform.position, Vector3.down, cameraSpeed * Time.deltaTime);
    }
    if (Input.GetKey("left"))
    {
        this.transform.RotateAround(target.transform.position, Vector3.down, -cameraSpeed * Time.deltaTime);
    }
}

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我设法找到解决问题的方法。

运动:

float

玩家对象现在相对于相机旋转,然后在按下移动键时向玩家向前方向施加力。

它不是一个完美的解决方案,但希望这可以帮助将来的某个人。