我希望这个类在每次实例化时呈现网格,但是我收到错误,错误
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);
}
}
答案 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继承的成员。