Unity笔记——官方教程Roll a ball核心知识点

Roll a ball 的一些关键知识点

1.FixedUpdate、Update、LateUpdate的区别

Update()函数在每一帧都被调用,是所有游戏行为中被应用最频繁的函数,

当一个GameObject具有Rigidbody Component时,在对其Rigidbody进行处理时(比如施加一个三维力向量),在每一个固定帧都需要应用到此物理力,此时应采用FixedUpdate()函数,而非Update()。

LateUpdate在每个Update函数调用之后被调用,次函数常用于脚本执行中。比如,时刻跟踪某一物体的Camera GameObject,它都是在被跟踪物体在Update()函数中移动之后,才随后跟踪此物体的,应该应用LateUpdate()函数。

2.Time.deltaTime

可用于获取上次调用以上三个函数进行更新之后的时间。

3.让游戏镜头跟随某个物体有两种方式

以跟踪运动的球体为例:

第一种方式,在Hierarchy中,将Main Camera置于球体GameObject(Player)的子目录下,即Main Camera是Player的子对象,这样球体移动,Camera也会相应的移动,但是有一个大问题,Camera不仅随着Player的位置变化,其角度也会随着变化,会产生天旋地转的效果,不可取...

第二种方式,给Camera新建Script,定义一个公共属性的GameObject对象player(此player非之前的Player),此公共属性会在manual窗格产生一个接口,用于建立Camera与其他GameObject的联系。将球体GameObject即Player拖拽至此接口,就可以在Camera的Script中获取Player的transform属性了,即能获取其实时位置了(player.transform.position),其位置是一个Vector3对象。

Unity笔记——官方教程Roll a ball核心知识点_第1张图片

offset:表示被跟踪物体与镜头间的距离;LateUpdate函数的作用是:随着被跟踪物体位置的改变,持续更新镜头位置

4.给物体施加物理力(利用键盘鼠标控制球体移动)

思想:给物体添加Rigidbody组件和script组件,通过Rigidbody.AddForce(Vector3 force)函数实现

实现过程

a. 首先要建立script中变量与球体Rigidbody的关联,定义私有Rigidbody变量rb,在start()初始化函数中为其赋值 rb = GetComponent()

b.建立新的3维向量,获取键盘输入(WASD键或方向键)

c. 应用以上三维向量给rb赋值物理力

d. 建立公共变量speed,控制移动速度,可在视图窗口更改,无需在script中更改,方便!

e. 以上是在对球体的Rigidbody进行操作,故在FixedUpdate()函数中实现

Unity笔记——官方教程Roll a ball核心知识点_第2张图片

5.旋转一个物体

利用一个新的三维向量实现

Unity笔记——官方教程Roll a ball核心知识点_第3张图片

5.两个刚体间碰撞,其中一个刚体消失,另一个碰撞数加1,并在UI Text中体现

球体碰到方块,方块消失不见,在球体的script中利用OnTriggerEnter(Collider other)函数实现。方块的Collider属性中的is Trigger要确保被勾上,还要给方块添加标签Tag。

在球体的script定义公共属性public Text countText,与UI界面的Text建立关联

Unity笔记——官方教程Roll a ball核心知识点_第4张图片

6.GameObject之间的碰撞问题

选中多个GameObject,在共有属性中把Mesh Renderer前面的打钩去除,可以看到选中GameObject的碰撞体积(collier volume)绿色轮廓。在Unity的物理引擎机制中,是不允许两个以上的碰撞体积产生重叠的,当物理引擎检测到多个碰撞体的轮廓即将发生重叠时,物理引擎会分析这些碰撞体的形状、速度、旋转角度,从而来计算碰撞(collision),计算碰撞的一个主要因子是碰撞体是否是静态或者动态的。计算碰撞时,静态几何体不受碰撞影响,动态几何体则会受影响,比如动态的球体碰到静态的墙壁后被弹回。

但是,当我们把碰撞体设置成触发状态(trigger)后,两个碰撞体积是可以产生重叠的。把某一个碰撞体设置成触发体可以完成很多有用的操作,比如每当玩家走到某一个角落时,他经过一个触发体,都会有一只蜘蛛从天花板落下来。。。此时我们把碰撞体积转换成触发体积(trigger volumes),在相应GameObject的collider Component中把 Is Trigger勾选上即可。

Unity会对所有静态几何体的体积进行计算,并把这些数据存在缓存里,在之后的每一帧,由于静态几何体不产生运动,所以可以不必重复计算。但是每当我们对静态物体进行移动、旋转、缩放时,Unity都会重新对所有静态几何体进行计算并对缓存数据进行更新,缓存的重新计算需要耗费资源。我们对动态几何体进行操作时,Unity则不会重新缓存所有碰撞体的数据。所以我们需要让Unity区分哪些是动态几何体,哪些是静态几何体。

7.动态几何体与静态几何体

一个GameObject如果拥有一个collider及一个Rigidbody,则被认为是动态的;如果附有Collider但是没有Rigidbody则被认为是静态的。

为了节省计算资源,我们必须把保持转动的cube设置成动态几何体,我们为其增加Rigidbody Component,增加之后,由于cube受到重力影响,且cube此时为触发体积而非碰撞体积,所以cube不会与地面产生碰撞作用,会产生坠落效果。

为了解决坠落问题,将cube设置成Kinematic Rigidbody,kinematic刚体不会受到物理力的影响,它在其transform属性的作用下可以产生移动、运动效果。

你可能感兴趣的:(Unity笔记——官方教程Roll a ball核心知识点)