【问题标题】:Required to access non-static member需要访问非静态成员
【发布时间】:2013-12-17 13:35:10
【问题描述】:

我正在尝试将一个脚本中的函数调用到另一个脚本中,但我得到: 访问非静态成员“FireBlock.FireOn()”需要对象引用 我要调用的函数的脚本是 FireBlock,其中包含此函数,它附加到附加到游戏对象的盒子对撞机上。

using UnityEngine;
using System.Collections;

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

这是我尝试在其他脚本中调用它的方式。

void Update ()
{

    FireBlock.FireOn ();
}

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

【问题讨论】:

  • 您可能想了解静态和非静态方法的区别:msdn.microsoft.com/en-us/library/79b3xss3.aspx
  • unity 不能以这种方式工作,您可以查看 Unity3D 文档以了解如何将对象传递给脚本。
  • 当您将其设为公开静态时;你是如何尝试调用它的?你是什​​么意思我什么都没有工作?

标签: c# unity3d


【解决方案1】:

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

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

由于FireOn 是一个实例方法,您不能使用类名调用它。您只能对 static 方法执行此操作。

【讨论】:

  • 这是一个 unity3D 特定问题,您提供的答案并不能解决问题。实际问题是将游戏对象传递给 Unity 参考中详细记录的脚本。
  • @daryal,我不知道 Unity,OP 试图做的事情在 C# 中是不可能的,我告诉他/她需要一个类的实例来调用实例成员, 现在由 OP 来传递或创建一个。
  • 有Unity3D的标签,所以这不仅仅是一个c#问题。我认为每个答案都应该针对特定问题的解决方案,而不是一般问题。
【解决方案2】:

假设您正在尝试访问单声道行为,您首先需要访问 GameObject..

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

GameObject.Find(name string) 



GameObject.FindWithTag(tag string) 

一旦你有了你的游戏对象,现在你需要得到脚本。你用GetComponent<>() 来做这个

整体看起来像这样'

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

或者

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


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

`

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2016-06-19
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多