代码
先上代码,再对比效果。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ComBineSM : MonoBehaviour
{
// 待合并的skinnedrender(需要所有skinnedMeshrenderer使用同一个材质,否则无法起到合并dc的目的)
public SkinnedMeshRenderer[] renders;
// 合并后使用的材质
public Material material;
void Start()
{
// 先记录当前预制件的变换矩阵,合并之后再赋值回来
Vector3 l_position = transform.position;
Quaternion l_rotation = transform.rotation;
Vector3 l_scale = transform.localScale;
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
transform.localScale = Vector3.one;
// 待合并的skinnedrender需要记录的信息
List<Transform> bones = new List<Transform>();
List<BoneWeight> boneWeights = new List<BoneWeight>();
List<CombineInstance> combineInstances = new List<CombineInstance>();
int length = renders.Length;

本文介绍了Unity游戏开发中如何进行动态合并SkinnedMeshRenderer以优化性能。通过对比合并前后的效果,展示了优化功能。尽管视觉效果有些微妙,但关键在于合并后仍能正常修改骨骼点。此外,文章还提及了换装功能的实现,通过脚本管理各部件的蒙皮渲染器,在切换时重新合并,解决不同部件可能不在同一图集下的问题,需要做动态合并贴图和重算UV。
最低0.47元/天 解锁文章
1089





