1

我想从 CarAgent 组件(出租车游戏对象)访问 Horizo​​ntalAxis 变量。当我尝试从另一个游戏对象访问它时它工作正常,但是当我尝试在 CarUserControl 中访问它时,它也是一个出租车组件,它说 CarAgent 不存在。

这是另一个游戏对象的脚本,它工作正常:

private float HorizontalAxis;

public void Start() {

     HorizontalAxis = GameObject.Find("Taxi").GetComponent<CarAgent>().HorizontalAxis;
}

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

    transform.rotation = new Quaternion(0, 0, HorizontalAxis, 360);

}

这是 CarUserControl 脚本:

 private void Start()
    {
        HorizontalAxis = GameObject.Find("Taxi").GetComponent<CarAgent>().HorizontalAxis;
}

如何访问 CarUserControl 中的 Horizo​​ntalAxis 变量?

编辑:我尝试访问此脚本中的其他类,但它也不起作用。我从 UnityStandardAssets/Vehicules/Car 得到这个脚本,所以一开始是这样写的:

namespace UnityStandardAssets.Vehicles.Car
{
[RequireComponent(typeof (CarController))]
public class CarUserControl : MonoBehaviour
{

我是统一和 c# 的新手,所以它改变了一些东西。如果是,我该如何解决?

4

3 回答 3

1

最后,问题在于 CarUserControl 位于标准资产文件夹中,而 CarAgent 脚本不在该文件夹中。显然,标准资产文件夹不会与其他文件夹同时编译。在这里查看更多!

于 2019-01-04T18:35:12.657 回答
0

Update()这主要是因为(每一帧)和FixedUpdate()(每一物理帧)之间存在不一致。实际上FixedUpdate,对于同一帧,可以多次调用a Update(),或者根本不调用。

Unity 关于执行顺序的文档对此进行了更多解释。

此外,GetComponent<T>循环查询非常繁重。Init在类似Start()or的方法中“缓存”引用更为明智Awake()

private HorizontalAxis hAxis;

public void Start(){
    GameObject taxi = GameObject.Find("Taxi");
    if(taxi != null){ 
        hAxis = taxi.GetComponent<CarAgent>().HorizontalAxis;
    }
}

public void Update(){
   if(hAxis != null)
     transform.rotation = new Quaternion(0, 0, hAxis, 360);
}

public void FixedUpdate(){
    if(hAxis != null){
        // Do only Physics related stuff: rigidbodies, raycast
        // inputs and transform operations should stay in the Update()
    }
}
于 2018-12-30T14:41:45.113 回答
0

您可能在游戏对象链中太低或太高。

尝试

car = GetComponent<CarAgent>(this.parent);

或者

car = GetComponent<CarAgent>(this.child);
h = car.HorizontalAxis;
于 2018-12-29T19:42:02.177 回答