3d团结c#汽车倒车方向运动

时间:2016-04-26 15:26:16

标签: c# unity3d

我需要一些帮助才能在统一C#脚本中反向移动我的玩家车。向前运动是完美的,但反向运动与我的期望完全相反。当我按下DownArrow和RightArrow时,我希望我的车向右移动,但我得到的输出是向左反方向。相应地,当我按下DownArrow和LeftArrow时,正好相反。这是我的3D游戏。如果这有所帮助,我在Windows 7中使用Unity 5.2.0f3(64位)

此编码还包括一些冲突。

using UnityEngine;

using System.Collections;


public class Playermovement : MonoBehaviour
{


    public float speed=60;
    // Use this for initialization

    void Start ()
    {


    }


    // Update is called once per frame

    void Update () 
    {


    if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.forward*speed*Time.deltaTime);
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(0,-90*Time.deltaTime,0);
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Rotate(0,90*Time.deltaTime,0);
        if(Input.GetKey(KeyCode.DownArrow))
            transform.Translate(Vector3.back*speed*Time.deltaTime);
        if (Input.GetKey(KeyCode.Escape))
            Application.LoadLevel("Menu");
    }

    void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.tag=="Finish")
            Application.LoadLevel("Victory");
        if (other.gameObject.tag == "Destroy")
            transform.Rotate(0, 180, 0);
    }
}

3 个答案:

答案 0 :(得分:2)

您正在以固定方向旋转对象,但是当方向向后时,您希望它被反转,然后只是在相反的方向旋转:

void Update () 
{


    if(Input.GetKey(KeyCode.UpArrow))
    {
        transform.Translate(Vector3.forward*speed*Time.deltaTime);

        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(0,-90*Time.deltaTime,0);
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Rotate(0,90*Time.deltaTime,0);
    }

    if(Input.GetKey(KeyCode.DownArrow))
    {
        transform.Translate(Vector3.back*speed*Time.deltaTime);

        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(0,90*Time.deltaTime,0);
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Rotate(0,-90*Time.deltaTime,0);
    }

    if (Input.GetKey(KeyCode.Escape))
        Application.LoadLevel("Menu");
} 

答案 1 :(得分:1)

试试这个:

./utility --log-file=>(cat>&2); wait

我不知道为什么你的翻译不起作用,但看看这是否能给你想要的结果。如果前锋正在工作,那么只需将其倒转就可以作为快速解决方案。

答案 2 :(得分:1)

模型在右键按下顺时针旋转,在左键上逆时针旋转。这就是使用此代码向后移动模型时向左移动的原因。您需要进一步检查以确定您行进的方向,以确定旋转模型的方向。如果向后移动则反转当前的旋转。

有点hacky但可以试试这个:

void Update () 
{
var reverseDeltaTime = Time.deltaTime;
if (Input.GetKey(KeyCode.DownArrow))
reverseDeltaTime = -reverseDeltaTime;

if(Input.GetKey(KeyCode.UpArrow))
    transform.Translate(Vector3.forward*speed*Time.deltaTime);
if(Input.GetKey(KeyCode.LeftArrow))
    transform.Rotate(0,-90*reverseDeltaTime ,0);
if(Input.GetKey(KeyCode.RightArrow))
    transform.Rotate(0,90*reverseDeltaTime ,0);
if(Input.GetKey(KeyCode.DownArrow))
    transform.Translate(Vector3.back*speed*Time.deltaTime);
if (Input.GetKey(KeyCode.Escape))
    Application.LoadLevel("Menu");
}