3D 游戏实战开发 | 青训营笔记

182 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16天

3D实体搭建

3D实体:3D游戏是由一个个具有形状的实体组成的。每个实体在空间中存在于特定的位置,有特定的姿态(旋转角度)

image.png

image.png

## 3D实体的位姿态(Transform)
  • 位置Position(x,y,z) 是三维向量坐标
  • 旋转 Rotation(x,y,z), 是一个三维向量坐标
  • 缩放 Scale(x,y,z), 是一个三维向量坐标
  • 在Untiy中,绝大部分情况下,是先缩放,后旋转,最后平移

3D实体的创建方式

  • 通过加载 3D 模型创建,如 fbx、gltf、obj
  • 通过组合参数化的基本几何体创建。

3D实体的绘制的三要素

  • 材质
  • 颜色
  • 纹理

image.png

预制体

  • 将游戏对象保存在工程中,在需要的时候创建出来,这就是预制体(prefab)
  • 预制体存储着一个游戏对象,包括游戏对象的所有组件以及其下的所有子游戏对象。

相机,光照,天空盒

相机

  • Clear Flag
  • 背景颜色
  • Culling Mask
  • 投影,包括(透视投影(Perspective)、正交投影(Orthographic))

image.png

image.png

**光照** - 类型:点光源、平行光、聚光灯、面积光 - 颜色 - 强度 - 阴影类型

image.png

天空盒

  • 相机的清楚标志设为“天空盒”
  • 窗口-渲染-照明设置
  • 环境-天空盒材质

image.png

## 控制与碰撞

image.png 步骤:

初始化 → 物理 → 输入 → 游戏逻辑 → 渲染 → 停顿 → 销毁

image.png

  • 为主角飞船添加控制逻辑

    • 添加刚体组件
    • 添加自定义脚本
  • 添加敌机

    • 为每架敌机预制体添加一个刚体
    • 建立敌机的脚本 Enemey.cs
    • 为每架敌机预制体均添加脚本 Enemy.cs
  • 随机生成敌机

  • 设置标签、图层和物理规则

    • 游戏中存在不同类型的游戏对象,它们需要放置在不同的图层中,并与其他游戏对象发生不同的交互。
  • 标签和图层管理器

  • 物理管理器

  • 为游戏对象指定合适的图层

  • 敌机碰撞主角飞船

  • 添加碰撞代码

image.png

image.png

image.png

image.png

image.png

玩法逻辑与UI

  • 主角飞船增加射击功能
  • 按下空格后实例化新炮弹
  • 为子弹添加碰撞事件
  • 屏幕右上角显示计分板
  • 每次消灭敌机为为玩家增加50分
  • 重新开始游戏

总结

  • 对3D 游戏的开发有了初步的了解。
  • 也了解了3D 游戏的一些实操流程
  • 学会在Unity中创建实体,给实体设置位姿、材质、刚体、脚本。
  • 学会配置相机、光、天空盒。
  • 理解了实时游戏update的时序机制。
  • 学会通过Input.GetAxis()与InputManager监听玩家输入
  • 学会了用lnstantiate()动态生成游戏实体实例。
  • 学会了从Camera.main获得相机参数,设置场景中的物体在画面中的位置。
  • 学会了利用标签、图层管理器区分实体种类并设置物理规则。
  • 学会了通过Collider组件与OnTrigger 函数添加碰撞事件。
  • 学会了通过图形用户界面(GUI)管理游戏界面。