有些时候我们要对当前播放动作的网格获取一些信息或者进行一些处理。这些网格信息是从SkinnedMeshRenderer获得。
这个组件直接获取的SharedMesh属性是没有受到动画控制的mesh,BakeMesh出来的Mesh也需要传入MeshFilter里面使用了之后,再从MeshFilter拿出来,才算是与当前帧的动画符合的mesh,否则还是不正常的。
这个不正常主要表现在旋转方面没有和物体的旋转匹配。
测试代码如下,这个代码是获取SkinnedMeshRenderer的当前的mesh赋值到MeshFilter中,再从MeshFilter中获取的Mesh就可以拿去用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TrailingMesh : MonoBehaviour {
private Material mat;
private Mesh Tmesh;
private GameObject TgameObject;
private MeshFilter mf;
private SkinnedMeshRenderer render;
// Use this for initialization
void Start () {
render = GetComponent();
TgameObject = new GameObject("TarlingObject");//特效对象
var mr = TgameObject.AddComponent();//赋予材质
mat = new Material(Shader.Find("Standard"));
mr.material = mat;
mf = TgameObject.AddComponent();
}
// Update is called once per frame
void Update () {
#region-------从SkinnedMeshRenderer上拷贝可以正确显示的网格
TgameObject.transform.position = transform.position;
TgameObject.transform.rotation = transform.rotation;
Tmesh = new Mesh();
render.BakeMesh(Tmesh);
#endregion
mf.mesh = Tmesh;
}
}