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

207 阅读3分钟

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

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
  • 背景颜色
  • Culling Mask
  • 投影(透视、正交)

光照

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

天空盒

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

控制与碰撞

让实体在游戏场景中动起来

[Unity时序图](Unity - Manual: Order of execution for event functions (unity3d.com))

为主角飞船添加控制逻辑

1.添加刚体组件。

  • Add Component > Physics > Rigidbody.
  • Use Gravity设置为false,忽略重力的影响。
  • isKinematic设置为true,飞船通过脚本而非力影响运动属性。
  • 设置Constraints,冻结Z轴位移以及X、Y、 Z轴旋转。

2.添加自定义脚本。

  • Add Component > New Script

玩法逻辑与UI

为游戏注入玩法与规则的灵魂

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

  • 主角飞船(Hero) :会与敌机、敌机炮弹、升级道具碰撞,但不会与主角飞船的炮弹相碰 撞。
  • 主角飞船的炮弹(ProjectileHero) :与敌机、敌机的炮弹相碰撞。
  • 敌机(Enemy) :与主角飞船和主角飞船的炮弹相碰撞。
  • 敌机的炮弹(ProjectileEnemy) :只与主角飞船相碰撞。
  • 升级道具(PowerUp) :只与主角飞船相碰撞。

标签和图层管理器

1.菜单栏中执行Edit > Project Settings > Tags and Layers命令。

2.打开Tags左侧的三角形展开按钮。单击标签下方的+符号并输入标签名称。

3.单击Layers旁边的三角形展开按钮从User Layer 8开始,依次输入图层名称。

知识点总结

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