Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

news2024/11/29 20:52:51

前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。

导入素材和素材理解

  • 安装Unity
  • 新建项目
  • 新建文件夹和Scene
  • 如何去理解三维模型素材
    • 找到模型素材
    • 素材预制体结构
    • 骨骼和网格
    • 材质(Material)、纹理贴图(Texture)
    • Animator
    • Avatar替身系统
  • 总结

安装Unity

这个想必不用多说网上的教程很多。

最新版的话,官网下一个Unity Hub,然后在Hub里面下载个Unity(感觉新版Unity比以前高级多了)。

Unity Hub中设置-外观(Appearance)-设置语言(Language),简体中文会方便很多。

会有需要“管理许可证(Licenses)”,这个的话下载一个Unity Connect的app,然后微信注册个账号。app扫码登入到Unity Hub选择个人许可证就好了,学生的话可以申请学生版,都是免费的。

新建项目

Unity Hub-新项目-选择FPS Microgame模板。
在这里插入图片描述
这是Unity官方提供一个FPS学习模板,里面有个可以直接运行的demo,我们可以运行一下看看官方的FPS游戏Demo效果,算是对我们未来目标有个大概的想象。
在这里插入图片描述

选择这个的原因是因为里面包含了素材以及可以参考的思路代码。

新建文件夹和Scene

刚打开肯定是官方写好的文件夹,我们需要新建一个文件夹来存放我们后面自己写的内容。在文件夹部分右键Create-Floder,新建一个MyGame文件夹。
在这里插入图片描述
然后在MyGame文件夹下面新建一个我们自己Scene,命名为MainGame,拖拽到界面中。
在这里插入图片描述
把官方的Scene(MainScene)Removal掉。
在这里插入图片描述

如何去理解三维模型素材

很多新手刚看到这种三维模型素材肯定都是比较懵逼的,不知道如何去理解,尤其是角色的预制体里面有大量的层级,容易让人望而却步。

这里以敌人模型结构为例子,带大家理解一下。

找到模型素材

敌人模型的路径如下图所示,有两种HoverBot(悬浮机器人)和Turret(炮台)。
在这里插入图片描述

素材预制体结构

可以把HoverBot拖出来看看,可以发现预制体HoverBot组成非常复杂,没有接触的可能不太懂,但是其实组成部分主要分为两个,分别是模型和骨骼。“Bottom”、“EyeBall”和“Top”对应了机器人的三个组成的模型,里面包含了模型网格结构相关的渲染工作;“Robot_Root_C_Jnt”部分有很多内容,其实都是模型的骨骼关节名称。关于骨骼后面会介绍。
在这里插入图片描述
仔细点开“Bottom”,会发现模型包含了两个个部分:Skinned Mesh Renderer蒙皮网格渲染器以及Material材质球。蒙皮(Skin)是会把Mesh网格的顶点绑定在骨骼上,每个顶点可以被骨骼所控制,使得动画播放的时候顶点会随着骨骼而移动,从而Mesh会跟随骨骼的移动。而Material材质会附着在Mesh身上,也会跟着移动。Skinned Mesh Renderer把Mesh、Root Bone(骨骼根节点)以及Materials联合起来了。
在这里插入图片描述

骨骼和网格

上面介绍“素材预制体结构”涉及到了骨骼和网格(Mesh)的概念,为了更好理解它作用,我们先来了解一下骨骼动画。

游戏中的三维模型经常会设计到骨骼,这是为了骨骼动画做准备。

三维模型通常是由三角面网格组成,也就是Mesh。想要让Mesh动起来最简单的方法就是修改Mesh各个顶点。但是这个方案并不现实,复杂的模型往往伴随着大量的顶点,操作非常复杂,而且动画也不自然。

于是边诞生了骨骼(Spine),在Mesh中放置骨骼,骼的运动带动 Mesh 的运动。这样动画的时候只需要修改骨骼即可,如下图所示修改骨骼的时候Mesh网格顶点也跟着改变了。
在这里插入图片描述
该动图来自文章Mesh | 动态合批 | 骨骼动画 | 蒙皮,这篇讲网格讲的非常全面。

打开HoverRobot的一个Animation动画,可以看到骨骼动画中记录了每个时间点骨骼的变化,和素材预制体结构中骨骼关节的名字一一对应。
在这里插入图片描述
Unity中的骨骼模型通常包括三个步骤:

  • 建模(Modeling):创建模型,包含网格和纹理等。
  • 骨骼绑定(Rigging):创建骨架,骨骼和关节之间的层级结构。
  • 蒙皮(Skinning):负责把骨骼和Mesh关联起来。

当然除了三维模型中会用到骨骼,其实二维也用的,素材预制体结构和方法都差不多,只不过二维的Mesh是平面的。

材质(Material)、纹理贴图(Texture)

