C# 需要访问非静态成员

C# 需要访问非静态成员,c#,unity3d,C#,Unity3d,我试图将一个函数从一个脚本调用到另一个脚本,但我得到: 访问非静态成员“FireBlock.FireOn”需要对象引用 我试图调用的函数的脚本是FireBlock,其中包含连接到游戏对象的框碰撞器上的该脚本 using UnityEngine; using System.Collections; public class FireBlock : MonoBehaviour { public void FireOn () { collider.enabled=false; } 下面是我

我试图将一个函数从一个脚本调用到另一个脚本,但我得到: 访问非静态成员“FireBlock.FireOn”需要对象引用 我试图调用的函数的脚本是FireBlock,其中包含连接到游戏对象的框碰撞器上的该脚本

using UnityEngine;
using System.Collections;

public class FireBlock : MonoBehaviour {
public void FireOn ()
{
    collider.enabled=false;
}
下面是我在另一个脚本中如何调用它

void Update ()
{

    FireBlock.FireOn ();
}

知道我哪里出错了吗?我已尝试将FireOn函数设置为公共静态,只是无效,但没有任何效果。

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

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

因为FireOn是一个实例方法,所以不能用类名调用它。您只能对静态方法执行此操作

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

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

因为FireOn是一个实例方法,所以不能用类名调用它。您只能对静态方法执行此操作

假设您试图访问mono行为,您首先需要访问GameObject

有几种方法可以做到这一点,以下是您的主要工具

GameObject.Find(name string) 



GameObject.FindWithTag(tag string) 
一旦你有了游戏对象,现在你需要得到脚本。您可以使用GetComponent执行此操作

所有这些看起来都是这样的

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


`

假设您试图访问mono行为,您首先需要访问GameObject

有几种方法可以做到这一点,以下是您的主要工具

GameObject.Find(name string) 



GameObject.FindWithTag(tag string) 
一旦你有了游戏对象,现在你需要得到脚本。您可以使用GetComponent执行此操作

所有这些看起来都是这样的

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


`

您可能想了解静态方法和非静态方法之间的区别:unity不是这样工作的,您可以查看Unity3D文档,了解如何将对象传递给脚本。当您将其公开为静态时;你是如何尝试调用它的?你说我的虚无有效是什么意思?你可能想了解静态方法和非静态方法之间的区别:unity不是这样工作的,你可以查看Unity3D文档,了解如何将对象传递给脚本;你是如何尝试调用它的?你说我什么都没用?这是一个unity3D特定的问题,你提供的答案无法解决问题。实际的问题是将一个游戏对象传递给一个脚本,该脚本在Unity reference中有很好的文档记录。@daryal,我不知道Unity,OP试图做的事情在C中是不可能的,我告诉他/她需要类的一个实例来调用实例成员,现在需要OP来传递或创建一个,因此,这不仅仅是一个c问题。我认为每个答案都应该指向特定问题的解决方案,而不是一般问题。这是一个unity3D特定问题,您提供的答案无法解决问题。实际的问题是将一个游戏对象传递给一个脚本,该脚本在Unity reference中有很好的文档记录。@daryal,我不知道Unity,OP试图做的事情在C中是不可能的,我告诉他/她需要类的一个实例来调用实例成员,现在需要OP来传递或创建一个,因此,这不仅仅是一个c问题。我认为每个答案都应该指向具体问题的解决方案,而不是一般问题。