首页 > 解决方案 > 旋转时控制混乱

问题描述

我正在为我的 Unity 游戏中的角色创建一个简单的控制器脚本。但是,当我按下 W 并让我的角色转动时,它的动作会发生变化,并且所有的键绑定都搞砸了。这是我的转换角色的代码:

transform.rotation = Quaternion.Euler(0,90,0);

我的其余代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour {
    public float moveSpeed;
    void Start () {
        moveSpeed = 2f;
    }

    void Update () {

        transform.Translate(moveSpeed*Input.GetAxis("Horizontal")*Time.deltaTime,0f,moveSpeed*Input.GetAxis("Vertical")*Time.deltaTime);
        var v = Input.GetAxis("Vertical");
        var h = Input.GetAxis("Horizontal");

        if (v==1)
        {
            transform.rotation = Quaternion.Euler(0,90,0);
        }
    }
}

标签: c#unity3d

解决方案


Transform.Translate函数默认在局部空间中的对象中移动。当游戏对象旋转时,这会使 WASD 键移动到对象所面对的位置。

为防止这种情况,请将其移至世界空间。您可以通过传递Space.WorldTransform.Translate函数的第二个参数来做到这一点。

void Update()
{

    var v = Input.GetAxis("Vertical");
    var h = Input.GetAxis("Horizontal");

    Vector3 translation = new Vector3(h, 0, v);
    translation *= moveSpeed * Time.deltaTime;

    transform.Translate(translation, Space.World);


    if (v == 1)
    {
        transform.rotation = Quaternion.Euler(0, 90, 0);
    }
}

推荐阅读