材质(Material):是描述物体外观和光学特性的属性集合。

  • 外观包:物体的颜色、反射属性(如漫反射、高光反射)、透明度、折射率等。
  • 材质:定义了物体如何与光线进行交互,决定了物体在渲染时的外观效果。

纹理和贴图(Texture):决定模型表面的颜色、纹理和细节效果。

  • 颜色贴图:就是给模型上一个颜色皮肤,例如木头纹理。
    在这里插入图片描述
  • 凹凸贴图:模型表面的凹凸情况,通常颜色越浅表明该位置的表面越像外凸起。
    在这里插入图片描述
  • 光照贴图:用来存储预渲染的光照信息,解决实时动态光源效果不好且消耗性能的问题。
    在这里插入图片描述

除了上面三种常用贴图还有别的。

Animator

点击HoverRobot的属性,可以看见上面挂在了一个Animator组件。
在这里插入图片描述
Animator上面属性有五个属性如下。

Animator controller:用来控制动画切换,具体可以看我以前写的一篇unity学习(7)动画状态切换。虽然那篇讲的2D的,但是3D的逻辑也差不多。

Avatar:Unity的替身系统,后面部分详细介绍。

Apply Root Motion:有些动画会带有位移,勾选了带动画位移。

Update Mode:动画更新模式,Normal表示使用Update进行更新也就是fps同步、Animate Physics表示和fixed unpdate同步(物理检测)、Unscaled Time和Normal一样但是不考虑Time scale(游戏运行速度比例)。

Culling Mode:Cull剔除,也就是在摄像机视野外面的时候会做什么操作,Always Animate进行动画播放的更新、Cull Update Transform停止动画播放但是位置会继续更新、Cull Completely停止动画的所有更新。

Avatar替身系统

很多时候,我们会想要复用别人的动画,通常来说人形模型是复用最多的。但是不同的设计师,可能骨骼节点的名字命名不同,Animation没法识别复用。但是我们又不可能去一一修改每个骨骼节点名字来适配,这非常容易出错。

Unity提出了一个动画复用的解决方案,替身系统Avatar。两个模型A和B,B想用A的动画。可以让A和B模型的骨骼和Unity的标准肌肉对应,这样就可以把转为了Unity标准肌肉的A动画,复用到B了。

Unity中的骨架有两种:

  • 人形 (Humanoid) :Unity提出一个通用的人形Avatar,最少 15 块骨骼,骨架需至少具备所需的骨骼。
  • 通用(Generic):任何东西,不具备Humanoid的动画重定向功能,这里的敌人HoverRobot使用的就是通过Avatar。

注意:通用 Avatar 与人形 Avatar 不同,但它会显示在项目视图中,也会保存根节点映射。但是单击项目视图中的 Avatar 图标在 Inspector 中显示其属性,则仅会显示其名称,不显示 Configure Avatar 按钮。

我原本想深究一下通用Aavatar的功能,但是通用Avator没法在视图中查看,搜了很多都没有找到特别的说法,上面这个只是是官方手册的解释。问了做游戏的朋友在实际应用常见中人形Avatar比较有用,通用Avatar基本没用过,所以大家理解人形Avatar就可以了。

总结

通过本篇过后,想必已经对三维模型素材有了初步的理解。

三维模型的预制体无非就两部分模型+骨骼,不需要动画的可能还没有骨骼,只有模型。预制体的节点会挂载Animator做动画控制;模型部分通常包括了网格(Mesh)、材质和贴图;骨骼部分就包括骨骼层级各个骨骼节点,骨骼节点的名字和Animation中的一一关联。模型中Skinned Mesh Renderer组件可以把网格(Mesh)、材质和贴图和对应的骨骼根节点关联。

Avatar不一定是必须的,通常用在人形骨骼动画的复用上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php反序列化漏洞典型例题

1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…

【flask】 flask redis的使用

目的&#xff1a;如何使用在flask web项目中连接redis&#xff0c;并简单的使用 使用的库包&#xff1a;flask-redis pip install falsk-redis下面的写法是对项目代码进行模块化拆分的写法&#xff0c;在app.py中只进行对象的初始化等操作&#xff1b;exts.py中创建对象&…

