"访问非静态成员需要一个对象引用"使用静态时出错

时间:2015-03-07 23:05:42

标签: c# unity3d static static-methods

我在“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 ();

  }

}

我显然做错了什么,但我怎么能解决这个问题呢?如果还有其他方法,请告诉我。我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

假设只有一个Paddle,一个选项可能是声明一个作为Paddle的静态var,并在你的代码中引用它。

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);
    }

}

答案 1 :(得分:0)

您需要获取要对其进行转换的Component。您将从正在使用的GameObject中获取此信息。你可以使用

GameObject.Find("name")

GameObject.FindWithTag("tagName")

然后只要游戏对象不为null,您就可以:

myGameObject.GetComponent<T>()

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