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

190 阅读2分钟

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

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

三、控制与碰撞

为游戏对象指定合适的图层

  1. 在层级面板中选中_Hero,然后在检视面板中从 Layer 下拉菜单中选择"Hero"选项。 Unity 会询问是否将_Hero的子对象也指定到该图层上,选择“Yes, change children” 选项。
  2. 在检视面板中,在 Tag 下拉菜单中选择 Hero 选项,为_Hero设置标签。不需要修改 _Hero子对象的标签。
  3. 从项目面板中选择这5个敌机预设,设置图层为 Enemy。如果出现提示,同样选择 “Yes, change children”选项。
  4. 设置每个敌机预设的标签为Enemy。不需要修改它们的子对象的标签。

敌机碰撞主角飞船

为主角飞船和敌机添加碰撞体。球体碰撞检测的效率较高。我们将主角飞船与敌机飞船及 其子组件上已有的碰撞盒去掉,每个对象的母体上 Add Component > Sphere Collider。

image.png

添加碰撞代码

在 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)管理游戏界面。