unity 角色换装
生活随笔
收集整理的這篇文章主要介紹了
unity 角色换装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
unity角色換裝的關鍵是更改角色部位上的物體的SkinnedMeshRenderer組件的屬性:
更改mesh:mesh決定了部位的物體的外形,是主要的數據。
刷新骨骼:同一個部位下,不同的mesh受到的不同的骨骼的影響不同,因此更換mesh之后,還要更新SkinnedMeshRenderer下的骨骼列表的信息,也就是更換骨骼列表。
替換材質:一個SkinnedMeshRenderer下由多個材質作用,因此還需要更換材質列表。
?
操作過程為,從預制物體中獲取的需要更換的相關部位的mesh,然后通過從預制物體的相關部位的SkinnedMeshRenderer下獲取到影響該部位的骨骼列表,然后從場景角色的骨骼下獲取到同名的骨骼列表,將該骨骼列表賦予到場景下角色的部位的SkinnedMeshRenderer下,并且獲取到預制物體下該部位的材質列表,同樣的將該列表賦予場景下角色的部位的SkinnedMeshRenderer下。
?
為了獲取到更換的信息,需要由預制物體存儲物體的相關信息。預制物體如下,每個部位下所有的物體都呈現,便于程序提取信息。
原模型如下:
場景下角色如下:
具體代碼如下:
該腳本可以放在任何地方
using System.Collections; using System.Collections.Generic; using UnityEngine;public class AvatarSysDemo00 : MonoBehaviour {public Transform role;//場景中的角色物體public GameObject rolePrefab;//預制物體public GameObject kuzi;//場景中角色物體下褲子物體public string[] kuziNames;//所有的用于替換的褲子的名字,用于再預制物體中找到相關的物體的信息public GameObject[] objs;//褲子相關的預制物體 int index = 0;//當前的裝備索引public Transform[] hips;//角色的骨骼物體private void Awake(){hips = null;if (role)hips = role.GetComponentsInChildren<Transform>();//首先獲取場景中角色下的骨骼列表for (int i = 0; i < kuziNames.Length; i++)//獲取預制物體下的所有褲子物體 {Transform kuziObj = rolePrefab.transform.Find(kuziNames[i]);objs[i] = kuziObj.gameObject;}}// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.Space))//設置為按下空格就切換一下褲子 {Debug.Log(objs.Length);if (objs.Length == 0) return;index = (index + 1) % objs.Length;ChangeMesh(objs[index]);}}//換裝public void ChangeMesh(GameObject part){SkinnedMeshRenderer smr = part.GetComponent<SkinnedMeshRenderer>();//獲取預制物體下相關部位的SkinnedMeshRenderer//獲取角色物體下與預制物體相關更換的Mesh部位下作用于該Mesh,再場景中與其同名的骨骼列表List<Transform> bones = new List<Transform>();foreach (Transform bone in smr.bones){foreach (Transform hip in hips){if (hip.name != bone.name){continue;}bones.Add(hip);break;}}kuzi.GetComponent<SkinnedMeshRenderer>().sharedMesh = smr.sharedMesh;//更改meshkuzi.GetComponent<SkinnedMeshRenderer>().bones = bones.ToArray();//更換(刷新)骨骼列表kuzi.GetComponent<SkinnedMeshRenderer>().materials = smr.sharedMaterials;//更換材質 } }?
轉載于:https://www.cnblogs.com/xiaoahui/p/unity.html
總結
以上是生活随笔為你收集整理的unity 角色换装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft Windows Wo
- 下一篇: Java注解的基本概念和原理及其简单实用