在某些特殊情况下,不得不对模型进行一些简单的修改,所以写了个简单的编辑脚本。
思路就是获取mesh上的所有顶点,然后在每个顶点位置创建一个控制点,控制点可以是任意你喜欢的物体,通过判断控制点的位置信息来修改mesh的顶点位置。
在unity中,mesh上的顶点与几个面相交,就会有几个坐标点,估计是把点为每一个三角形面复制了一份,所以这里在生成控制点时要注意剔除重复的点,不要重复生成。
这里我是把每个顶点的坐标转为字符串,使用该坐标的字符串作为key来把控制点与顶点数据联系起来。
下面给出完整代码
首先是控制点的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MeshEditorPoint : MonoBehaviour {
//顶点id,(顶点初始位置转字符串)
[HideInInspector] public string pointid;
//记录坐标点上一次移动的位置,用于判断控制点是否移动
[HideInInspector] private Vector3 lastPosition;
public delegate void MoveDelegate(string pid,Vector3 pos);
//控制点移动时的回调
public MoveDelegate onMove = null;
// Use this for initialization
void Start () {
lastPosition = transform.position;
}
// Update is called once per frame
void