2016-02-19 57 views
0

我试图让玩家按下按钮时传送带扭转方向。用GetComponent C编辑变量#

下面是传送带

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

我得到一个错误说“对象未设置为一个对象按钮的实例.OnTriggerStay(Unity Engine.Collider实体)(在Assests/PushButton.cs21)

我还不是很熟悉使用getComponent,所以我不知道如何解决这个问题。不胜感激。

+0

注意“public GameObject Button”变量必须是小写字母,所以它会是“按钮”。另外请注意,Unity中有一个叫做“Button”的东西,所以你可能不会使用它。例如,将其称为“topLeftRedButton” – Fattie

回答

0

GetComponent将需要对初始化对象和对象已分配的组件或类的引用。对于你想要的东西,你会想在场景中找到一个游戏对象。由于您已指定您的GameObject具有分配给它的Conveyor类,因此请找到您的GameObject,然后指定Conveyor组件。

void Awake() 
{ 
conveyor = GameObject.FindWithTag("Conveyor").GetComponent<Conveyor>(); 
} 

这应该做的窍门,等待你用'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的人来说总是一个好主意。