【问题标题】:What's wrong with my Vehicle code?我的车辆代码有什么问题?
【发布时间】:2016-03-26 00:36:58
【问题描述】:

我试图使用 C# 脚本统一创建汽车,一切似乎都很好,汽车左右旋转,除了 1 个问题。当我按下前进或后退键时,汽车会左右移动而不是前进和后退,我看不出我的代码有什么问题,这是我的代码:

using UnityEngine;
using System.Collections;

public class Car : MonoBehaviour {
    private Rigidbody carRigid;
    public int speed;
    public int rotateSpeed;

    // Use this for initialization
    void Start () {
        carRigid = GetComponent<Rigidbody> ();

    }

    // Update is called once per frame
    void Update () {

    }
    void FixedUpdate(){
        if (Input.GetButton("Forward")){
            carRigid.AddForce (transform.forward * speed * Time.deltaTime);
}
        if (Input.GetButton("Reverse")){
            carRigid.AddForce (transform.forward * -speed * Time.deltaTime);
        }

        if (Input.GetButton("Left")){
            transform.Rotate (0, rotateSpeed, 0);
        }

        if (Input.GetButton("Right")){
        transform.Rotate (0, rotateSpeed, 0);
        }
    }
}

【问题讨论】:

  • 你的车在你不转弯的时候会前后走,但在你转弯后却是横着走?
  • 不,它总是横着走。即使我从未按下旋转按钮。

标签: c# unity3d


【解决方案1】:

您的汽车在与您想要的轴不同的另一个轴上移动。试试 transform.right / transform.left 或 transform.up / transform.down 。

【讨论】:

  • 那行得通,谢谢,我不得不添加“transform.right”而不是“transform.forward”,并切换我的“速度”和“速度”。出于某种原因,“transform.left”不存在。
【解决方案2】:

我刚刚在一个空白的 Unity 场景中测试了你的代码,我认为你 AddForce() 是罪魁祸首!

我用过

if (Input.GetKey(KeyCode.W))
{
    transform.position += transform.forward * speed * Time.deltaTime;
}

这似乎工作得很好!

【讨论】:

  • 应该是 AddRelativeForce 吧?
  • 有可能,我通常使用transform.position 进行运动,使用刚体进行跳跃等动作。
【解决方案3】:

可能是因为您导入了一个本地转发不正确的 3D 模型。

你有一些选择: 1)在3d建模程序中修复它并再次导出。

2) 创建一个空的 GameObject 并将其设为汽车的父级。将刚体和相关代码分配给这个 GameObject 并在其本地空间中旋转汽车模型,直到它固定(我猜是 90 度)。

3) 根据模型的旋转使用 transform.right 或 transform.left。

我个人更喜欢第一选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多