通过组合的达到换装效果
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Huanzhaung1 : MonoBehaviour
{
//蒙皮网格渲染器
SkinnedMeshRenderer skinned;
public GameObject[] bodys;
Dictionary<string, Transform> dicbones = new Dictionary<string, Transform>();
// Start is called before the first frame update
void Start()
{
skinned = gameObject.AddComponent<SkinnedMeshRenderer>();//给骨骼添加蒙皮网格渲染器
Transform[] allbones = GetComponentsInChildren<Transform>();//获取所有子级的transform
for (int i = 0; i < allbones.Length; i++)//遍历所有子级
{
dicbones.Add(allbones[i].name, allbones[i]);//将所有子级添加进字典 方便后边查找
}
}
public void Huan()
{
List<CombineInstance> combines = new List<CombineInstance>();//创建动态合并对象集合
List<Material> materials = new List<Material>();//创建材质球集合
List<Transform> bones = new List<Transform>();//这是等会自身赋值的集合
for (int i = 0; i < bodys.Length; i++)//遍历你要换装的那个数组
{
SkinnedMeshRenderer sk = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>();//将每个需要换装的身体部位的子级的蒙皮网格渲染器获取到
CombineInstance combine = new CombineInstance();//创建动态合并对象
combine.mesh = sk.sharedMesh;//将动态合并对象赋值
combines.Add(combine);//将动态合并对象添加到集合
materials.Add(sk.sharedMaterial);//添加材质球
for (int j = 0; j < sk.bones.Length; j++)//遍历你的获取到的子级的蒙皮网格渲染器里边的骨骼数组
{
if (dicbones.ContainsKey(sk.bones[j].name))//判断之前放入字典中的所有骨头有没有和需要换装的骨头的名称一致的
{
bones.Add(dicbones[sk.bones[j].name]);//如果有就把骨头放入等会给自身赋值的集合
}
}
}
Mesh mesh = new Mesh();
mesh.CombineMeshes(combines.ToArray(), false, false);//将所有网格进行合并
skinned.sharedMesh = mesh;//网格赋值
skinned.materials = materials.ToArray();//材质球赋值
skinned.bones = bones.ToArray();//骨骼数组赋值
}
// Update is called once per frame
void Update()
{
}
}
本文来自博客园,作者:{old_Host},转载请注明原文链接:https://www.cnblogs.com/zanzz/p/17015636.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!