3D游戏开发实战(3)| 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第11天
三、控制与碰撞
为游戏对象指定合适的图层
- 在层级面板中选中_Hero,然后在检视面板中从 Layer 下拉菜单中选择"Hero"选项。 Unity 会询问是否将_Hero的子对象也指定到该图层上,选择“Yes, change children” 选项。
- 在检视面板中,在 Tag 下拉菜单中选择 Hero 选项,为_Hero设置标签。不需要修改 _Hero子对象的标签。
- 从项目面板中选择这5个敌机预设,设置图层为 Enemy。如果出现提示,同样选择 “Yes, change children”选项。
- 设置每个敌机预设的标签为Enemy。不需要修改它们的子对象的标签。
敌机碰撞主角飞船
为主角飞船和敌机添加碰撞体。球体碰撞检测的效率较高。我们将主角飞船与敌机飞船及 其子组件上已有的碰撞盒去掉,每个对象的母体上 Add Component > Sphere Collider。
添加碰撞代码
在 Hero 类中添加 OnTriggerEnter 函数:
void OnTriggerEnter(Collider other) {
if(other.tag == "Enemy") {
Destroy(this.gameObject);
}
}
四、玩法逻辑与 UI
主角飞船增加射击功能
-
新建一个新的预制体,命名为 ProjectileHero。模型为一个立方体,Position与Rotation均 为[0,0,0],Scale为[0.25,1,0.5]。保留默认的 Box Collider。Box Collider的 Size.z 设置 为10.
-
创建一个名为 Mat_Projectile 的新材质,将着色器指定为 ProtoTools > UnlitAlpha,并 将新材质应用到 ProjectileHero 上。
-
为 ProjectileHero 游戏对象添加一个新的刚体组件,设置如下:
• Use Gravity 为 false
• isKinematic 为 false
• Collision Detection 为 Continuous
• Constraints 冻结Z坐标与X、Y、Z旋转轴
• Tag 和 Layer 均设置为 ProjectileHero。
屏幕右上角显示计分板
- 在菜单栏中执行 GameObject > UI >Text命令。 • Canvas:匹配游戏面板尺寸的画布。 • EventSystem:用于运转按钮、滚动条等交互元素。
- 选中Text对象,修改名称为Score。
- 设置Text对象的Anchors、Pivot、Pos、Width、 Hight、Text、Font Style、Font Size、Color等 显示属性
知识点总结
- 学习在Unity中创建实体,给实体设置位姿、材质、刚体、脚本。
- 学会配置相机、光、天空盒。
- 理解实时游戏update的时序机制。
- 通过Input.GetAxis()与InputManager监听玩家输入。
- 用Instantiate()动态生成游戏实体实例。
- 从Camera.main获得相机参数,设置场景中的物体在画面中的位置。
- 利用标签、图层管理器区分实体种类并设置物理规则。
- 通过 Collider 组件与 OnTrigger 函数添加碰撞事件。
- 通过图形用户界面(GUI)管理游戏界面。