【问题标题】:How do I add a Mesh Collider to an object generated in a script?如何将 Mesh Collider 添加到脚本中生成的对象?
【发布时间】:2023-01-07 21:14:57
【问题描述】:

这是一个生成 20x20 正方形的正方形的脚本,每个正方形由两个三角形组成。我想将 Mesh Collider 添加到网格中,但出现此错误:CS1061“Mesh”不包含“AddComponent”的定义,并且无法找到接受“Mesh”类型的第一个参数的可访问扩展方法“AddComponent” (您是否缺少 using 指令或程序集引用?)。我如何解决它?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshCollider))]
public class MeshGenerator : MonoBehaviour {

    Mesh mesh;
    
    Vector3[] vertices;
    int[] triangles;

    public int xSize = 20;
    public int zSize = 20;

    // Start is called before the first frame update
    void Start()
    {
        mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;

        CreateShape();
        UpdateMesh();
        MeshCollider mc = mesh.AddComponent<MeshCollider>() as MeshCollider; //This is the line that doesn't work.
    }

    void CreateShape() {
        vertices = new Vector3[(xSize + 1) * (zSize + 1)];

        for (int i = 0, z = 0; z <= zSize; z++) {
            for (int x = 0; x <= xSize; x++) {
                vertices[i] = new Vector3(x, 0, z);
                i++;
            }
        }

        triangles = new int[xSize * zSize * 6];

        int vert = 0;
        int tris = 0;
        for (int z = 0; z < zSize; z++) {
            for (int x = 0; x < xSize; x++)
            {
                triangles[tris + 0] = vert + 0;
                triangles[tris + 1] = vert + xSize + 1;
                triangles[tris + 2] = vert + 1;
                triangles[tris + 3] = vert + 1;
                triangles[tris + 4] = vert + xSize + 1;
                triangles[tris + 5] = vert + xSize + 2;
                vert++;
                tris += 6;
            }
            vert++;
        }
    }

    void UpdateMesh() {
        mesh.Clear();

        mesh.vertices = vertices;
        mesh.triangles = triangles;

        mesh.RecalculateNormals();
    }
}

我尝试了 MeshCollider mc = mesh.AddComponent() as MeshCollider;和 MeshCollider mc = mesh.AddComponent(typeof(MeshCollider)) as MeshCollider;

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    方法 AddComponent 是 GameObject 类的方法,而不是 Mesh 类的方法。您可以使用 MeshGenerator 类的 gameObject 属性的 GetComponent() 方法来获取对 MeshFilter 组件的引用,并将网格场分配给 MeshFilter 组件的网格场。然后您可以再次使用 gameObject 属性调用 AddComponent() 以将 MeshCollider 组件添加到您的 GameObject:

    MeshFilter meshFilter = GetComponent<MeshFilter>();
    meshFilter.mesh = mesh;
    
    MeshCollider mc = gameObject.AddComponent<MeshCollider>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多