c# - 单击鼠标将播放器旋转 90 度

标签 c# unity3d

我正在制作一个简单的运行游戏,我正在努力做到当您单击鼠标时它会将玩家旋转 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.

两者都被使用,因为只有 Controller 。移动我的播放器只能直线运行 并且只有 transform.Translate 我的播放器永远掉在地上。 这是我到目前为止的代码:

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);
    }
}

最佳答案

玩家的旋转与玩家的移动方式无关。实际的移动路径仅由玩家的位置和 moveVector 决定。

With just controller.Move my player only runs straight.

那是因为 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 行。

关于c# - 单击鼠标将播放器旋转 90 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682598/

相关文章:

c# - 如何检测var是否为字符串

unity3d - 以全音量播放3D声音

unity3d - Canvas 没有在顶部渲染

c# - Unity中的简单事件系统

c# - 使用 Entity Framework 处理 MDI 应用程序中的对象上下文

c# - C#-随机数生成器错误

c# - 将 CAEmitterCell 添加到另一个 CAEmitterCell

c# - Nhibernate 不存在的地方

c# - 从 Random.Range() 中排除值?

c# - Unity - 通过抵消重力创建气垫车