Unity3D知识点精华浓缩

本文全面介绍了Unity3D游戏开发中的核心技术,包括组件与类的关系、时间处理、物体移动、动画控制等,并深入探讨了角色控制器、碰撞检测、UI操作等多个方面。

一、细节
1、类与组件的关系
2、Time.deltaTime的含义
3、怎么表示一帧的移动距离
4、Update和LateUpdate的区别和适用场景
5、找游戏对象的方式(别的对象 / 当前对象的子对象)
6、组件1调用组件2中方法的方式
7、在面板中获取外部数据的方法
8、序列化属性、序列化自定义对象的方法及举例
9、百分数的表示
10、文件类资源(文本、表格)的类名
11、GetMouseButonDown和GetMouseDown区别
12、获取鼠标按下的位置信息的方法
13、IK逆向运动学的定义
14、Start和Awake的异同
15、加载资源生成预制体
16、发射射线的方法

二、常用函数及属性
1、计算从一个向量到另一个向量所需要的旋转角度
2、对一个对象进行复制操作
3、vector3的属性(x轴、y轴、z轴、夹角、外积)
4、物体平移函数
5、物体旋转函数
6、瞬间给刚体一个恒定的速度
7、刚体增加推力、爆炸力
8、销毁物体
9、播放音乐、音效

三、人机交互
1、键盘按下按键
2、鼠标按下按键
3、获取左右、前后移动信息

四、角色控制器(CharacterController)
1、在角色移动上和Transform组件、RigidBody组件的区别
2、实现角色移动的方法

五、碰撞体组件Collider
1、2个物体产生碰撞的条件
2、怎么作为触发器使用
3、碰撞器碰撞开始的回调函数
4、触发器触发开始的回调函数

六、UI Toolkit
1、UI Toolkit的概念
2、创建UI Document对象和uxml资源文件
3、查找子元素的方法
4、UI Toolkit工作流

七、ScriptableObject数据容器
1、概念
2、使用流程

八、2D动画
1、Sprite定义
2、Animation功能
3、Animator组件

九、人体模型及动画
1、3D的动画存储格式
2、制作动画游戏步骤
3、动画回调函数的定义及使用方法
4、动画事件与回调函数的区别及使用方法
5、动画曲线定义及使用方法
6、IK动画定义及适用场景

十、导航系统
1、作用
2、使用流程
3、分离路面导航的定义、水平跳方案、往上/下跳方案
4、动态路障导航的定义及实现方法

十一、C#复习

1、virtual和abstract的区别
2、c#中使用父类的方法
3、SerializeField字段
4、Header字段
5、ContextMenu字段
6、Flip左右翻转的方法
7、例程的启动、返回值、好处、等待时间的写法、排除例程间相互干扰的方法
8、物体移动的2种方法
9、给物体施加力量rb.AddForce及3种常见模式
10、创建预设体变量 复制物体
11、Invoke委托函数示例
12、碰撞检测函数、碰撞物体检测方法
13、控制暂停、重启的方法
14、时间的数据类型
15、脚本被挂载的当前物体
16、加载场景的方法
17、Physics2D.Raycast检测光线函数

十二、Unity操作

1、Collider类型选择
2、设置Collider碰撞矩阵
3、Normal/Debug模式
4、Camera方式让Game视野变大
5、多个UI组件统一控制的方法
6、Scene界面视角切换

十三、UI界面操作

1、Canvas画布
2、Image组件
(1)pos信息
(2)Anchor锚点
(3)Image Type
3、Button组件
(1)Transition过渡
(2)Inspector中添加事件
(3)代码中添加事件
4、Toggle组件
5、Slider组件
6、ScrollBar组件
7、EventTrigger组件
8、CanvasScaler组件
 

--------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------

一、细节

1、类与组件的关系

当一个类继承了MonoBehaviour时,就变成了组件

2、Time.deltaTime的含义

表示一帧的时间

3、怎么表示一帧的移动距离

Time.deltaTime * 10,即时间 * 速度

4、Update和LateUpdate的区别和适用场景

