3D游戏实战开发(1) | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第9天
一、3D实体搭建
- 3D游戏是由一个个具有形状的实体组成的。每个实体在空间中存在于特定的位置,有特定 的姿态(旋转角度)。
(1) 3D实体的位姿态
- 位置 Position (x, y, z),是一个三维向量坐标 2. 旋转 Rotation (x, y, z),是一个三维向量坐标
- 旋转 Rotation (x, y, z),是一个三维向量坐标
- 缩放 Scale (x, y, z),是一个三维向量坐标 在Unity中,绝大部分情况下,是先缩放,后旋转,最后平移。
(2) 3D 实体的创建
- 通过加载3D模型创建,如 fbx、gltf、obj。
- 通过组合参数化的基本几何体创建。
(3) 3D 实体的绘制
- 材质。
- 颜色。
- 纹理。
(4) 敌机模型制作
(5) 预制体
- 将游戏对象保存在工程中, 在需要的时候创建出来, 这就是预制体(prefab)。
- 预制体存储着一个游戏对象, 包括游戏对象的所有组件以及其下的所有子游戏对象。
二、相机,光照,天空盒
(1) 相机
- Clear Flag。
- 背景颜色。
- Culling Mask。
- 投影(透视、正交)
(2) 透视投影(Perspective)与正交投影 (Orthographic)
(3) 光照
- 类型:点光源、平行光、聚光灯、面积光。
- 颜色。
- 强度。
- 阴影类型。
(4) 天空盒
- 相机的清除标志设为“天空盒” 。
- 窗口-渲染-照明设置。
- 环境-天空盒材质。
三、控制与碰撞
(1) 为主角飞船添加控制逻辑
- 添加刚体组件。
- Add Component > Physics > Rigidbody。
- Use Gravity 设置为 false,忽略重力的影响。
- isKinematic 设置为 true,飞船通过脚本而非力影响运动属性。
- 设置 Constraints ,冻结Z轴位移以及X、Y、Z轴旋转。
- 添加自定义脚本。
- Add Component > New Script
(2) MonoBehaviour
- Start() 在首次调用任何 Update 方法之前在帧上调用 Start。
- Update() 每帧调用 Update。
- FixedUpdate() 用于物理计算且独立于帧率。具有物理系统的频率;每个固 定帧率帧调用该函数。
- LateUpdate() LateUpdate 在每一次调用 Update 函数后调用。
- OnGUI() 系统调用 OnGUI 来渲染和处理 GUI 事件。OnGUI 实现可 以每帧调用多次(每个事件调用一次)。
- OnDisable() 该函数在对象被禁用时调用。对象销毁时也会调用该函数。
- OnEnable() 该函数在对象变为启用和激活状态时调用。