这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天 冲冲冲!
3D实体搭建
在游戏场景中搭建静态物体
3D实体
3D游戏是一个个具有形状的实体组成的,每个实体在空间中存在于特定的位置,有特定的姿态(旋转角度)
3D实体的位姿态(Transform)
- 位置Position(x,y,z),是一个三维向量坐标
- 旋转Rotation(x,y,z),是一个三维向量坐标
- 缩放Scale(x,y,z),是一个三维向量坐标
在Unity中,绝大部分情况下,是先缩放,后旋转,最后平移
3D实体的创建
- 通过加载3D模型创建,如fbx、gltf、obj
- 通过组合参数化的基本几何体创建
3D实体的绘制
- 材质
- 颜色
- 纹理
预制体
- 将游戏对象保存在工程中,咋子需要的时候创建出来,这就是预制体(prefab)
- 预制体存储着一个游戏对象,包括游戏对象的所有组件以及其下的所有子游戏对象
相机,光照,天空盒
营造游戏场景中的氛围感
相机
- clear Flag
- 背景颜色
- Culing Mask
- 投影(透视,正交)
- 透视投影
- 正交投影

光照
- 类型:点光源,平行光,聚光灯,面积光
- 颜色
- 强度
- 阴影类型
天空盒
- 相机的清除标志设为“天空盒”
- 窗口-渲染-照明设置
- 环境-天空盒材质
控制与碰撞
让实体在游戏场景中动起来
初始化 → 物理 → 输入 → 游戏逻辑 → 渲染 → 停顿 → 销毁
为主角飞船添加控制逻辑
- 添加刚体组件
- Add Component > Physics > Rigidbody
- Use Grabity 设置为false,忽略重力的影响
- isKinematic 设置为false,飞船通过脚本而非力影响运动属性
- 设置Constraints,冻结Z轴位移以及X、Y、Z轴旋转
- 添加自定义脚本
- Add Component > New Script
添加敌机:
- 为每架敌机预制体添加一个刚体
- 建立敌机的脚本enemey.cs
- 为每架敌机预制体均添加脚本enemy.cs
玩法逻辑与UI
为游戏注入玩法与规则的灵魂
- 主角飞船增加射击功能
- 按下空格后实例化新炮弹
- 为子弹添加碰撞事件
- 屏幕右上角显示计分板
- 每次消灭敌机为为玩家增加50分
- 重新开始游戏
总结
- 在Unity中创建实体,给实体设置位姿、材质、刚体、脚本
- 配置相机、光、天空盒
- 理解实时游戏update的时序机制
- 通过Input.GetAxis()与InputManager监听玩家输入
- 用Instantiate()动态生成游戏实体实例
- 从Camera.main获得相机参数,设置场景中的物体在画面中的位置
- 利用标签、图层管理器区分实体种类并设置物理规则
- 通过Collider组件与OnTrigger函数添加碰撞事件
- 通过图形用户界面(GUI)管理游戏界面