3D Unity C# 汽车反向运动



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

此编码还包括一些冲突。

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

您正在以固定方向旋转对象,但您希望在方向向后时将其反转,如果是这种情况,则只需向相反方向旋转:

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

试试这个:

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

我不知道为什么你的回译不起作用,但看看这是否给了你想要的结果。如果前向有效,那么简单地反转它可以作为快速解决方案。

我喜欢

Gusman的回答,因为它让我朝着正确的方向前进,但它与我正在构建的游戏不兼容。

我正在 2020.3.0f1 LTS 版本上构建初级程序员系列中的第一个应用程序,这是我附加到车辆的脚本文件播放器控制器。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
    private float speed = 12.0f;
    private float turnSpeed = 65.0f;
    private float horizontalInput;
    private float forwardInput;
    // Start is called before the first frame update
    void Start()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        horizontalInput = Input.GetAxis("Horizontal");
        forwardInput = Input.GetAxis("Vertical");
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Translate(Vector3.forward * speed * Time.deltaTime * forwardInput);
            if (Input.GetKey(KeyCode.LeftArrow))
                transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
            if (Input.GetKey(KeyCode.RightArrow))
                transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Translate(Vector3.forward * speed * Time.deltaTime * forwardInput);
            if (Input.GetKey(KeyCode.LeftArrow))
                transform.Rotate(Vector3.down, turnSpeed * horizontalInput * Time.deltaTime);
            if (Input.GetKey(KeyCode.RightArrow))
                transform.Rotate(Vector3.down,  turnSpeed * horizontalInput * Time.deltaTime);
        }
    //We will move the vehicle forward here.
    //    
    //    transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
    //    transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
    }
}

最新更新