繁体   English   中英

3d unity c# 小车反向运动

[英]3d unity c# car reverse direction movement

我需要一些帮助来在 unity C# 脚本中反向移动我的播放器汽车。 正向运动是完美的,但反向运动完全出乎我的意料。 当我同时按下 DownArrow 和 RightArrow 时,我希望我的车向右反方向移动,但我得到的 output 是向左反方向。 相应地,当我同时按下 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);
    }
}

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

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

我不知道您的反向翻译为什么不起作用,但是请问这是否能为您带来想要的结果。 如果前进是可行的,则只需将其反转即可快速解决。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM