Unityを使った2Dゲーム制作において、「攻撃を避けにくくしつつ、不快にならない挙動」を実現するには、追尾ロジックや視覚的演出の工夫が求められます。本記事ではその代表例として、EVADRONEプロジェクトにおける実装内容をベースに、ホーミング弾の挙動設計と被弾時の視覚的フィードバック強化に焦点を当てて解説します。
ホーミング弾:急旋回せず、滑らかに追尾させる方法
float yDelta = targetPos.y - currentPos.y;
float adjustedY = Mathf.Lerp(moveDirection.y, yDelta, homingStrength);
Vector2 newDir = new Vector2(moveDirection.x, adjustedY).normalized;
transform.Translate(newDir * speed * Time.deltaTime);
技術的ポイント:
Lerp
を使用してY方向だけ補正を行い、プレイヤーに「追われている」感を与えつつ、理不尽さを排除。homingStrength
(推奨値:0.1~0.3)を調整することで、敵弾の「しつこさ」を柔軟にコントロール可能。CompareTag("Homing")
により通常弾との処理を分離して簡潔化。
被弾エフェクトの強化:プレイヤーにヒット感を伝える
被弾時には即時に視覚的なエフェクトを生成し、ヒットの手応えを与えることが重要です。
if (hitEffectPrefab != null)
{
float rotation = Random.Range(0f, 360f);
float scale = Random.Range(0.05f, 0.1f);
GameObject effect = Instantiate(hitEffectPrefab, transform.position, Quaternion.Euler(0, 0, rotation));
effect.transform.localScale = Vector3.one * scale;
}
技術的ポイント:
- 回転やスケールをランダム化し、連続ヒットでも同じ見え方にならないよう配慮。
HitEffect.cs
では、生成後0.5秒で徐々に縮小→削除するアニメーションを管理。
transform.localScale = Vector3.Lerp(initialScale, Vector3.zero, t);
応用例:ホーミング精度の可変化
ゲームバランス調整の一環として、難易度によってhomingStrength
を段階的に変えることで、同じロジックを使い回しながら「Easy / Normal / Hard」などの差別化も可能です。
// プレイヤーのスコアやステージ進行に応じて強化
if (score > 1000) homingStrength = 0.25f;
else homingStrength = 0.15f
次回は、ドローン本体の設計と演出まわりのロジック(残像、ギア型HP表示、シールド回転)について詳しく解説します。
コメント