欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【Unity】3D人物残影效果

【Unity】3D人物残影效果

2025/5/1 1:57:41 来源:https://blog.csdn.net/weixin_47220117/article/details/147530390  浏览:    关键词:【Unity】3D人物残影效果

基本原理是:

获取需要生成的物体的所有子物体的SkinnedMeshRenderer组件。

对于每一个对应的子组件创建一个GameObject

为新生成的GameObject物体添加MeshRenderer组件,并赋予对应的获取每一个子组件的材质。

为新生成的GameObject物体添加MeshFilter组件,新建Mesh实例,将子组件里的mesh烘焙于该Mesh实例后,赋予该GameObject物体的MeshFilter。(MeshFilter组件可让3d物体显示出来)

最后在需要使用残影功能的模型上,添加该组件即可。

代码如下:

生成残影的逻辑处理脚本AfterImage3D

using UnityEngine;

public class AfterImage3D : MonoBehaviour

{

private GameObject[] clones;

public float lifetime = 2;//残影存在时间

private void Start()

{

//获取该物体其下所有子物体的SkinnedMeshRenderer组件

var renders = GetComponentsInChildren<SkinnedMeshRenderer>();

//初始化clones数组

clones = new GameObject[renders.Length];

for(var i = 0; i < renders.Length; i++)

{

var sr = renders[i];

//new出新物体

var go = new GameObject();

//保存到克隆数组

clones[i] = go;

//为go添加MeshRenderer组件并获取对应的材质

go.AddComponent<MeshRenderer>().material = sr.material;

//new一个Mesh

Mesh mesh = new Mesh();

//烘焙renders的Mesh至new出来的mesh中

renders[i].BakeMesh(mesh);

//再为go添加MeshFilter组件并赋予其烘焙好的mesh

go.AddComponent<MeshFilter>().mesh = mesh;

//设置go的位置和旋转

go.transform.position = sr.transform.position;

go.transform.rotation = sr.transform.rotation;

}

}

private void Update()

{

//残影计时器

lifetime -= Time.deltaTime;

if (lifetime <= 0) Destroy(this);

}

private void OnDestroy()

{

//销毁自身

foreach (var go in clones)

{

Destroy(go);

}

//置空clones

clones = null;

}

}

使用该残影组件时只需执行:

gameObject.AddComponent<AfterImage3D>();

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词