Update:每一帧更新时的操作

LateUpdate:所有update后执行,帧更新后的操作

适用场景:Update适用于处理输入、对象的移动、旋转、动画等;后者适用于相机跟随、视角更新等。

5、找游戏对象的方式(别的对象 / 当前对象的子对象)

别的对象:GameObject.Find

子对象:transform.Find

6、组件1调用组件2中方法的方式

GetComponent<xx>()

7、在面板中获取外部数据的方法

序列化

8、序列化属性、序列化自定义对象的方法及举例

[SerializeField] string name;

[System.Serializable]

public struct A   {       public int a;       public GameObject b;       public Vector3 c;   }

9、百分数的表示

Length.Percent(25.00)

10、文件类资源(文本、表格)的类名

TextAsset类

11、GetMouseButonDown和GetMouseDown区别

前者是鼠标按下最后一帧的信息

后者是鼠标按下每一帧的信息

12、获取鼠标按下的位置信息的方法

通过Camera发射Ray获取信息

13、IK逆向运动学的定义

通过手或足带动整个身体运动

14、Start和Awake的异同

相同:生命周期中都只调用一次

不同:awake先调用,在脚本被加载时执行,一般用于获取组件、设置初始化值;start后调用,一定用于启动协程、订阅事件。

15、加载资源生成预制体

Resources.Load<GameObject>(xx)

16、发射射线的方法

首先,定义射线Ray(Camera.main.ScreenPointToRay),然后通过Physics.Raycast发射射线,返回RaycastHit碰撞信息

二、常用函数及属性

1、计算从一个向量到另一个向量所需要的旋转角度

Quaternion.LookRotation()

2、对一个对象进行复制操作

Instantiate()

3、vector3的属性(x轴、y轴、z轴、夹角、外积)

vector3.right

vector3.up

vector3.forward

vector3.angle

vector3.cross

4、物体平移函数

transform.translate

5、物体旋转函数

transform.Rotate

6、瞬间给刚体一个恒定的速度

RigidBody.velocity

7、刚体增加推力、爆炸力

RigidBody.AddForce

RigidBody.AddExplosionForce

8、销毁物体

Destory(xx, seconds)

9、播放音乐、音效

player = GetCompent<AudioSource>();

player.Play();

player.PlayOneShot();

三、人机交互

1、键盘按下按键

Input.GetKeyDown(keyCode key)

2、鼠标按下按键

Input.GetMouseButtonDown(int button)

3、获取左右、前后移动信息

左右:Input.GetAxis("Horizontal")

前后:Input.GetAxis("Vertical")

四、角色控制器(CharacterController)

1、在角色移动上和Transform组件、RigidBody组件的区别

transform:通过位置实现移动

rigidbody:通过速度实现移动

characterController:通过速度和模拟碰撞实现移动,前两者不方便爬坡和爬梯,该组件则可以适应各种地形

2、实现角色移动的方法

SimpleMove()

五、碰撞体组件Collider

1、2个物体产生碰撞的条件

1)2个物体都有Collider组件

2)至少有一个物体有Rigidbody

2、怎么作为触发器使用

勾选Is Trigger选项

3、碰撞器碰撞开始的回调函数

OnCollisionEnter(Collision other)

4、触发器触发开始的回调函数

OnTriggerEnter(Collision other)

六、UI Toolkit

1、UI Toolkit的概念

基于Web技术的框架,没有采用GameObject的方式,而是参考了Web技术的XML和CSS方案。

2、创建UI Document对象和uxml资源文件

在Hierarchy窗口右击选择UI Toolkit -> UI Document对象

在Assets窗口右击选择Create -> UI Toolkit -> UI Document创建uxml文件

3、查找子元素的方法

Query方法查找所有符合条件的子元素

Q方法查找第一个符合条件的子元素

4、UI Toolkit工作流

内容布局UXML实现 -> 样式设计USS -> 功能行为C#脚本

七、ScriptableObject数据容器

1、概念

独立于类实例的保存数据的容器,数据存储在assets资源文件中,一般搭配CreateAssetMenu使用

