《Unity神技大人炼成记》第二章-思考方式与构造
Unity版本:2019.4.23f1c1
相关文章:第一章:开天辟地(场景搭建-天空 山脉 草木 湖泊)
- 粉色矩形是截图后添加,以便辨认操作位置
- 有些步骤只是为了体现一些属性,建议看完再选择试操作
- 可以:指的是可以有这些操作,但此刻没这么做
刚体/碰撞器
创建一个Cube
可以:右上角可重置数值(Reset),即移动到世界中心
可以:复制粘贴组件信息
可以:把名字旁边✔取消则置为非活动状态
太阳光删除,放置聚光灯(SpotLight)
觉得世界太亮可以调整ambient intensity参数
给cube添加组件-渲染Render-灯光Light,把spotlight置为非活动状态(名字旁边的✔取消)
将类型设置为点point
为了体现发光块,添加地板,自行调整距离
给cube添加组件刚体
Mass:单位kg
Drag:对于移动的阻力,空气阻力。数值越大,空气越像胶糖,具有很强的阻止移动力量
Angular Drag:阻止物体旋转的空气阻力
Use Gravity:是否使用重力?(开启时物体会沿着y轴下落
Is Kinematic:添加此项的话,物体不会从被放置的位置下落,只有通过脚本编辑才会移动。如关节一样被固定在某处。
Interpolate:基于前一帧或后一帧来控制动作。用于让动作平滑的情况下来设置
Collision Detection:如果物体移动的速度非常快,则可能在两次碰撞检测之间产生未经碰撞检测而穿过其他物体的情况。这一项是为了防止这种情况
Constraints:设置对于移动和旋转的约束
进行一些角度变换
运行后cube自然下落,接触到平面静止
设置cube物理材质
在assets中创建物理材质,改名为Bouncy
设置参数绑定到cube碰撞器
再次点击运行,cube会不断弹跳,滚出边界
Dynamic Friction:移动过程中的摩擦系数。以跑步为例,数值越接近0,越像是在光滑的油面上跑步。如果数值为1,就有很强的摩擦力,仿佛穿了带防滑钉的跑鞋跑步。
Static Friction:静止状态的摩擦系数。如果数值为0,则像游戏中心的空气曲棍球里飘浮的球一样,非常容易移动。如果数值为1的话,就好像粘上了强力胶一样,动不了。
Bounciness:反弹系数。如果数值为1,则通过碰撞获得的能量会全部反弹回去。如果数值为0,则完全不返弹。游戏对象是弹力球的跳动方法还是丢沙包的跳动方法,是由这个数值设置的。
Friction Combine:与其他碰撞器接触时,摩擦的计算方法。可以设置4种方式:Average(平均)、Multiply(相乘)、Minimum(使用二者之中的最小值)、Maximum(使用二者之中的最大值)。例如,用砂纸摩擦木头时当然比用两张砂纸相互摩擦要光滑了,所以选择Average即可。想象一下带着橡胶手套拿冰块的情景。即使橡胶手套本身的摩擦力很强,但是用不吸水的橡胶手有来拿冰块,可能反而比徒手拿更滑溜。这种情况下,就应该选择Minimum。
Bounce Combine:设置当物体与其他碰撞器碰撞时,如何计算反弹的模式。同样,也可以设置4个种类 Average(平均)、Multiply(相乘)、Minimum(使用二者之中的最小值)、Maximum(使用二者之中的最大值)。个弹力球相互碰撞时,用Multiply模式;而当弹力球撞到弹力低的垫子时,就用Minimum模式等,需要根据假设的质,来更改设置。
Friction Direction 2:这是碰撞之后,各个方向的动作的摩擦系数。例如,想象一下滑雪板。纵向是很易滑动的,但横向设置了边缘,非常难滑动。这里的X轴、Y轴、Z轴是对GameObject本身的方向而言,所以,如果有不动的斜面,会因GameObject的放置方向不同而更改滑动的方向。在简单的汽车游戏中也能应用。在汽车漂移等动作中可以使用。
Dynamic Friction 2:在Friction Direction2中设置了数值时,动态物体的摩擦系数。
Static Friction 2:在Friction Direction2中设置了数值时,静止状态的摩擦系数。
关于层级Hierarchy的思考方式
新建一个GameObject取名为Basket
接着为了放在cube滚落搭建墙壁(cube变形),并放到Basket中(以层级的形式放置
(这里我为了自己的眼睛改了改照明设置
运行,自行调整摄像机视角
Prefab预设
将cube1拖拽到assets(字体变蓝
可以拖拽进项目中
这个保存的Prefab相当于母体,而创建的Prefab实例与母体Prefab之间具有关联,母体Prefab更改了属性,则实例也会更改,比如将Prefab改为球体,则所有实例都会变为球体
但如果实例偷偷自己改变形状则不会被母体连带更改,这些就自己去尝试吧
预制件属性
打开:打开母体prefab,更改属性则全部实例更改
选择:所有实例为选中状态
覆盖:可以恢复成母体prefab设置,也可以将所有实例更改为跟这个实例相同属性
各式各样的相关内容
GameObject的最小单位就是通过菜单点击Create Empty创建出只有Transform组件的空游戏对象。它是可以容纳各种组件的容器。而且,还有一点很重要,GameObject可以以层级的形式放置。分层级放置 GameObject,意思是以Transform为基准,在位置、方向、大小方面形成父子关系状态(即Hierarchy),可以通过脚本组件,以父子层级为轴,来控制属性。
Mesh:设置游戏对象的形状使用哪种数据。这次我们选择的是Unity自带的原始形状,不过,这里还能设置通过模型软件等制作的MeshData。
Mesh Renderer:该组件用于设置Mesh应如何显示的。在这里我们使用的 Default-Material是Unity唯一自带的材质,但材质数据是可以自由创建的,能让世界更加丰富多彩。
Box Collider:这是设置箱型碰撞区域。在这个碰撞属性中,可以添加数据来自由设置物理材质的摩擦系数和反弹系数。这些数据被称为物理材质。此外还有胶囊型、圆形、自定义建模的Mesh Collider等复杂形状。
Rigidbody:为物体赋予重量。带有这个组件,则游戏对象会受重力作用,沿着Y轴下降。
Light:这是光源。能设置可以当作太阳使用的Directional Light、Spot Light、 Point Light等各种类型。
一些相关组件
没有详细写,相信用到的时候就会有所了解了
Effects :与视觉效果相关,如粒子Particle
Physics:与物理引擎相关
Navigation:探索路径等结构组件
Rendering:渲染相关
Audio:声音
Miscellaneous:动画、动作
Event:UI、交互界面
UI:UI
Layout:UI配置