《土豆荣耀》重构笔记(六)实现怪物的AI

本文介绍了在Unity中为游戏《土豆荣耀》构建基础怪物AI的步骤,包括添加Collider、Rigidbody以实现怪物运动,处理怪物与障碍物的碰撞,以及调整Sorting Layer解决渲染顺序问题。通过实现怪物遇到障碍物转向的功能,增强了游戏体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

  在游戏里面,为了提高游戏的难度,增加游戏的趣味性,往往会根据游戏的需要实现怪物AI。一般来说,一个最基本的怪物AI需要包括自动巡逻看到玩家攻击玩家玩家离开恢复自动巡逻等功能。对于一些状态比较复杂的怪物AI,还需要使用行为树来辅助实现。

  在本篇文章中,我们要实现的怪物AI逻辑十分简单,怪物只需要在场景中以恒定速度移动,当遇到障碍物时转弯朝反方向继续行走即可。因此,我们在实现怪物AI的逻辑时没有用到行为树或者状态机

  此外,因为本篇文章是《土豆荣耀》重构笔记系列文章中第一篇涉及脚本编写的文章,所以在开始阅读本篇文章之间,可以先看一下如何使用VS Code编写Unity脚本。此外,本篇文章默认读者已经知道Unity脚本是如何工作的,熟悉获取组件的引用以及使用Unity提供的api等基本操作,对C#的基本语法也有一定的了解。


为场景添加Collider

  为了能让怪物在场景上行走,我们需要为怪物和场景添加Collider。在Hierarchy窗口中选中需要添加碰撞体的GameObject,然后点击右侧Inspector窗口中的Add Componnet按钮,选择Physics 2D之后,我们就可以选择Collider类型并添加。

添加Collider


  了解了如何添加Collider之后,我们先为场景添加Collider。场景中能和角色、怪物产生交互的物体都存放在Foreground下,它们添加的Collider属性如下所示:

Foreground下的物体添加的Collider:

  • env_TowerFull:
    • Collider: Box Collider 2D
    • Offset: (0, 0)
    • Size: (7.3, 27)
  • env_TowerFull (1):
    • Collider: Box Collider 2D
    • Offset: (0, 0)
    • Size: (7.3, 27)
  • env_PlatformBridge:
    • Collider: Box Collider 2D
    • Offset: (0.8, 0.8)
    • Size: (15.5, 1.6)
  • env_PlatformBridge (1):
    • Collider: Box Collider 2D
    • Offset: (0.8, 0.8)
    • Size: (15.5, 1.6)
  • env_PlatformTop:
    • Collider: Box Collider 2D
    • Offset: (0, 0.12)
    • Size: (9.6, 2.6)
  • env_PlatformTop (1):
    • Collider: Box Collider 2D
    • Offset: (0, 0.12)
    • Size: (9.6, 2.6)
  • env_PlatformUfo:
    • Collider: Polygon Collider 2D

为怪物添加Collider和Rigidbody

  接着,我们在Hierarchy选中AlienSlugAlienShip为它们添加Collider。

AlienSlugAlienShip添加的Collider信息如下:

  • AlienSlug:
    • Collider: Capsule Collider 2D
    • Offset: (0, 0)
    • Size: (1.14, 1.74)
  • AlienShip:
    • Collider: Circle Collider 2D
    • Offset: (0.1, 0)
    • Radius: 0.9

  点击运行游戏,我们发现怪物悬浮在空中,这是因为我们没有给它们添加刚体组件它们没有物理属性。在2D项目中,如果我们想让一个物体具有重力、速度等物理属性,我们需要给这个物体添加Rigidbody2D组件。Rigidbody2D组件也位于Add Component\Physics 2D目录下。接下来,我们为AlienSlugAlienShip添加Rigidbody2D组件。

  添加完成后,再次运行游戏,可以看到怪物受重力影响掉落下来,且发生了翻滚。我们想让怪物一直保持直立,因此我们需要在Rigidbody2DConstraints属性里设置勾选Freeze Rotation Z,不让物体在进行物理模拟时,绕Z轴进行旋转。

限制旋转

  设置完成之后,我们再次运行游戏,可以看到怪物会受到重力影响,且一直保持直立,不会翻滚。最后,我们需要将我们所做的修改应用到它们的Prefab上。在Hierarchy分别选中AlienSlugAlienShip,然后在Inspector窗口中点击Apply按钮即可。

应用修改到Prefab上


让怪物动起来

  接下来,我们开始编写脚本来实现让怪物在场景中移动的功能。我们在Assets下创建一个名为Scripts的文件夹,然后在Scripts文件夹下创建一个名为Enemy的文件夹用于保存和怪物相关的脚本。创建完毕后,我们在Enemy文件夹下创建脚本Wander.cs,然后双击打开。

  既然想要让怪物在场景中移动,那么我们就需要先知道怪物移动的速度以及方向。首先在Wander.cs加入以下代码:

[Tooltip("是否朝向右边")]
[SerializeField]
private bool FacingRight = true;

[T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值