2、使用流程

首先,定义一个类A继承自ScriptableObject,并且注解CreateAssetMenu的信息

然后,在菜单中实例化一个类A,并且修改属性值

接着,定义一个类B,该类中包含对类A的引用,然后在inspector中配置上一步实例化的类A

最后,通过GetComponent加载后即可获取类A的实例化的信息

八、2D动画

1、Sprite定义

在2D游戏中指像素图,比如《超级玛丽》中的马里奥

2、Animation功能

一种简单的动画系统,可以实现物体的移动、旋转等的动画编辑。

3、Animator组件

一种复杂的动画系统,使用状态机来控制游戏对象的动画。

九、人体模型及动画

1、3D的动画存储格式

fbx格式

2、制作动画游戏步骤

1)创建AnimatorController,并成为对象的组件

2)双击AnimatorController打开Animator窗口,状态间通过Make Transition创建连接线

3)在Animator窗口选择Parameters来设置动画状态转换条件

3、动画回调函数的定义及使用方法

在动画开始、执行中、结束时回调的函数,

在Animator窗口中选中动画,在Inspector窗口点击Add Behaviour添加脚本,脚本中的类继承自StateMachineBehaviour.

4、动画事件与回调函数的区别及使用方法

区别:回调函数只能给首帧、尾帧等添加回调方法,而事件能给任意帧添加回调方法。

使用:点击动画,在Inspector的Events中添加方法,然后在脚本中实现方法。

5、动画曲线定义及使用方法

设置一个变量的值随着动画执行而变化,在任意时刻都希望获取到这个变量的值。

使用:点击动画,在Inspector的Curves中添加变量并编辑曲线,在脚本中通过animator.GetFloat("<变量>")获取值

6、IK动画定义及适用场景

定义:一种由手部带动肩部运动的形式

场景:手触电、开枪时手的抖动

十、导航系统

1、作用

用于智能避障并寻找目标物体。

2、使用流程

1)将路面、路障等静态对象设置为Navigation Static

2)烘培(Bake)导航网络

3)给导航角色添加NavMeshAgent组件

4)给导航角色添加脚本组件,并在脚本中通过navMeshAgent.SetDestination设置导航目标位置

3、分离路面导航的定义、水平跳方案、往上/下跳方案

定义:分离的路面的导航

水平跳:给分离路面对象勾选Generate OffMeshLinks属性

上/下跳:在路面分离处创建两个空对象作为跳跃点,给一个跳跃点添加OffMeshLinks组件,并将两个跳跃点对象拖拽到OffMeshLinks组件中

4、动态路障导航的定义及实现方法

定义:导航系统、分离路面导航都是静态的,而动态路障导航是动态的。

实现:给动态路障添加NavMeshObstacle组件,此时U3D会对此对象附近的导航网络进行动态烘培

十一、C#复习

1、virtual和abstract的区别


abstract方法只能声明在抽象类中,同时不能有方法体,必须被子类重写。即:有声明无方法,必须被子类重写。
virtual方法可以声明在任何非密封类中,它可以有方法体,可以被子类选择性重写。即:有声明有方法,可选择性被子类重写。

2、c#中使用父类的方法


base.func()

3、SerializeField字段


如果希望公开某个变量,则使用public进行标识
如果不希望公开某个变量,则使用private进行标识
如果不希望公开某个变量,但是又希望在Inspector中看到该变量的值,则可以使用[SerializeField]+private进行标识

4、Header字段


用于Inspector中变量集的一个header

5、ContextMenu字段


创建类的选项
  [ContextMenu("Debug here")]
  private void print()
  {
      Debug.Log("here!");
  }
此时当脚本挂载到某个对象后,右击该脚本,即可看到"Debug here"的选项,点击该选项即可执行对应的函数。


6、Flip左右翻转的方法


transform.Rotate(0, 180, 0);

7、例程的启动、返回值、好处、等待时间的写法、排除例程间相互干扰的方法


