【问题标题】:" An object reference is required to access non-static member" error when using static使用静态时出现“访问非静态成员需要对象引用”错误
【发布时间】:2015-03-07 23:05:41
【问题描述】:

我在“Paddle”类中创建了一个方法(changePaddleSize),并试图从另一个类“paddleMinimizer”中调用它。执行此操作时,我收到以下错误:

访问非静态成员 `UnityEngine.Component.transform' 需要对象引用

这是我的课程:

public class Paddle : MonoBehaviour {

 public static void changePaddleSize(){

    transform.localScale = new Vector3(2f, 0.5f, 1);

   }
}

public class paddleMinimizer : MonoBehaviour {
public GameObject triggerText;
void OnCollisionEnter () {
    Paddle.changePaddleSize ();

  }

}

我显然做错了什么,但我该如何解决这个问题?如果有其他方法可以做到这一点,请告诉我。将不胜感激。

【问题讨论】:

  • 您的 changePaddleSize 函数是静态的,但它试图访问的 transform 属性不是。可能是您的 paddleMinimizer 对象应该引用特定的 Paddle,或者您的 Paddle 类可能使用单例模式。
  • 您可以尝试编辑我的代码以提供更好的视角吗?我对 Unity 和 c# 比较陌生。

标签: c# unity3d static static-methods


【解决方案1】:

假设永远只有一个 Paddle,一种选择可能是声明一个静态变量,即 Paddle,并在您的代码中引用。

public class Paddle : MonoBehaviour {

    public static Paddle global;

    void Awake () {
        Paddle.global = GetComponent<Paddle>();
    }

    public static void changePaddleSize(){
        Paddle.global.transform.localScale = new Vector3(2f, 0.5f, 1);
    }

}

这样您仍然可以从任何地方拨打Paddle.changePaddleSize (); 并让它工作。


或者,您可以让changePaddleSize 不是 是静态方法,而是调用Paddle.global.changePaddleSize()

public class Paddle : MonoBehaviour {

    public static Paddle global;

    void Awake () {
        Paddle.global = GetComponent<Paddle>();
    }

    public void changePaddleSize(){
        transform.localScale = new Vector3(2f, 0.5f, 1);
    }

}

【讨论】:

  • 在我的突围游戏中,我有 3 条生命。在我的第一个生命中,我的 Paddle 没有任何反应,但是当我死了并且实例化了一个新的 paddle 时,你的代码可以工作并且 paddle 最小化。这是为什么呢?
  • @tomSurge 听起来很有效,因为当创建一个新的 paddle 时,它​​的 Awake 方法会用刚刚实例化的新 paddle 替换 Paddle.global
【解决方案2】:

您需要获取要用于转换的组件。您将从正在使用的 GameObject 中获得此信息。你可以使用

GameObject.Find("name")

或者

GameObject.FindWithTag("tagName")

那么只要游戏对象不为空就可以:

myGameObject.GetComponent<T>()

其中 T 是您的组件类型。同样,这可能会返回 null,因此您必须对此进行检查。

【讨论】:

  • 我很抱歉问这个问题,但你能编辑我的代码以符合你所说的吗?我是 Unity 和 c# 的新手
  • 认为您需要了解何时何地使用静态类。你读过c#吗?您在任何时候都期望有多少桨?
猜你喜欢
  • 1970-01-01
  • 2014-11-04
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2023-03-30
相关资源
最近更新 更多