使用实例化对象

时间:2015-06-13 16:40:46

标签: c# unity3d

我希望这个类在每次实例化时呈现网格,但是我收到错误,错误

  

CS0120:访问非静态成员需要对象引用   `UnityEngine.GameObject.GetComponent(System.Type的)'

所以我实例化一个名为Rend的Renderer对象,并将其设置为等于非静态成员,但我仍然得到错误?任何帮助将不胜感激,因为我研究了几个小时仍然无法弄清楚这一点。

using UnityEngine;
using System.Collections;

public class SetGrid : MonoBehaviour {

    public int x = 1;
    public int y = 1;

    void Start()
    {
        Renderer Rend = GameObject.GetComponent<Renderer>().material.mainTextureScale = new Vector2 (x, y);

    }
}

3 个答案:

答案 0 :(得分:1)

我假设这个脚本是你的网格游戏对象的一部分,它也有Renderer类型的组件。

缩放Renderer纹理的正确语法如下:

public class SetGrid : MonoBehaviour {

    public int x = 1;
    public int y = 1;

    void Start()
    {
        // Get a reference to the Renderer component of the game object.
        Renderer rend = GetComponent<Renderer>();
        // Scale the texture.
        rend.material.mainTextureScale = new Vector2 (x, y);
    }
}

由于您尝试在GetComponent类型而不是GameObject实例上调用GameObject,因此抛出了错误消息}。脚本本身已经在GameObject的上下文中,这意味着您只能从非静态方法访问具有GetComponent的组件。

答案 1 :(得分:0)

问题不在于Rend对象,而是由于GetComponent方法是非静态的。这意味着您需要实例化一个GameObject对象并使用该对象来调用GetComponent。

答案 2 :(得分:0)

GameObject.GetComponent更改为gameObject.GetComponent,以便您引用此MonoBehavi脚本所属的gameObject

或者你甚至不能使用gameObject.GetComponent而只是单独使用GetComponent

有关详细信息,请参阅MonoBehaviour继承的成员。