大家好,我是秦培。欢迎关注我的博客,我的博客地址

">blog.csdn.net/qinyuanpei

不知从什么时候開始,国产RPG单机游戏開始出现换装,仙剑系列中第一部实现了换装的游戏是仙剑奇侠传四,后来原上海软星团队。眼下的烛龙科技更是在/《古剑奇谭》中将换装发挥到了极致。

我们来看几组图片吧:

换装从某种意义上来说就是改变角色的外观。尽管没有什么特别有用的功能,但从视觉上能够打破以往PRG游戏一套行头走天下的尴尬局面,所以换装还是非常不错的。那么从技术上来讲,换装主要分为两类:

一、添加式换装

所谓添加式换装,就是指角色模型的身体是一个完整的网格。须要更换的部分仅仅是一个可拆卸的部件。因而换装实际上就是在特定的部位添加或者移除一个模型。这类换装通经常使用在角色的武器更换中,仙剑、古剑的武侠更换都是这样的类型,如图所看到的的鱼骨头仅仅是在手这个位置更换模型:

二、更新式换装

更新式换装是指角色拥有一个公共的骨骼网络和针对该模型的若干组贴图。

那么,此时的换装实际上就是将贴图贴到相应的位置实现角色外观的改变,仙剑四严格来讲应该不算是换装,它实际上是做了两套模型(琼华装/野人装)。

古剑奇谭的换装实际上就是这样的类型的换装。这里我们以以下的一个样例,来一起学习怎样实现这样的类型的换装。

首先我们创建一个Unity项目:

首先我们去下载官方提供的换装的样例,我们这里仅仅须要里面的模型。由于这个模型提供了多组贴图能够供我们使用。我们将模型拖拽到场景中,我们展开模型能够发现模型是有若干个部分组成的,每个模型都有一个SkinnedMeshRenderer组件,改变该组件的材质,我们就能够实现对特定部位的换装。由此。我们写出了以下的代码:

using UnityEngine;
using System.Collections; public class ChangeSkin : MonoBehaviour { //眼睛贴图
public Texture2D[] TextureEyes;
//面部贴图-前
public Texture2D[] TextureFace1;
//面部贴图-后
public Texture2D[] TextureFace2;
//头发贴图-前
public Texture2D[] TextureHair1;
//头发贴图-后
public Texture2D[] TextureHair2;
//下衣贴图-前
public Texture2D[] TexturePants1;
//下衣贴图-后
public Texture2D[] TexturePants2;
//上衣贴图-前
public Texture2D[] TextureTop1;
//上衣贴图-后
public Texture2D[] TextureTop2;
//鞋子贴图-前
public Texture2D[] TextureShoes1;
//鞋子贴图-后
public Texture2D[] TextureShoes2; //与贴图相应的SkinnedMeshRenderer
SkinnedMeshRenderer MeshEyes;
SkinnedMeshRenderer MeshFace1;
SkinnedMeshRenderer MeshFace2;
SkinnedMeshRenderer MeshHair1;
SkinnedMeshRenderer MeshHair2;
SkinnedMeshRenderer MeshPants1;
SkinnedMeshRenderer MeshPants2;
SkinnedMeshRenderer MeshTop1;
SkinnedMeshRenderer MeshTop2;
SkinnedMeshRenderer MeshShoes1;
SkinnedMeshRenderer MeshShoes2; void Start ()
{
//获取SkinnedMeshRenderer
MeshEyes=transform.Find("eyes").GetComponent<SkinnedMeshRenderer>();
MeshFace1=transform.Find("face-1").GetComponent<SkinnedMeshRenderer>();
MeshFace2=transform.Find("face-2").GetComponent<SkinnedMeshRenderer>();
MeshHair1=transform.Find("hair-1").GetComponent<SkinnedMeshRenderer>();
MeshHair2=transform.Find("hair-2").GetComponent<SkinnedMeshRenderer>();
MeshPants1=transform.Find("pants-1").GetComponent<SkinnedMeshRenderer>();
MeshPants2=transform.Find("pants-2").GetComponent<SkinnedMeshRenderer>();
MeshTop1=transform.Find("top-1").GetComponent<SkinnedMeshRenderer>();
MeshTop2=transform.Find("top-2").GetComponent<SkinnedMeshRenderer>();
MeshShoes1=transform.Find("shoes-1").GetComponent<SkinnedMeshRenderer>();
MeshShoes2=transform.Find("shoes-2").GetComponent<SkinnedMeshRenderer>();
} void OnGUI()
{
if(GUILayout.Button("显示外装1",GUILayout.Height(30)))
{
SetSkin(MeshEyes,TextureEyes[0]);
SetSkin(MeshFace1,TextureFace1[0]);
SetSkin(MeshFace2,TextureFace2[0]);
SetSkin(MeshHair1,TextureHair1[0]);
SetSkin(MeshHair2,TextureHair2[0]);
SetSkin(MeshPants1,TexturePants1[0]);
SetSkin(MeshPants2,TexturePants1[0]);
SetSkin(MeshTop1,TextureTop1[0]);
SetSkin(MeshTop2,TextureTop2[0]);
SetSkin(MeshShoes1,TextureShoes1[0]);
SetSkin(MeshShoes2,TextureShoes2[0]);
} if(GUILayout.Button("显示外装2",GUILayout.Height(30)))
{
SetSkin(MeshEyes,TextureEyes[1]);
SetSkin(MeshFace1,TextureFace1[1]);
SetSkin(MeshFace2,TextureFace2[1]);
SetSkin(MeshHair1,TextureHair1[1]);
SetSkin(MeshHair2,TextureHair2[1]);
SetSkin(MeshPants1,TexturePants1[1]);
SetSkin(MeshPants2,TexturePants1[1]);
SetSkin(MeshTop1,TextureTop1[1]);
SetSkin(MeshTop2,TextureTop2[1]);
SetSkin(MeshShoes1,TextureShoes1[1]);
SetSkin(MeshShoes2,TextureShoes2[1]);
}
} private void SetSkin(SkinnedMeshRenderer mRenderer,Texture2D mTexture)
{
mRenderer.material.mainTexture=mTexture;
} }

