使用GetComponent C#编辑变量

时间:2016-02-19 21:21:08

标签: c# unity3d

当玩家按下按钮时,我试图让传送带反转方向。

这里是传送带的代码

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,所以我不确定如何解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 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的初学者来说总是一个好主意。