这是我参与「第五届青训营」伴学笔记创作活动的第17天。今天开始了有关3D游戏实战开发方面的学习。
关于unity
Unity是一款由Unity Technologies研发的跨平台2D/3D游戏引擎。它以交互的图型化开发环境为首要方式,编译器运行在Windows 和Mac OS X下,可发布游戏至Windows、Wii、OSX、iOS或HTML5。等众多平台。此外,Unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。
3D实体搭建
3D实体的位姿态:
- 位置
- 旋转
- 缩放
在Untiy中,绝大部分情况下,是先缩放,后旋转,最后平移
3D实体的创建:
- 可以通过加载3D模型创建,如fbx、gltf、obj
- 也可以通过组合参数化的基本几何体创建
3D实体的绘制:
- 材质
- 颜色
- 纹理
预制体
- 将游戏对象保存在工程中,在需要的时候创建出来,这就是预制体(prefab)
- 预制体存储着一个游戏对象,包括游戏对象的所有组件以及其下的所有子游戏对象
相机、光照、天空盒
相机
- Clear FLag
- 背景颜色
- culling Mask:可以裁剪掉特定对象
- 投影(透视:近大远小、正交)
光照
- 光源:
- 点光源
- 平行光
- ......
- 颜色
- 强度
- 阴影类型
天空盒
- 从任何方向能看到的天空的纹理
- 可以直接用官网上的或下载后使用
控制与碰撞
经历以下过程:
- 初始化
- 物理碰撞检测
- 输入
- 游戏逻辑
- 渲染
- 停顿
- 销毁
其中2-6步在每一帧中反复进行。
- 刚体部件:可以设置重力、isKenematic可以用于控制刚体受力状态,constrain可以用于设置物体在各个维度上能否旋转。
小结
- 学习在 Unity 中创建实体,给实体设置位姿、材质、刚体、脚本
- 学会配置相机、光、天光盒
- 理解实时游戏 update 的时序机制
- 通过 Input.GetAxis() 与 InputManager 监听玩家输入
- 用 Instantiate() 动态生成游戏实体实例
- 从 Camera.main 获得相机参数,设置场景中的物体在画面中的位置
- 利用标签、图层管理器区分实体种类并设置物理规则
- 通过 Collider 组件与 OnTrigger 函数添加碰撞事件
- 通过图形用户界面 (GUI)管理游戏界面