用鼠标点击将玩家旋转90度

本文关键字:玩家 旋转 90度 鼠标 | 更新日期: 2023-09-27 18:08:44

我正在制作一款简单的跑步游戏,我试图让玩家在点击鼠标时转动90度,然后朝那个方向跑。所以如果你是直线跑,点击鼠标你现在是向左跑。等。玩家跑起来,当我点击鼠标按钮时,他会转身,但第一次是90度,第二次是60度,然后第三次是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);
    }
}

用鼠标点击将玩家旋转90度

玩家的旋转与玩家的移动方式无关。实际的移动路径仅由玩家和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