Unity之角色换装,关于换装的方法有很多种,在此将我自己写的一个小方法给大家分享一下
首先我的角色模型如下,左边为一个没有贴图的Cube,右边为我的模型,带贴图(服装)
第一:看下我的模型的服装贴图是在那个地方给搞上去的,在Hierarchy面板上点击我的模型,在它的子物体上查找带有 Skinned Mesh Renderer组件的物体,下面查找到model_dibing_1_2的子节点上绑定有Skinned Mesh Renderer组件,如下所示
第二:我们的贴图材质是就是在Skinned Mesh Renderer组件下的,“Materials” 属性下设置的,如下
从下面的图上可以看到Materials数组只有一项, "tex_dibing_1_2"即是我们的模型贴图的材质,然后我们找到 "tex_dibing_1_2"材质球,然后查看他的贴图图片(第四部)。
第四:材质贴图如下所示
可以看到Resources文件夹下的tex_dibing_1_2.tif文件即是材质球的贴图,我们通过更换材质球的贴图即可实现不同服装的效果,操作如下
第五:更换材质贴图后的模型如下
通过上面的操作我们知道了,直接改变模型材质的贴图即可实现不同服装的效果,那么在项目中我们通过代码控制替换材质贴图即可实现角色换装的目的。
第六:创建 Test 脚本,代码如下
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
public GameObject CubeObj;
public Transform obj;
SkinnedMeshRenderer skinnedMeshRenderer;
public Texture text;
private string texture1 = "tex_dibing_1_1";
private string texture2 = "tex_dibing_1_2";
private string texture3 = "tex_dibing_1_3";
private string texture4 = "tex_dibing_1_4";
// Use this for initialization
void Start () {
//获取挂载材质球的节点
obj = transform.Find("model_dibing_1_2");
//获取节点上的SkinnedMeshRenderer 组件
skinnedMeshRenderer = obj.GetComponent<SkinnedMeshRenderer>();
}
// Update is called once per frame
void Update () {
//通过 A D W S 按键实现换装效果
if (Input.GetKeyDown(KeyCode.A))
{
Controller(texture1);
}
if (Input.GetKeyDown(KeyCode.D))
{
Controller(texture2);
}
if (Input.GetKeyDown(KeyCode.W))
{
Controller(texture3);
}
if (Input.GetKeyDown(KeyCode.S))
{
Controller(texture4);
}
}
void Controller(string str)
{
//获取骨骼蒙皮的材质数组
Material[] materials = skinnedMeshRenderer.materials;
//从Resources文件夹下加载贴图图片
text = Resources.Load(str) as Texture;
//替换模型材质贴图
skinnedMeshRenderer.materials[0].mainTexture = text;
//给Cube设置材质贴图,作为对比
CubeObj.transform.renderer.material.mainTexture = materials[0].mainTexture;
}
}
将Test脚本挂在 角色模型上,运行 如下