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

144 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第17天。今天开始了有关3D游戏实战开发方面的学习。

关于unity

Unity是一款由Unity Technologies研发的跨平台2D/3D游戏引擎。它以交互的图型化开发环境为首要方式,编译器运行在Windows 和Mac OS X下,可发布游戏至Windows、Wii、OSX、iOS或HTML5。等众多平台。此外,Unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。

3D实体搭建

3D实体的位姿态:

  1. 位置
  2. 旋转
  3. 缩放

在Untiy中,绝大部分情况下,是先缩放,后旋转,最后平移

3D实体的创建:

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

3D实体的绘制:

  1. 材质
  2. 颜色
  3. 纹理

预制体

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

相机、光照、天空盒

相机

  • Clear FLag
  • 背景颜色
  • culling Mask:可以裁剪掉特定对象
  • 投影(透视:近大远小、正交)

光照

  • 光源:
    • 点光源
    • 平行光
    • ......
  • 颜色
  • 强度
  • 阴影类型

天空盒

  • 从任何方向能看到的天空的纹理
  • 可以直接用官网上的或下载后使用

控制与碰撞

经历以下过程:

  1. 初始化
  2. 物理碰撞检测
  3. 输入
  4. 游戏逻辑
  5. 渲染
  6. 停顿
  7. 销毁

其中2-6步在每一帧中反复进行。

  • 刚体部件:可以设置重力、isKenematic可以用于控制刚体受力状态,constrain可以用于设置物体在各个维度上能否旋转。

小结

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