C# Unity3d网格渲染
我正在尝试使用C#禁用和启用Unity3d中的C# Unity3d网格渲染,c#,unity3d,C#,Unity3d,我正在尝试使用C#禁用和启用Unity3d中的MeshRender组件,但出现以下错误: 错误CS0120:访问非静态成员“UnityEngine.GameObject.GetComponent(System.Type)”需要对象引用 下面是我正在使用的代码行。我在同一个函数中使用它 MeshRenderer showZone = GameObject.GetComponent<MeshRenderer>(); mesh渲染器showZone=GameObject.GetCompo
MeshRender
组件,但出现以下错误:
错误CS0120:访问非静态成员“UnityEngine.GameObject.GetComponent(System.Type)”需要对象引用
下面是我正在使用的代码行。我在同一个函数中使用它
MeshRenderer showZone = GameObject.GetComponent<MeshRenderer>();
mesh渲染器showZone=GameObject.GetComponent();
另外,我在这里发布的不是Unity的答案,因为我在这里得到的响应要快得多,而且无论结果如何,它都是有用的信息 查看文档:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Example() {
renderer.enabled = false;
}
}
链接:
更改右上角的编程语言。您遇到了几个问题。首先,您试图对类而不是对象的实例使用
GetComponent
。这直接导致你的第二个问题。搜索特定的GameObject
后,您没有使用结果,而是试图禁用包含脚本的GameObject
的渲染器。第三,C#区分大小写,Renderer
是一个类,Renderer
是对Renderer
实例的引用,该实例附加到GameObject
此代码段组合了所有内容:查找游戏对象
并禁用其渲染器
GameObject go = GameObject.FindWithTag("zone1");
if (go != null) { // the result could be null if no matching GameObject is found
go.renderer.enabled = false;
}
您可以使用
go.GetComponent().enabled=false代码>而不是go.renderer。启用=错误
但是通过使用渲染器
您不需要知道游戏对象
使用哪种渲染器。它可以是网格渲染器
或精灵渲染器
,例如,渲染器
始终指向游戏对象
使用的渲染器(如果存在)。我的朋友。只需尝试使用小写的gameObject
而不是gameObject
和renderer
而不是renderer
MeshRenderer showZone = GetComponent<MeshRenderer>();
主要问题是您尝试访问静态类变量,使用类的名称而不是类实例。
这里的类名是GameObject
和Renderer
实例是gameObject
和renderer
MeshRenderer showZone=GetComponent();
MeshRenderer showZone = GetComponent<MeshRenderer>();
删除“游戏对象”
GameObject是一种类型。您需要在游戏对象的实例中调用GetcComponent。这就是错误所在
值得注意的是:
MeshRenderer showZone = GetComponent<MeshRenderer>();
showZone=GetComponent();
与此完全相同:
MeshRenderer showZone = this.GetComponent<MeshRenderer>();
MeshRenderer showZone=this.GetComponent();
您正在脚本所附加到的GameObject实例上调用GetComponent。2种解决问题的方法。将static一词添加到调用语句的方法中
例:
公共静态GetTheMesh(){}
我不建议这样做。如果在方法中有其他需要访问实例的调用,这将给您带来麻烦
第二种修复方法是在获取组件之前先创建指针或引用。或者使用GameObject。查找您的代码应该如下所示:
MeshRenderer showZone = GetComponent<MeshRenderer>();
showZone=GetComponent();
像其他人已经编写的一样,您需要获得一个实例化的游戏对象。您可以调用基类GameObject
,其中只能调用不需要SceneView
中的GameObject
的静态函数
gameObject
是一个实例。您将获得添加到的monobhavior
的gameObject的实例。在没有任何对象的情况下调用函数GetComponent
,与以下操作相同:
此
gameObject
GameObject
不是实例
注意第一个字母 如果要禁用此游戏对象上的渲染器,请使用:
this.GetComponent<Renderer>().enabled = false;
GameObject.FindGameObjectWithTag("your_tag").GetComponent<Renderer>().enabled = false;
this.GetComponent().enabled=false;
如果不是此游戏对象,请使用:
this.GetComponent<Renderer>().enabled = false;
GameObject.FindGameObjectWithTag("your_tag").GetComponent<Renderer>().enabled = false;
GameObject.FindGameObjectWithTag(“您的标签”).GetComponent().enabled=false;
或者,您可以手动为对象指定:
public GameObject go;
go.GetComponent<Renderer>().enabled = false;
公共游戏对象go;
go.GetComponent().enabled=false;
您可以使用两种类型的和平代码来启用和禁用访问
1> 创建附加到场景中的空游戏对象的GetMeshRenderer脚本(脚本名称,如您所需),并根据您要启用和禁用的对象指定立方体或球体或任何3d对象
**************************************代码***************************
using UnityEngine;
using System.Collections;
public class GetMeshRenderer : MonoBehaviour
{
public MeshRenderer ShowZone;
void Start ()
{
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.Y))
{
ShowZone.enabled = true;
}
if(Input.GetKey(KeyCode.N))
{
ShowZone.enabled = false;
}
}
using UnityEngine;
using System.Collections;
public class GetMeshRenderer : MonoBehaviour
{
private MeshRenderer ShowZone;
// Use this for initialization
void Start ()
{
ShowZone = gameObject.GetComponent<MeshRenderer> ();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.Y))
{
ShowZone.enabled = true;
}
if(Input.GetKey(KeyCode.N))
{
ShowZone.enabled = false;
}
}
}
2>
将下面的代码脚本附加到任何3d对象,如球体、立方体
***************************代码***************************
using UnityEngine;
using System.Collections;
public class GetMeshRenderer : MonoBehaviour
{
public MeshRenderer ShowZone;
void Start ()
{
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.Y))
{
ShowZone.enabled = true;
}
if(Input.GetKey(KeyCode.N))
{
ShowZone.enabled = false;
}
}
using UnityEngine;
using System.Collections;
public class GetMeshRenderer : MonoBehaviour
{
private MeshRenderer ShowZone;
// Use this for initialization
void Start ()
{
ShowZone = gameObject.GetComponent<MeshRenderer> ();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.Y))
{
ShowZone.enabled = true;
}
if(Input.GetKey(KeyCode.N))
{
ShowZone.enabled = false;
}
}
使用UnityEngine;
使用系统集合;
公共类GetMeshRenderer:单行为
{
私人展览区;
//用于初始化
无效开始()
{
ShowZone=gameObject.GetComponent();
}
//每帧调用一次更新
无效更新()
{
if(Input.GetKey(KeyCode.Y))
{
ShowZone.enabled=true;
}
if(Input.GetKey(KeyCode.N))
{
ShowZone.enabled=false;
}
}
}您的问题是使用的是GameObject
,它只是一个“描述”它是什么的类。如果此脚本附加到所需网格渲染器的GameObject,您需要的是GameObject
,并带有小写字母“g”
如果你想获得另一个游戏对象的网格渲染器,你可以通过GameObject.find(“zone1”)
(注意其中的大写字母“G”),或者你可以给它一个标签,然后用GameObject.FindGameObjectWithTag(“zone1”)找到它代码>
(你可能知道,也可能不知道,但提供信息并没有坏处。)
编辑:
您的另一个问题是必须使用渲染器
而不是渲染器
be