版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36215025/article/details/63688350
- 列表内容
1.导入模型资源文件,制作角色和武器的Prefab
- 以导入player为例。
- (1)导入FBX文件(注意别导入3dmax文件)
- (2)骨骼设置(Rig):设置成导入为Hunmanoid(人体动画)。对骨骼节点进行匹配校验(一般不做修改)。
2.制作UI界面
本项目使用的是NGUI插件。(利用anchors来解决屏幕自适应)
3.模型自旋转
- 在场景中选中palyer,window-animation,保存。
- 在animation面板下选择rotation.y,本案例以2秒围绕y轴旋转360度。
4. 头部和手部的换装
- 以头部换装为例。
using UnityEngine;
using System.Collections;
public class MenuContorller : MonoBehaviour {
public SkinnedMeshRenderer headMeshRenderer; //蒙皮网格渲染器
public Mesh[] headMeshArray; //获得可以替换的Mesh
private int headMeshIndex =0; //当前索引(用的哪个Mesh)
public void OnHeadNextClick() { //NGUI需要将该方法注册到指定的Button上面
headMeshIndex++;
headMeshIndex %= headMeshArray.Length; //很好用的范围间循环计时器(自身求余)
headMeshRenderer.sharedMesh = headMeshArray[headMeshIndex]; //sharedMesh用于蒙皮
}
}
5.颜色的更换/随机颜色
- 以换成紫色为例。
using UnityEngine;
using System.Collections;
public class MenuContorller : MonoBehaviour {
public Color purple; //unity中无该颜色默认值,需在Inspector面板上赋值。其他颜色均可用Color.blue
public void OnPurpleClick() {
OnColorChange(purple);
}
void OnColorChange(Color c) {
foreach(SkinnedMeshRenderer skin in SkinnedMeshRendererArray){
skin.material.color = c; //materical.color
}
}
}
- 随机颜色
public void RandomColorClick()
{
float r = Random.Range(0f, 1f); //只能0-1的float
float g = Random.Range(0f, 1f);
float b = Random.Range(0f, 1f);
float a = Random.Range(0f, 1f);
Color color = new Color(r, g, b,a); //也可以只(r,g,b)
OnColorChange(color);
}
void OnColorChange(Color c) {
foreach(SkinnedMeshRenderer skin in SkinnedMeshRendererArray){
skin.material.color = c; //materical.color
}
}
6. 换装信息系统的保存和加载
- 以保存随机颜色和紫色为例
using UnityEngine;
using System.Collections;
using System.Collections.Generic; //用到List<>需要引用该头文件
using UnityEngine.SceneManagement; //新加载场景的API 需引用该头文件
public class MenuContorller : MonoBehaviour {
public Color purple;
public List<Color> colorArray;
private int colorIndex = -1; //-1为默认值 即默认当前颜色
void Start() {
colorArray = new List<Color> { Color.blue,Color.green,Color.cyan,Color.red,purple}; //使用List<>相比于数组color[],可以动态存储数据。 利用list.Add()添加数组;
DontDestroyOnLoad(this.gameObject); //需要取到该脚本的索引值,不能销毁。
}
public void OnPurpleClick() {
OnColorChange(purple);
colorIndex = 4; //存储索引值
}
public void RandomColorClick()
{
float r = Random.Range(0f, 1f); //只能0-1的float
float g = Random.Range(0f, 1f);
float b = Random.Range(0f, 1f);
float a = Random.Range(0f, 1f);
Color color = new Color(r, g, b,a); //也可以只(r,g,b)
OnColorChange(color);
colorArray.Add(color); //添加到集合里面
corlorIndex =5;
}
void OnColorChange(Color c) {
foreach(SkinnedMeshRenderer skin in SkinnedMeshRendererArray){
skin.material.color = c; //materical.color
}
}
void Save() {
PlayerPrefs.SetInt("colorIndex", colorIndex);
}
public void OnPlayClick() { //按下play加载下个场景
Save();
SceneManager.LoadScene(1); //新API
}
}