换装基础(蒙皮渲染器)

效果,(此处使用了轮转图,随笔里面记的有,可以查看之前写的)

1,换装代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeOfOutfit : MonoBehaviour
{

public GameObject[] bodys;//合体数组
void Start()
{
ChangeOfOutfits();//封装一个方法目的是多次调用,因为每次更换GameObject之后都需要重新给赋值,不然不会有变化
}

public void ChangeOfOutfits()
{
//1,网格合并
Mesh mesh = new Mesh();
List<CombineInstance> combines = new List<CombineInstance>(); //合并实例数组
for (int i = 0; i < bodys.Length; i++)
{
CombineInstance combine = new CombineInstance();
combine.mesh = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMesh;//蒙皮网格渲染器 sharedMesh分开网格
combines.Add(combine);//存储到集合
}
mesh.CombineMeshes(combines.ToArray(), false, false);//CombineMeshes 结合网格 通过合并实例存储的网格 然后获取数组给mesh
GetComponent<SkinnedMeshRenderer>().sharedMesh = mesh;//重新赋值给蒙皮网格渲染器 此处是合并后的
//2.材质球
List<Material> materials = new List<Material>();//渲染集合存储渲染
for (int i = 0; i < bodys.Length; i++)
{
//注意:body如果已经实例化可以使用material,如果没有实例化就使用SharedMaterial,SharedMaterial是材质球的本体不是材质球的复制品
materials.Add(bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial);//获取每一块的渲染
}
GetComponent<SkinnedMeshRenderer>().materials = materials.ToArray();//最后赋值给蒙皮网格渲染器
//3.骨骼
//找到自己的全部骨头
Transform[] allbones = GetComponentsInChildren<Transform>();//骨骼存放位置数组
//每块骨骼都有单独的名字,要使用名字相同的骨骼来匹配网格
//所以把骨骼以名称存储字典方便查找
Dictionary<string, Transform> dic = new Dictionary<string, Transform>(); //字典存储 骨骼的名字和对应位置
foreach (var bone in allbones)
{
dic.Add(bone.name, bone);//存入字典
}
//建立一个集合存储我需要使用的骨骼
List<Transform> mybones = new List<Transform>();
//循环所有部位,找到该部位要使用的骨骼,并将该骨骼对应名称的自己的骨骼存储集合
for (int i = 0; i < bodys.Length; i++)
{
//该部位要使用的骨骼
Transform[] bodybones = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().bones;
for (int j = 0; j < bodybones.Length; j++)
{
if (dic.ContainsKey(bodybones[j].name))
{
//字典里的才是自己的骨骼
mybones.Add(dic[bodybones[j].name]);
}
}

}
GetComponent<SkinnedMeshRenderer>().bones = mybones.ToArray();//给骨骼赋值数组
}
}

2,此处的小人是通过照相机实现的

3,关于赋值实现换装  图1是惯性结束后获得对应得到的ID(下标) 然后赋值 图2 赋值完毕后确认,实现重新蒙皮网格渲染人物 实现换装

 

 实现方法 1,对应位置放入 Raw Image

2,需要一个照相机照到角色,然后创建  RenderTexture

 3,设置层级,层级自己添加

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值