当玩家按下按钮时,我试图让传送带反转方向。
这里是传送带的代码
using UnityEngine;
using System.Collections;
public class Conveyor : MonoBehaviour {
public float speed = 1.0f;
void OnTriggerStay(Collider col)
{
col.transform.position += transform.forward * speed * Time.deltaTime;
}
}
按钮的代码
public class PushButton : MonoBehaviour
{
public GameObject Button;
private Conveyor conveyor;
void Awake ()
{
conveyor = GetComponent<Conveyor>();
}
void OnTriggerStay(Collider entity)
{
if (entity.tag == "Player")
{
if (Input.GetKeyUp(KeyCode.E))
{
conveyor.speed = conveyor.speed * -1;
}
}
}
}
我收到错误说&#34;对象引用没有设置为对象的实例PushButton.OnTriggerStay(Unity Engine.Collider实体)(在Assests / PushButton.cs21)
我还不太熟悉使用getComponent,所以我不确定如何解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:0)
GetComponent需要引用初始化对象以及对象已分配的组件或类。对于你想要的东西,你会想要在场景中找到一个游戏对象。因为您已经指定GameObject具有分配给它的Conveyor类,所以找到您的GameObject然后指定Conveyor组件。
void Awake ()
{
conveyor = GameObject.FindWithTag("Conveyor").GetComponent<Conveyor>();
}
如果您使用“传送带”标签标记了Conveyor游戏对象,这应该可以解决问题。
然而,更容易更快地“抓住”这样的东西。但要小心!
void Awake()
{
conveyor = Object.FindObjectOfType<Conveyor>();
// ONLY DO THAT IF THERE IS ONLY >>ONE<< OF THE THING!
}
这是一篇关于此的文章。 http://answers.unity3d.com/answers/46285/view.html
你经常这样做,例如找到“老板”对象......场景管理者等。
不要忘记,你可以随时使用公共变量,并拖动Inteh Inspector - 这对于使用Unity的初学者来说总是一个好主意。