Unity书本基础扩展知识点
2024-08-17 09:52:55 0 举报
AI智能生成
Unity书本基础扩展知识点涵盖了在Unity引擎中创建和编辑游戏角色的核心技能。首先,您将学习如何导入和创建3D角色模型,以及如何设置骨骼和动画。接下来,您将探索如何为角色添加动作、面部表情和语音,使角色栩栩如生。此外,您还将了解如何将角色融入游戏场景,包括调整角色位置、旋转和缩放。最后,您将掌握如何优化角色性能,确保游戏运行流畅。本课程适合对游戏开发感兴趣的初学者,以及希望提高Unity技能水平的专业人士。
作者其他创作
大纲/内容
游戏引擎和unity发展史
1、游戏历史和unity概述
3、3D模型基础
对地形设置
抹平
柔化
地表细节
风力(Wind Zone)
4、地形编辑器(Terrain)
可以照射无限的范围,一般模拟太阳光。
直线光(Directional Light)
是从一个点向四周发射光,常用于灯泡等。
点光源(Point)
在一个方向上,在一个光锥范围内照射一般用在手电筒,汽车灯等。
聚光灯(Spot)
该类光源一般适用于光线烘焙,无法实时光照。
区域光(Area)
5、光源
常用属性
实时全局光照(GI)
实时光照贴图预览(预烘焙)
光照烘焙
反射探针(Reflection Probe)
光照探头(light Probe)
光照预览窗口(Light Explorer)
6、光照烘焙
Mp3:适合较长的音频,作为背景乐。
Ogg:适合较长的音频,作为背景乐。
Wav:适合较短的音频,作为环境音效。
Aiff:适合较短的音频,作为环境音效。
格式
声音的基本控制
音效与背景音乐的叠加及控制
声音、音效开关以及音量大小控制
声音控制
7、音频
Awake()当一个脚本实例被载入时Awake被调用, 无论脚本是否处于激活状态都调用一次;
OnEnable() 当脚本被设置为激活状态时掉用一次;
Start()仅在Update函数第一次被调用前调用;
FixedUpdate() 每隔固定时间间隔调用一次(默认0.02s),在0s时也会执行一次;
Update() 脚本处于激活状态时每帧调用一次;
LateUpdate() 在Update()之后调用一次;
OnGUI() 脚本处于激活状态时每帧调用两次(曾被用来渲染UI,推出UGUI之后几乎弃用);
OnDisable() 当脚本组件被设置为不可用时调用一次;
OnDestroy() 当脚本组件被销毁时掉用一次;
unity C#脚本生命周期
区别
8、unity脚本程序设计
UGUI
NGUI
开发方式分类
Canvas画布
Panel
EventSystem
Text
Image
Button
Button事件
基础控件
Toggle
Slider
Scrollbar
Scroll Rect复合控件
标签页面TabPage
高级控件
Horizontal Layout Group水平布局
Vertical Layout Group垂直布局
Grid Layout Group网格布局
布局管理控件
UI控件分类
9、UI界面开发
Animation
None:无任何动画
legacy:旧版Animation动画
Generic:y一般动画
Humanoid:人形动画
type
动画设置
先给人物角色绑定自己骨骼
然后在给角色设置动画状态机就可以了
步骤
动画重定向
BlendTree(混合树)
动画中添加事件和遮罩
动画IK(Inverse Kinematics)(反向运动学)
配置Avatar
自动旋转
骨骼不匹配问题
问题
Animator切换动画状态
切割动画
20、Mecanim动画系统
倒放
TimeLine
Cinemachine虚拟摄像机
18、TimeLine和Cinemachine技术
以On开头的方法:补间动画的回调函数。例如:Tweener.OnStart(callBackFunction)
常用方法
DOTween
建模软件制作的动画保存即可,没有专门的制作的插件,或者软件
怎么制作人物动画?
10、动画系统
就是在虚拟的世界中运用物理算法对游戏对象的运动进行模拟,是的物理运动更加的符合真实世界的物理定律。
概述
两个对象发生碰撞必要条件是一个必须为刚体,另一个可以是刚体或者碰撞体
两个对象不光有碰撞还有力的“相互”作用,那么两个物体必须都是刚体。
碰撞规则
定义:是指一个物体在受力的情况下,其外形和尺寸内部结构等都不受影响的的一种特性。 相对应的软体是指在受到力的情况下,其外形和尺寸等发生改变的物体。
位移速度:this.GetComponent<Rigidbody>().velocity=Vector3.forward*10F;
Velocity
刚体重心。降低重心:this.GetComponent<Rigidbody>().centerOfMass=Vector3.up;
centerOfMass
碰撞检测开关。this.GetComponent<Rigidbody>().detectCollisions=false;//关闭碰撞检测
detectCollisions
重要字段
rigidbody.AddForce(); 给刚体添加一个力,可以是力的形式,也可以是冲量的形式,添加力的大小对于刚体产生的影响很难把控,所以此类情况一般适用于模拟真实物理情况,比如 愤怒的小鸟。
rigidbody.MovePosition();让刚体移动至指定位置,以物理帧执行,想达到比较理想的效果应把
rigidbody.MovePosition(rigidbody.position + velocity * Time.fixedDeltaTime);写在FixedUpdate()里面。每一个物理帧都执行。
rigidbody.Sleep(); 让刚体处理睡眠状态
rigidbody.velocity; 给刚体赋值指定的速度,一般较适用于,需要对使用刚体的物体进行细微的速度控制。
刚体(Rigidbody)
<1>碰撞器(Collider)不需要刚体(Rigidbody)
<2>刚体(Rigidbody)要发生碰撞,一定需要碰撞器(Collider)
<3>碰撞器决定了碰撞发生时的边界条件
<4>刚体决定了碰撞发生后的物体的运动效果
<5>没有碰撞器的刚体,会在物理模拟中相互穿透。
结论
碰撞体
1、想要打印触发器方法,必须有一方是触发器,必须有一方带有刚体。二者缺一不可。
2、双方都是触发器,或者其中一方是触发器,另一方是碰撞器,都不会打印。
3、只要一方是触发器,并且有刚体组件,不管另一方是碰撞体还是触发器都会打印各自的触发器方法。
4、一般我们将触发器方法写在角色碰到的物体上,角色一般不参与触发方法。只写碰撞方法。
触发器
<1>碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。
<2>当IsTrigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
<3>当IsTrigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
<4>如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。
12、碰撞体(Collider)和触发器
11、物理模拟
13、unity2D技术
脚本组件传值技术
类的静态字段传值技术
SendMessage数据传值技术
Action 委托
定义委托和事件进行传值
Playerprefs技术
Xml数据持久化技术
网络服务器端技术
15、数据传值
大拇指指向的方向就是Z轴的方向,四指弯曲的方向就是从X轴到Y轴的方向,左右手都可以这样判断。
左右手坐标系
就是左手坐标系。
世界坐标系
就是相对于父亲对象的坐标系。
局部坐标系
坐标系统
16、3D数学
17、3D图形学
19、粒子系统(Particle System)
NavMesh:导航网格,也就是可以进行寻路的区域
NavMeshAgent:导航网格代理,就是在导航网格(NavMesh)中进行移动的对象
NavMeshObstacle:障碍物,即代理需要绕开的对象,障碍物的周围没有导航网格
off-Mesh Link:离网链接,也就是两个导航网格之间的路径,一般显示是两个圆圈和一条有方向的弧线;
Navigation主要四个部分
21、导航寻路
定义:当场景中包含大量模型时,会造成渲染效率降低(也就是FPS帧速率下降),使用遮挡剔除技术,可以使那些被阻挡的物体不被渲染,达到提高渲染效率的目的。
原理:在场景空间中创建一个区域,该遮挡区域有单元格组成,每个单元格构成整个场景的一部分,这些单元格会把整个场景拆分成多个部分,当摄像机能够看到该单元格时,表示该单元格中的物体会被渲染出来
遮挡剔除
定义:如果场景中存在大量小“物件”,则可以使用“层消隐距离”来优化场景;”层消隐距离“就是在比较远的距离将小物体剔除,以减少绘图调用的数量(比如:可以一个大型场景中,高大型的物体任然可见,但是一些小装饰内容(小狗、车子之类的则可以隐藏))
层消隐距离技术
层级细节
22、项目研发常用的优化策略
23、unity游戏移植与手指触控识别
定义:在软件工程学中重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
对软件的生命造成威胁的因素只有一个:需求的变更。一个软件总是为解决某种特定的需求而产生,随着时间的推移客户的需求总是会发生变化的,这就产生了一种糟糕的现象:软件产品最初制造出来,是经过精心的设计,具有良好架构的。但是随着需求的变化,必须不断的修改原有的功能、追加新的功能,还免不了有一些缺陷需要修改。为了实现变更,不可避免的要违反最初的设计构架。经过一段时间以后,软件的架构就千疮百孔了。bug越来越多,越来越难维护,新的需求越来越难实现,软件的构架对新的需求渐渐的失去支持能力,而是成为一种制约。最后新需求的开发成本会超过开发一个新的软件的成本,这就是这个软件系统的生命走到尽头的时候。
重构就能够最大限度的避免这样一种现象。系统发展到一定阶段后,使用重构的方式,不改变系统的外部功能,只对内部的结构进行重新的整理。通过重构,不断的调整系统的结构,使系统对于需求的变更始终具有较强的适应能力,延长软件生命周期。
能改进软件设计使软件更容易被理解(布局、命名、注释、简化逻辑等)
能帮你找到bug
提高软件的开发速度(改进方法,为后继开发提供优势)
重构的好处
在添加新功能时进行重构。
在修改bug时进行重构。
在代码复审时进行重构。
什么时候对软件重构
带复杂条件逻辑的程序:方法过长,逻辑过于复杂,错误率直线上升,可读性直线下降;过大的类,往往是类抽象不合理的结果,降低了代码的复用性;
逻辑重复的程序: 一个类中存在相同的代码块,提炼为宜个独立方法;不同类中有相同的代码块,提炼为一个新类;
过渡耦合的程序:修改或增加一个小功能修改修改大量的代码;
难以阅读的程序:糟糕的命名方式,排版、注解;
当现有的程序无法运行,或重构成本已经超出重写成本时应该是重写程序,而不是重构程序
等等...
什么情况下对软件重构
软件重构的原则
24、软件重构思想
定义:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。
用途:射线多用于碰撞检测(如:射击游戏里是否击中目标)、角色移动、判断是否触碰到3D世界中的哪些物体对象,进而操作等。
Ray Camera.main.ScreenPointToRay(Vector3 pos)
Ray Camera.main.ViewportPointToRay(Vector3 pos)
Ray 射线类
layerMask
RaycastHit 光线投射碰撞信息
基础API
25、射线
适合中小项目对少量数据的存储要求
优点
PlayerPrefs
XML是一种格式严谨且容易阅读的数据存储格式,更加容易理解与排错。
XML是一种数据交换的标准,目前几乎任何一种语言都可以读/写XML文件格式。所以具备天然的跨平台性;
XML可以对象序列化与反序列化,更加容易与项目中的“实体对象”结合,持久化数据更容易与自然,适合大量、复杂结构对象的存储要求。
它将流转换为对象。
反序列化
序列化是将对象状态转换为可保持或传输的格式的过程。
序列化
序列化和反序列化
XML
.str是字符串
.n是整数或者小数
提取数据时转换
JSONObject
ListJson
Excel文件转换为JSON文件
Json
Mysql.Data.dll官网下载
Unity如何查看 .NET 版本
VsCode连接mysql
MySql
26、数据持久化
对象池
预加载
27、预加载与对象缓冲池技术
就是一个系统中正在运行的一个应用程序。
进程
就是系统分配处理器时间资源的基本单元
多线程的运行最基本的特点时:无规律的同时运行。
线程
一个进程可以有一个或者多个线程
进程和线程
Start();开始
Abort();终止
Join();阻塞
Sleep();休眠
控制方法
System.Threading.Thread.Sleep(1000); 所有线成都停顿1秒
System.Threading.Thread.CurrentThread.Join(1000);当前线成停顿1秒;
Highest
AboveNormal
Normal(默认)
BelowNormal
Lowest
优先级
就是解决当多个线程访问一个资源时可能出现的问题
利用锁的概念lock(){}就是对某个对象进行锁定,当访问该结构体时会检测是否上锁,来判断是否继续访问
线程同步
常见问题
线程类Thread
协程
void CancelInvoke();
bool Isinvokeing(string methodName);
调用函数
14、协程和调用函数
线程、协成和进程
套接字Socket技术
28、网路技术
29、AssetBundle资源动态加载
30、AssetBundle框架设计
Unity书本
0 条评论
回复 删除
下一页