点击鼠标即可将玩家旋转90度

时间:2016-09-25 01:34:48

标签: c# unity3d

我正在制作一个简单的亚军游戏,我正试图这样做,当你点击鼠标时,它将玩家旋转90度,然后他就朝这个方向跑。 因此,如果您正在直线行驶,请单击左侧现在运行的鼠标。播放器运行,当我单击鼠标按钮时,他转动,但是第一次是90度,第二次更像是60度,然后第3次回到90度,最后第四次是60度(大致) 再来一次。 我的问题是;从这段代码来看,为什么两个点击输出90度,而另外两个不是?即使每次点击都基于相同的代码。此外,如果我可以优化我的代码任何非常感谢。这是我第一次尝试制作这样的系统。 注意:

controller.Move (moveVector * Time.deltaTime);// Move the player
transform.Translate (moveVector * (speed) * Time.deltaTime); // Move on player axis instead of world axis.

两者都被使用,因为只有控制器。移动我的播放器只能直接运行 只有转换。翻译我的玩家永远落在地上。 这是我到目前为止的代码:

using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour 
{
    private CharacterController controller;
    private Vector3 moveVector;
    private float speed = 2.0f;
    private float verticalVelocity = 0.0f;
    private float gravity = 12.0f;   
    void Start() 
    {
        controller = GetComponent<CharacterController> ();
    }
    void Update() 
    {
        if (Input.GetMouseButtonDown(0)) 
        {
            transform.Rotate(new Vector3(0, -90, 0));
        }
        moveVector = Vector3.forward;
        if (controller.isGrounded) 
        {
            verticalVelocity = -0.5f;
        } 
        else 
        {
            verticalVelocity -= gravity * Time.deltaTime;
        }
        moveVector.x = Input.GetAxisRaw ("Horizontal") * speed;
        moveVector.y = verticalVelocity;
        moveVector.z = speed;
        controller.Move (moveVector * Time.deltaTime);
        transform.Translate (moveVector * (speed) * Time.deltaTime);
    }
}

1 个答案:

答案 0 :(得分:1)

播放器的旋转与播放器的移动方式无关。实际移动路径由玩家的位置和moveVector确定。

  

只需控制器。移动我的播放器只能直接跑。

那是因为moveVector总是(0.0,-0.5,2.0)。

如果我没弄错的话,你希望玩家朝着它面向的方向移动,对吧?你可以通过使用如下的moveVector来实现这一点。

    moveVector.x = transform.forward.x * speed;
    moveVector.y = verticalVelocity;
    moveVector.z = transform.forward.z * speed;

删除transform.Translate行。