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

89 阅读2分钟

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

3D 游戏中的实体模型、材质与位姿

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

  • 3D实体的位姿态(Transform)

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

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

    • 材页。
    • 颜色。
    • 纹理。

    image.png

  • 预制体

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

相机、光照、天空盒

  • 相机

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

    image.png

  • 光照

    • 类型:点光源、平行光、聚光灯、面积光。
    • 颜色。
    • 强度。
    • 阴影类型。
  • 天空盒

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

游戏控制、刚体属性与物理碰撞

image.png

  • 为主角飞船添加控制逻辑
    • 添加刚体组件。
      • Add Component > Physics > Rigidbody。
      • Use Gravity设置为 false,忽略重力的影响。
      • isKinematic设置为true,飞船通过脚本而非力影响运动属性。
      • 设置 Constraints,冻结Z轴位移以及X、Y、飞轴旋转。
    • 添加自定义脚本。
      • Add Component > New Script

image.png

  • lnput.GetAxis()和输入管理器(InputManager)
    • InputManager是 Unity设置输入响应方式的管理列表,它的位置在Edit > ProjectSetting > Input 中。
  • 添加敌机
    • 为每架敌机预制体添加一个刚体。
      • 选中敌机预制体,在菜单栏执行Component > Physics > Rigidbody
      • 在新添加的刚体组件中,将Use Gravity设置为 false。
      • 将isKinematic设置为true。
      • 打开Constraints旁边的三角形展开按钮,冻结Z轴的坐标和XYZ轴的旋转。
    • 建立敌机的脚本Enemey.cs.
    • 为每架敌机预制体均添加脚本 Enemy.cs.

知识点总结

  • 学习在Unity中创建实体,给实体设置位姿、材质、刚体、脚本。
  • 学会配置相机、光、天空盒。
  • 理解实时游戏update的时序机制。
  • 通过lnput.GetAxis(与lnputManager监听玩家输入。
  • 用Instantiate<GameObject>()动态生成游戏实体实例。
  • 从Camera.main获得相机参数,设置场景中的物体在画面中的位置。
  • 利用标签、图层管理器区分实体种类并设置物理规则。
  • 通过Collider组件与OnTrigger 函数添加磁碰童事件。
  • 通过图形用户界面(GUI)管理游戏界面。