这里我们提供两套外装。

我们把脚本拖放到模型上。然后编辑贴图数组:

编辑好贴图后。我们就能够执行程序了,注意贴图要和模型网格匹配。

执行效果:

这样的方法须要设计者全然的了解角色身体的内部构造。所以须要和美工有良好的合作才干够实现,感觉效果还是不错的啊,哈哈

好了。这就是今天的博客了,希望对大家实用、希望大家喜欢!

每日箴言:人的思想是了不起的,仅仅要专注于某一项事业。就一定会做出使自己感到惊讶的成绩来。——马克·吐温

喜欢我的博客请记住我的名字:秦元培。我的博客地址是:blog.csdn.net/qinyuanpei

转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/24393683

版权声明:本文博客原创文章,博客,未经同意,不得转载。转载请注明作者和出处,谢谢!

[Unity3D]Unity3D连衣裙实现游戏开发系统的更多相关文章

  1. [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用

    大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...

  2. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

  3. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...

  4. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  5. [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版

    大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...

  6. [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统

            大家好.我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...

  7. Unity3D ——强大的跨平台3D游戏开发工具(一)

    众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已 经达到让人瞠目结舌的地步.尤其是它在3.0版本里面制作的那款 ...

  8. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  9. 《Unity3D/2D游戏开发从0到1》正式出版发行

    <Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息:      书籍的名称: <Uni ...

随机推荐

  1. 大数据的胖哥的方式(9)- 金融业数据仓库的逻辑模型FS-LDM

    介绍: 大数据是不是海市蜃楼,来自小橡子只是意淫奥克斯,大数据的发展,而且要从头开始,基于大数据建设国家.项目-level数据中心行业将越来越多,大数据仅供技术,而非溶液,临数据组织模式,数据逻辑模式 ...

  2. javascript 比量str今天的日期是,参数diff

    function isToday(str) { var d = new Date(str.replace(/-/g, "/")); var todaysDate = new Dat ...

  3. 【嵌入式开发】写入开发板Linux系统-模型S3C6410

    笔者 : 万境绝尘 转载请著名出处 最终拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

  4. 理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处(转)

    在描述JNDI,例如获得数据源时,JNDI地址有两种写法,例如同是  jdbc/testDS 数据源: A:java:comp/env/jdbc/testDS B:jdbc/testDS   这两种写 ...

  5. leetcode文章137称号-Single Number II

    #include<stdio.h> #include<stdlib.h> int singleNumber(int* nums, int numsSize) { int cou ...

  6. SUPPORTDIR引用的文件的加入

    上一篇转载了SUPPORTDIR的理论解释,如今截图说明实际操作: 选择依赖的语言,在右面的files框里右键点击,选择Insert Files插入文件,编译.由于安装得时候,压缩包会解压成一个暂时文 ...

  7. Window Phone 8 应用程序连接扩展图片中心,图片扩展,图片查看器

    WMAppManifest.xml <?xml version="1.0" encoding="utf-8"?> <Deployment xm ...

  8. Python标准库简介

    在<Python语言参考手册>描述中的描述Python语法和语义,而本手冊主要介绍了Python标准库的内容和使用,也介绍了一些发行库里可选的组件库. Python标准库包括的内容是非常广 ...

  9. Docker安装应用程序(Centos6.5_x64)

    Docker安装应用程序(Centos6.5_x64) Authoer::jom_ch@2014/7/23 Docker官方网站 http://www.docker.com/ 一,安装EPEL 关于E ...

  10. openWRT自学---自己编译的第一个 backfire10.03 版本的过程记录(转)

    基于 backfire10.03(从http://downloads.openwrt.org/backfire/10.03/ 中下砸的源码包backfire_10.03_source.tar.bz2: ...