启动例程:StartCoroutine(func()), func的返回值为IEnumerator类型。
使用例程的好处:单独开进程,不会阻塞当前主进程。
等待时间的写法:yield return new WaitForSeconds(xx);
排除例程间相互干扰的方法:在例程开始时停止已有的所有例程,使用StopAllCoroutines()方法。

8、物体移动的2种方法


方法1: transform.position = new Vector2(pos.x, pos.y);
方法2:transform.position = Vector2.MoveTowards(pos1, pos2, moveSpeed * Time.deltaTime);

9、给物体施加力量rb.AddForce及3种常见模式


AddForce(Vector3 force, ForceMode mode)
模式:
1)持续的力:Force
2)瞬间的冲击力:Impluse
3)持续的加速度:Acceleration

10、创建预设体变量/复制物体

创建预设体变量:
GameObject newObj = Instantiate(prefab, position, Quaternion.identity);
其中,prefab也是GameObject的对象
position是Vector3的位置信息
Quaternion.identity表示新复制的对象不会有初始旋转,假如使用prefab.transform.rotation表示新复制的对象会保留原来的旋转。

该newObj后续使用在其他功能中。

复制物体:

Instantiate(prefab, position, Quaternion.identity, parent);

此时不需要赋值给变量,直接产生物体。

parent为父对象参数,为Transform类型。

11、Invoke委托函数示例


Invoke("SendMsg", 5); 意思是:5秒钟之后调用SendMsg()方法。

12、碰撞检测函数、碰撞物体检测方法


检测函数:OnCollisionEnter2D,和Update平级
碰撞物体检测:可以给对方物体一个tag,然后通过collision.gameobject.tag == <tag>判断和该物体是否相撞

13、控制暂停、重启的方法


使用时间变量Time.timeScale

14、时间的数据类型


float

15、脚本被挂载的当前物体


transform.gameObject

16、加载场景的方法


SceneManager.LoadScene("<场景名称>")

17、Physics2D.Raycast检测光线函数


RaycastHit2D hit = Physics2D.Raycast(rayOrigin, rayDirection, rayLength, layerMask);
rayOrigin:光线的起点
rayDirection:光线的方向
rayLength:光线的长度
layerMask:需要检测的图层
 

十二、Unity操作

1、Collider类型选择


我们经常使用的Collider类型是Box Collider,还可以选择Circle Collider等

2、设置Collider碰撞矩阵


Edit -> Project Settings -> Physics 2D -> Layer Collision Matrix,反选后的两个物体之间不会发生碰撞

3、Normal/Debug模式


Normal模式下可以看到组件的Inspector信息
Debug模式下可以看到各个变量的详细信息

4、Camera方式让Game视野变大


修改Camera的size大小,值越大视野也就越大。

5、多个UI组件统一控制的方法


将多个UI组件统一放到Panel中,然后控制该Panel即可

6、Scene界面视角切换

按住鼠标右键并拖动鼠标,可以进行视角切换

按住鼠标右键,同时按WASD也可以进行视角切换

十三、UI界面

1、Canvas画布

所有的UI控件必须依托于Canvas才能生效。

2、Image组件

(1)pos信息

是相对于父组件的位置

(2)Anchor锚点

按Alt键生效


(3)Image Type


-Simple模式:普通图片显示
-Sliced模式:切片,将图片分为核心和边缘两部分,核心可以缩放,边缘不进行缩放
-Tiled模式:图片正常大小显示,然后调整w/h值会出现剪切、堆叠的效果
-Filled模式:适合做特效的填充模式

3、Button组件

(1)Transition过渡


-Color Tinit方式:颜色变化的效果
-Sprite Swap方式:通过Animator配置图片切换


(2)Inspector中添加事件


(3)代码中添加事件


this.GetComponent<Button>().OnClick.AddListener(func(xx));

4、Toggle组件


单选配置:加到同一个Group中

5、Slider组件


适合做血条

6、ScrollBar组件


当界面的内容大于ScrollRect显示框,需要通过滚动条拖拽一部分一部分的显示

7、EventTrigger组件


对没有交互属性的UI组件,增加注册事件的方法

8、CanvasScaler组件


屏幕适配的组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值