html5网站编写,wordpress同步到本地,电商中seo是什么意思,成都网站unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性#xff1a; 更改mesh:mesh决定了部位的物体的外形#xff0c;是主要的数据。 刷新骨骼#xff1a;同一个部位下#xff0c;不同的mesh受到的不同的骨骼的影响不同#xff0c;因此更换mesh之后 更改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.GetComponentsInChildrenTransform();//首先获取场景中角色下的骨骼列表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.GetComponentSkinnedMeshRenderer();//获取预制物体下相关部位的SkinnedMeshRenderer//获取角色物体下与预制物体相关更换的Mesh部位下作用于该Mesh再场景中与其同名的骨骼列表ListTransform bones new ListTransform();foreach (Transform bone in smr.bones){foreach (Transform hip in hips){if (hip.name ! bone.name){continue;}bones.Add(hip);break;}}kuzi.GetComponentSkinnedMeshRenderer().sharedMesh smr.sharedMesh;//更改meshkuzi.GetComponentSkinnedMeshRenderer().bones bones.ToArray();//更换刷新骨骼列表kuzi.GetComponentSkinnedMeshRenderer().materials smr.sharedMaterials;//更换材质}
} 转载于:https://www.cnblogs.com/xiaoahui/p/unity.html