Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)
前言:最近重拾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不一定是必须的,通常用在人形骨骼动画的复用上。
相关文章:
Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)
前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质(Material)、…...
Eclipse Java 构建路径
Eclipse Java 构建路径 Eclipse 是一款广受欢迎的集成开发环境(IDE),特别适用于 Java 开发。在 Eclipse 中,构建路径(Build Path)是指编译器在编译项目时搜索类(.class)文件和源代码(.java)文件的路径。正确设置构建路径对于确保项目能够顺利编译和运行至关重要。 …...
FileLink跨网文件摆渡系统:重构跨网文件传输新时代
在数字化浪潮的推动下,企业对于数据的高效利用和安全管理提出了前所未有的要求。面对不同网络环境间的文件传输难题,传统方法往往显得力不从心,不仅效率低下,还存在极大的安全隐患。而FileLink跨网文件摆渡系统的出现,…...
macOS下QuickTime player+Blackhole录视频只录制系统声音
Blackhole是一个虚拟的音频驱动程序,免费的 安装方法: 方法1:通过homebrew安装 前提:你的系统中自己安装了homebrew,没有安装用方法2 系统终端执行下面的命令中的一个: brew install blackhole-2ch 或…...
Vscode + EIDE +CortexDebug 调试Stm32(记录)
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot…...
qt QApplication详解
一、概述 QApplication是Qt应用程序的基础类,负责设置和管理应用的环境。它的主要功能包括:初始化应用程序、管理事件循环、处理命令行参数、提供全局设置(如样式和调色板)以及创建和管理主窗口。通常在main函数中创建QApplicati…...
C++ 图像处理框架
在 C 中,有许多优秀的图像处理框架可以用来进行图像操作、计算机视觉、图像滤波等任务。以下是一些常用的 C 图像处理框架,每个框架都有其独特的特性和适用场景: 1. OpenCV OpenCV(Open Source Computer Vision Library…...
基于知识图谱的美食推荐系统
想象一下,每次打开应用,它都能为你量身推荐最符合你口味的美食,不需要再为“今天吃什么?”烦恼。这听起来是不是非常吸引人?今天就给大家介绍一个适合做毕业设计的创新项目——基于知识图谱的美食推荐系统!…...
记录:网鼎杯2024赛前热身WEB01
目录扫描,发现上传点,判断可能存在文件上传漏洞,并根据文件后缀判断网站开发语言为php 编写蚁剑一句话木马直接上传 蚁剑连接 这里生成 的flag是随机的,因为烽火台反作弊会随机生成环境,在一顿查找后,在hom…...
java 提示 避免用Apache Beanutils进行属性的copy。
避免用Apache Beanutils进行属性的copy。 Inspection info: 避免用Apache Beanutils进行属性的copy。 说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。 TestObject a new TestObject(); TestObject b new Te…...
autMan框架对接Kook机器人
一、创建kook机器人 KOOK 二、获取机器人token 三、填写autMan参数并重启 四、将机器人加入服务器 五、效果图 回复...
RK3568平台(camera篇)UVC AICamera集成
一.客供AIcamera集成思路 主板端:目前在RK主板上预留了一个USB接口,使用USB接口来连接供应商提供的UVC摄像头。 供应商UVC摄像头:目前供应商提供的usbcamera是rv1126,基于usb接口跟主板端相连接。 其实使用供应商提供的camera,里面的大部分功能供应商已经是做好的,里面…...
【mod分享】极品飞车10魔改模组,全新UI,全新道路,全新建筑,高清植被,全新的道路围栏,全新的天空,体验另一种速度与激情
各位好,今天小编给大家带来一款新的高清重置魔改MOD,本次高清重置的游戏叫《极品飞车10卡本峡谷》。 《极品飞车10:卡本峡谷》该游戏可选择四个模式:生涯、快速比赛、挑战赛、多人连线游戏模式(已不可用)&…...
[实时计算flink]数据摄入YAML作业快速入门
实时计算Flink版基于Flink CDC,通过开发YAML作业的方式有效地实现了将数据从源端同步到目标端的数据摄入工作。本文介绍如何快速构建一个YAML作业将MySQL库中的所有数据同步到StarRocks中。 前提条件 已创建Flink工作空间,详情请参见开通实时计算Flink版…...
CMOS 图像传感器:像素寻址与信号处理
CMOS image sensor : pixel addressing and signal processing CMOS image sensor 对于寻址和信号处理有三种架构 pixel serial readout and processingcolumn parallel readout and processingpixel parallel readout and processing 其中,图 (b) column paralle…...
React Native 项目使用Expo模拟器运行iOS和Android
iOS没有连接设备: 确保你已经用 USB 线将你的 iOS 设备连接到了你的 Mac。 设备未信任: 如果你的设备是第一次连接到 Mac,可能需要在设备上信任这台计算机。通常,当你连接设备时,设备上会弹出一个对话框,…...
鸿蒙-键盘弹出时 promptAction.showToast 被遮盖
可以设置弹窗显示模式showMode,支持显示在应用之上。 参考代码: promptAction.showToast({ message: Message Info, duration: 2000, showMode: promptAction.ToastShowMode.TOP_MOST }); 文档中心...
十一、pico+Unity交互开发教程——手指触控交互(Poke Interaction)
一、XR Poke Interactor 交互包括发起交互的对象(Interactor)和可被交互的对象(Interactable)。XR Interaction Toolkit提供了XR Poke Interactor脚本用于实现Poke功能。在LeftHand Controller和RightHand Controller物体下创建名…...
Request2:Post请求和Json
百度翻译拿到自己想看的数据,下图查看请求到数据的请求 preview提前看下 取出对应的RequestUrl ,看出来要使用的话得用post请求 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json if __name__ "__main__":#1.指定…...
【C】数组及其字符串
数组及其字符数组的基本知识点,以及一个编写一个系统登录界面,输入用户名(chen)和密码(1234),用户名只能输入字符8位,密码只能输入数字12位,使用光标定位函数 例…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
