【问题标题】:paint polygon collider during gameplay在游戏过程中绘制多边形对撞机
【发布时间】:2019-11-12 16:19:59
【问题描述】:

我正在开发一个 2D 游戏,其中一些对象具有三角形视觉,使用多边形对撞机

是否可以绘制此对撞机以使其在游戏过程中可见?

【问题讨论】:

    标签: unity3d 2d collider


    【解决方案1】:

    假设你的意思是 PolygonCollider2D 并且它总是以正确的顺序得到 3 分,我猜你可以做类似的事情

    using System.Linq;
    
    ...
    
    [RequireComponent(typeof(MeshRenderer), typeof(MeshFilter), typeof(PolygonCollider2D))]
    public class MeshCreator : MonoBehaviour
    {
        void Awake ()
        {
            var points = GetComponent<PolygonCollider2D>().points;
            var meshFilter = GetComponent<MeshFilter>();
            var mesh = new Mesh();
    
            // Just a shorthand for something like 
            //var list = new List<Vector3>();
            //foreach(var p in points)
            //{
            //    list.Add(p);
            //}
            //mesh.vertices = list.ToArray();
            mesh.vertices = points.Select(p -> (Vector3) p).ToArray();
    
            // Here create two triangles (each 3 vertices)
            // just because I don't know if you have the points in the correct order
            mesh.triangles = new int[]{0,1,2,0,2,1};
    
            meshFilter.mesh = mesh;
        }
    }
    

    并将这个组件放在PolygonCollider2D 旁边。然后它将用三角形替换这个对象的网格。

    MeshRenderer中已经可以设置的素材。

    要获得此重叠区域,最简单的解决方案是半透明材料。否则你可能需要一个特殊的着色器。

    【讨论】:

    • mesh.triangles = new int[0,1,2,0,2,1] 行无法编译,triangle 属性似乎期待int[] 而不是int[,,,,,]
    • @Daniel 在我的手机上输入它并没有注意那里;)修复它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多