【含文档】基于ssm+jsp的房屋中介服务平台(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

CI/CD 的原理

一、CI/CD 的概念 CI/CD是一种软件开发流程&#xff0c;旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发&#xff0c;即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…

网络请求自定义header导致跨域问题

我记得我的项目之前已经解决了跨域问题。 后来在功能开发着&#xff0c;需要添加一个自定义的header&#xff0c;发现又出现跨域报错。 于是又开始一通摸索折腾。 我的项目前面端是用axios网络请求&#xff0c;通过拦截器添加header&#xff0c;代码如下&#xff1a; //添加请…

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

《使用Gin框架构建分布式应用》阅读笔记:p212-p233

《用Gin框架构建分布式应用》学习第12天&#xff0c;p212-p233总结&#xff0c;总22页。 一、技术总结 1.JavaScript知识点 (1)class、method (2)function, arrow function, (3)fetch() (4)Promise, then() 2.bootstrap 第5章主要涉及前端技术的运用&#xff0c;作为后…

nfs作业

nfs作业 服务机&#xff1a; 编写配置文件&#xff1a; [rootlocalhost ~]# vim /etc/exports 配置文件内容&#xff1a; /nfs/shared *(ro,sync) /nfs/upload 192.168.36.0/24(rw,anonuid210,anongid210,sync) /home/tom 192.168.36.132(rw) 创建目录&#xff0c;文件&am…

紫杉醇的药物代谢-文献精读73

Hydrogen-Bond-Assisted Catalysis: Hydroxylation of Paclitaxel by Human CYP2C8 氢键辅助催化&#xff1a;人类CYP2C8对紫杉醇的羟基化 摘要 紫杉醇&#xff08;PTX&#xff0c;或称Taxol&#xff09;是一种广泛用于治疗多种癌症的化疗药物&#xff0c;经过细胞色素P450酶…

使用语言模型进行文本摘要的五个级别(llm)

视频链接&#xff1a;5 Levels Of LLM Summarizing: Novice to Expert

A Simple Semi-Supervised Learning Framework for Object Detection

1. Introduction SSL的成功主要有以下两个方面&#xff1a; &#xff08;1&#xff09;一致性正则化&#xff1a;如果对一个未标记的数据应用实际的扰动, 其预测结果不应该发生显著变化, 也就是输出具有一致性&#xff0c;通过在未标记数据上构造添加扰动后的预测结果 y~​ 与…

景区客流统计合理控制游客人数,预防意外发生

随着制造业的不断发展&#xff0c;工厂的管理和安全问题日益受到关注。为了提升生产效率和保障安全&#xff0c;许多工厂开始采用客流计数器系统。这种系统通过实时监测和控制车间内的人员数量&#xff0c;确保不超过安全规定&#xff0c;预防事故发生。本文将详细介绍工厂客流…

正则表达式以及密码匹配案例手机号码脱敏案例

目录 正则表达式 什么是正则表达式 语法 定义变量 test方法 exec方法 replace方法 match方法 修饰符 元字符 边界符 单词边界 字符串边界 边界符&#xff1a;^ 边界符&#xff1a;$ 量词 * ? {n} {n,} {n,m} 字符类 []匹配字符集合 .匹配除换行符之外的…

面向对象编程中类与类之间的关系(一)

目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员&#xff0c;必然会遇到这样的情况&#xff1a;不同的类具有共同的特征&#xff0c;至少看起来彼…

【zotero7】茉莉花抓取文献失败解决方案

1、先安装好茉莉花 工具 ----》设置按钮–》从github上下载 xpi文件 2. 配置茉莉花 选择设置–》看到茉莉花–》红色字体 pdftk下载链接&#xff1a; https://www.pdflabs.com/tools/pdftk-server/ 3.打开插件 --》扩展插件 刷新

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程&#xff0c;参见如下链接&#xff1a;修改ppt注册表&#xff0c;导出高分辨率图片 Step2. 打开PPT&#xff0c;找到自己想要保存的图&#xff0c;选中图像&#xff0c;查看图像尺寸并记录 Step3. 重新新建一个PPT&#xff0c;并根据记录的图片…

C语言 | Leetcode C语言题解之第518题零钱兑换II

题目&#xff1a; 题解&#xff1a; int change(int amount, int* coins, int coinsSize) {int dp[amount 1];bool valid[amount 1];memset(dp, 0, sizeof(dp));memset(valid, false, sizeof(valid));dp[0] 1;valid[0] true;for (int i 0; i < coinsSize; i) {for (in…

rhcsa 第二次作业

# tee:编辑文件&#xff1a;编辑文件的同时&#xff0c;标准输出也会有内容显示 # | 管道符&#xff1a;将多个命令连接起来执行&#xff0c;将|左边的命令的运行结果&#xff0c;传递给右边的命令 # ls -l | tee a.txt # >&#xff1a;输出重定向 # 使用输出…

信创环境模拟:X86架构下部署搭建aarch64的ARM虚拟机

在真实系统为x86架构下&#xff0c;搭建arm64的虚拟开发环境。在该环境中直接下载打包项目依赖的python运行环境。 前言 随着国家信创环境的要求普及&#xff0c;基本和国家沾边的政企事业单位都换成了信创环境&#xff0c;即ARM64的cpu服务器&#xff0c;而且该类服务器是不…

Cesium基础-(Entity)-(Box)

** 里边包含Vue、React框架代码详细步骤、以及代码详细解释 ** 3、Box 盒子 以下是 BoxGeometry 类的属性、方法和静态方法,以表格形式展示: 属性 属性名类型默认值描述minimumCartesian3盒子的最小 x, y, 和 z 坐标。maximumCartesian3盒子的最大 x, y, 和 z 坐标。vertex…