本文主要是介绍CombineMeshes unity网格合并后位置会变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转载: http://ask.csdn.net/questions/175622
根据官网介绍的mesh.combinemesh中的范例,做了个简单的网格合并的demo,但程序运行后物体的位置发生了变化,研究了好几天都没结果,这是怎么回事啊~~
官网范例如下:
using UnityEngine;
using System.Collections;[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class ExampleClass : MonoBehaviour {void Start() {MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();CombineInstance[] combine = new CombineInstance[meshFilters.Length];int i = 0;while (i < meshFilters.Length) {combine[i].mesh = meshFilters[i].sharedMesh;combine[i].transform = meshFilters[i].transform.localToWorldMatrix;meshFilters[i].gameObject.active = false;i++;}transform.GetComponent<MeshFilter>().mesh = new Mesh();transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);transform.gameObject.active = true;}
}
变换矩阵的问题,要保持相对位置不变,要转换为父节点的本地坐标,
combine[i].transform = meshFilters[i].transform.localToWorldMatrix; 这句话改为
combine[i].transform = transform.worldToLocalMatrix * meshFilters[i].transform.localToWorldMatrix;
这样应该就可以了。。。。
这篇关于CombineMeshes unity网格合并后位置会变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!