2013-12-17 213 views
1

我试图调用一个函数从一个脚本到另一个,但我得到: 访问非静态成员'FireBlock.FireOn()' 需要一个对象引用带有我试图调用的函数的脚本是包含这个的FireBlock,它附加到附加到游戏对象的盒子对撞机上。访问非静态成员

using UnityEngine; 
using System.Collections; 

public class FireBlock : MonoBehaviour { 
public void FireOn() 
{ 
    collider.enabled=false; 
} 

下面是我试图在另一个脚本中调用它的方法。

void Update() 
{ 

    FireBlock.FireOn(); 
} 

任何想法,我哪里出错了?我已经尝试使FireOn函数公共静态,只是无效但nothings工作。

+2

您可能想了解静态和非静态方法之间的区别: http://msdn.microsoft.com/en-us/library/79b3xss3.aspx –

+0

统一不以这种方式工作,你可以检查Unity3D文档如何将对象传递给脚本。当您将其设为公共静态时,请使用 – daryal

+0

;你是如何试图调用它的?你的意思是我的工作没有工作? –

回答

4

您需要创建FireBlock的实例,然后调用该实例的方法。

FireBlock fireBlock = new FireBlock(); 
fireBlock.FireOn(); 

由于FireOn是你无法用类名调用它的实例方法。您只能对static方法执行此操作。

+0

这是一个unity3D特定问题,您提供的答案不能解决问题。实际的问题是将一个gameObject传递给一个在Unity参考中有详细记录的脚本。 – daryal

+1

@daryal,我没有关于Unity的想法,OP在C#中尝试做的事情是不可能的,我告诉他/她需要一个类的实例来调用实例成员,现在它最多可以通过OP它或创建一个。 – Habib

+1

有Unity3D的标签,因此这不仅仅是一个C#问题。我认为每个答案都应该指出解决具体问题的方法,而不是一个普遍问题。 – daryal

1

假设你正在试图访问一个单一的行为,你首先需要访问游戏对象..

有几个方法可以做到这一点,这里是你的主要工具。

GameObject.Find(name string) 



GameObject.FindWithTag(tag string) 

一旦你有了你的gameobject,现在你需要获得脚本。为此,您可以GetComponent<>()

总之它看起来像这样'

FireBlock MyFireBlock = GameObject.Find("mygameobject").GetComponent<FireBlock>() ; 

或者

GameObject mygameobject = GameObject.Find("mygameobject") ; 


FireBlock MyFireBlock = Mygameobject.GetComponent <FireBlock>(); 

`