Unity3d:通过GetComponent错误从另一个脚本访问类

时间:2013-12-20 23:29:19

标签: c# unity3d reference null

FIXED 我正在尝试访问另一个脚本中包含的类,我得到了这个:“Internal_Create只能从主线程中调用”。 .init函数只是改变了类中的一些值。

我试图通过搜索答案来修复它,但我找不到任何有用的东西。

这是发生错误的主循环:

public class MainLoop : MonoBehaviour {

public float jagginess;


void Start () {
    jagginess = 0.6f;
    CMesh cmesh = GameObject.Find("GameObject").GetComponent<CMesh>();
    cmesh.init(32);

}


void Update () {

    //if (Input.GetKeyDown(KeyCode.Space)) {

}

}和网格类:

[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
[RequireComponent(typeof(MeshCollider))]

public class CMesh : MonoBehaviour {

        Mesh mesh = new Mesh();

        Texture2D heightMap;

        int segments;
        Vector3 scaleSegments;

        Vector3[] vertices;
        Vector3[] normals;
        Vector2[] uv;
        int[] triangles;

        Vector3 camera_position = GameObject.Find ("Main Camera").GetComponent<cameraMovement>().camera_pos;

        public void init(int mesh_segments) {

            scaleSegments = new Vector3(200, 100, 200);

            segments = mesh_segments;

            initHeightMap();
        }

2 个答案:

答案 0 :(得分:1)

每次使用GetComponent()之前,您都需要问自己这个问题: GameObject包含您要查找的脚本是什么?

一旦知道GameObject的名称,如果脚本附加到其他游戏对象,则可以执行此操作:

CMesh cmesh = GameObject.Find("NameOfGameObject").GetComponent<CMesh>();

如果脚本附加到同一个GameObject,您可以这样做:

CMesh cmesh = GetComponent<CMesh>();

答案 1 :(得分:-2)

您错过了投射组件。试试: CMesh cmesh =(CMesh)gameObject.GetComponent&lt; CMesh&gt;();

在此之前,请确保您要访问的脚本位于同一对象上。否则,您需要先获取该对象,然后获取组件:

CMesh cmesh =(CMesh)GameObject.Find(“此处的对象名称”)。GetComponent&lt; CMesh&gt;();

第二个总是适合我。

我希望这会有所帮助。

干杯!