动作游戏Demo(一)换装系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36215025/article/details/63688350
  1. 列表内容

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
    }
} 

猜你喜欢

转载自blog.csdn.net/qq_36215025/article/details/63688350