当前位置: 首页 > news >正文

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&#xf…...

基于知识图谱的美食推荐系统

想象一下,每次打开应用,它都能为你量身推荐最符合你口味的美食,不需要再为“今天吃什么?”烦恼。这听起来是不是非常吸引人?今天就给大家介绍一个适合做毕业设计的创新项目——基于知识图谱的美食推荐系统!…...

记录:网鼎杯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位,使用光标定位函数 例&#xf…...

Python 代码实现对《红楼梦》文本的词频统计和数据可视化

Python 代码主要实现了对《红楼梦》文本的词频统计和数据可视化 完整详细下载地址:https://download.csdn.net/download/huanghm88/89879439 python """ 实训4 基于词频的篇章语义相似度与红楼梦内容分析 步骤3 针对红楼梦词频的数据可视化 &qu…...

yjs机器学习数据操作01——数据的获取、可视化

数据的获取 1.库与模块: import sklearnfrom sklearn import datasets 2.数据集获取的API及解释 对于sklearn的数据获取,主要分为两大部分,分别是“小数据集的获取——load_xxx”和“大数据集的获取fetch_xxx” a.datasets.load_xxx(): …...

w~自动驾驶合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/12320882 #自动驾驶数据集全面调研 自动驾驶技术在硬件和深度学习方法的最新进展中迅速发展,并展现出令人期待的性能。高质量的数据集对于开发可靠的自动驾驶算法至关重要。先前的数据集调研试图回顾这些数据集&…...

232. 用栈实现队列 【复习链表】-用自定义链表实现栈 用栈实现队列

232. 用栈实现队列 已解答 简单 相关标签 相关企业 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队…...

G-Set(增长集合,Grow-Only Set)

一、概念 G-Set(增长集合,Grow-Only Set)是一种冲突自由复制数据类型(Conflict-Free Replicated Data Type, CRDT),用于在分布式系统中同步和合并数据,而不需要中央协调器。G-Set 支持两种操作…...

《Vue.js 组件开发秘籍:从基础到高级》

Vue.js 组件开发是构建 Vue 应用程序的核心方法之一。以下是对 Vue.js 组件开发的介绍: 一、什么是 Vue.js 组件? 在 Vue.js 中,组件是可复用的 Vue 实例,它们封装了特定的功能和用户界面。每个组件都有自己独立的模板、逻辑和样…...

【Next.js 项目实战系列】03-查看 Issue

原文链接 CSDN 的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话,给我的库点个star,关注一下吧 上一篇【Next.js 项目实战系列】02-创建 Issue 查看 Issue 展示 Issue​ 本节代码链接 首先使用 prisma 获取所有…...

Android Settings 设置项修改

Settings 设置项 在 Android 系统上,WRITE_SETTINGS 这个权限从 API 1 就已经开始有了。 通过在 app 中设置权限 android.permission.WRITE_SETTINGS 允许 app 读/写 系统设置。 在官方文档的描述中,还有一段注意事项: Note: If the app targets API level 23 or higher,…...

Windows远程桌面到Ubuntu

在Ubuntu系统中,默认情况下root账户是被禁用的,为了安全起见,建议不要直接使用root账户登录图形界面。但是,如果出于特定的管理或维护需求,您可以按照以下步骤启用和使用root账户登录图形界面: 启用root账户…...

解释 RESTful API,以及如何使用它构建 web 应用程序(AI)

RESTful API(Representational State Transfer)是一种基于HTTP协议的软件架构风格,用于构建可扩展、可维护和可重用的网络服务。 RESTful API的特点包括: 1. 基于资源:每个API都代表一个或多个资源,这些资…...

wordpress 点赞 开启/营销推广方案怎么写

文章目录Pause容器的作用三个容器的运行总结Pause容器的作用 pause容器,又叫Infra容器,是pod的基础容器,镜像体积只有几百KB左右,配置在kubelet中,主要的功能是使一个pod中多个容器的网络通信 我们看下在node节点上都…...

建设银行网站转账必须u盾吗/天津百度seo代理

Ewebeditor最新漏洞及漏洞大全[收集] 来源:转载作者:佚名时间:2009-06-03 00:04:26 下面文章收集转载于网络:) 算是比較全面的ewebeditor编辑器的漏洞收集,如今的站点大多数用的都是ewebeditor编辑器, 所以ewebeditor…...

百度app制作网站/买链接网

近期在做爬虫时有时会遇到网站只提供pdf的情况,这样就不能使用scrapy直接抓取页面内容了,只能通过解析PDF的方式处理,目前的解决方案大致只有pyPDF和PDFMiner。因为据说PDFMiner更适合文本的解析,而我需要解析的正是文本&#xff…...

做暖暖欧美网站/天津百度网络推广

Access-enable 允许路由器在动态访问列表中创建临时访问列表入口 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Access-group 把访问控制列表(ACL)应用到接口上 Access-list 定…...

个人网站建设流程图/怎么给公司做网站

前文合集 每日一道 LeetCode 前文合集 题目&#xff1a;罗马数字转整数 题目来源&#xff1a;https://leetcode-cn.com/problems/roman-to-integer/ 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 …...

网站建设都需要什么/做网站公司

今天想弄个Unity读取Excel的功能的&#xff0c;发现网上有许多方法&#xff0c;采用其中一种方法&#xff1a;加入库文件 Excel.dll 和ICSharpCode.SharpZipLib.dll库文件&#xff0c;(还有System.Data.dll也要拷贝进来&#xff0c;在Unity安装路径C:\Program Files\Unity\Edit…...