我需要一些帮助才能在统一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);
}
}
答案 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");
}