游戏开发小结——Unity发展多阶段敌人:从缓慢接近到激光攻击和超高速追击
当经过深思熟虑的设计时,引人入胜且多样化的敌人可以显着增强游戏的游戏体验。本文将指导您实现新的敌人类型“红色敌人”,它引入了独特的移动和攻击模式来挑战玩家。红色敌人沿着屏幕移动,停下来发射致命的激光束,然后以更快的速度恢复下降。
设置红色敌人
RedEnemy 类管理新敌人类型的行为。它首先定义基本属性,例如速度和对 Animator 和 AudioSource 等必要组件的引用。
public class RedEnemy : MonoBehaviour
{
private float _speed = 2f ;
private bool _go = true ;
private Animator _anim;
private AudioSource _audioSource;
private Player _player;
private bool _isRedEnemyDead = false ;
GameObject beamLaser;
void Start ( )
{
beamLaser = this . gameObject. transform. GetChild ( 0 ) . gameObject;
_anim = GetComponent < Animator> ( ) ;
_audioSource = GetComponent < AudioSource> ( ) ;
_player = GameObject. Find ( "Player" ) . GetComponent < Player> ( ) ;
}
.. .
}
独特的移动和攻击模式
红色敌人的行为主要在 Update 方法和一个名为 LaserDownCoroutine 的协程中定义。敌人向下移动,直到到达屏幕上的特定点,在那里它会停止发射激光束一段时间,然后以更快的速度恢复移动。
void Update ( )
{
transform. Translate ( Vector3. down * _speed * Time. deltaTime) ;
if ( transform. position. y < 5.0f && _go)
{
StartCoroutine ( LaserDownCoroutine ( ) ) ;
_go = false ;
}
else if ( transform. position. y < - 6.0f )
{
Destroy ( this . gameObject) ;
}
}
IEnumerator LaserDownCoroutine ( )
{
_speed = 0 ;
yield return new WaitForSeconds ( 1 ) ;
if ( _isRedEnemyDead != true )
{
beamLaser. SetActive ( true ) ;
}
yield return new WaitForSeconds ( 2 ) ;
if ( _isRedEnemyDead != true )
{
beamLaser. SetActive ( false ) ;
}
yield return new WaitForSeconds ( 1 ) ;
_speed = 15f ;
}
与玩家互动
红色敌人可以通过接触或激光束伤害玩家。 OnTriggerEnter2D 方法处理这些交互,触发敌人的死亡动画并在与玩家或玩家的激光碰撞时将其摧毁。
private void OnTriggerEnter2D ( Collider2D other)
{
if ( other. tag == "Player" || other. tag == "Laser" )
{
.. .
}
}
激光束
激光束本身是一个单独的对象,其行为由 LaserBeam 类控制。它会在接触时对玩家造成伤害:
public class LaserBeam : MonoBehaviour
{
private void OnTriggerEnter2D ( Collider2D other)
{
if ( other. tag == "Player" )
{
Player player = other. GetComponent < Player> ( ) ;
if ( player != null )
{
player. Damage ( ) ;
}
}
}
}
生成红色敌人
最后,我们通过 SpawnManager 类管理红色敌人的生成。这种基于协程的方法可以控制红色敌人的生成,将它们引入为稀有但危险的敌人。
private IEnumerator SpawnRareRedEnemyRoutine ( )
{
while ( ! _stopSpawning)
{
yield return new WaitForSeconds ( 3.0f ) ;
float randomTime = Random. Range ( 10f , 15f ) ;
Vector3 randomPos = new Vector3 ( Random. Range ( - 9.0f , 9.0f ) , 8.0f , 0 ) ;
GameObject newRedEnemy = Instantiate ( _redEnemyPrefab, randomPos, Quaternion. identity) ;
newRedEnemy. transform. parent = _enemyContainer. transform;
yield return new WaitForSeconds ( randomTime) ;
}
}
通过实施红色敌人及其独特的移动和攻击模式,您可以为您的游戏添加令人兴奋的新挑战。这种敌人类型不仅考验玩家的反应和策略,还以其独特的行为丰富了整体游戏体验。请记住,创造有吸引力的敌人的关键在于他们的能力和模式如何与玩家的相互作用,从而营造一个每次遭遇都是新挑战的环境。