This commit is contained in:
ohgushiyuga
2026-07-14 16:38:14 +09:00
parent 1ab733c127
commit 55de0be73c
5 changed files with 143 additions and 89 deletions

View File

@@ -19,18 +19,18 @@ public class BossController : MonoBehaviour, IDamageble
[SerializeField] public Transform ceilingAnchor;
[SerializeField] public Transform groundAnchor;
[field: SerializeField] public float AttackRadius { get; private set; } = 10f;
[field: SerializeField] public float JumpRoarDuration { get; private set; } = 5f;
[field: SerializeField] public float AttackRadius { get; private set; } = 15f;
[field: SerializeField] public float JumpRoarDuration { get; private set; } = 2f;
[field: SerializeField] public float CeilingAttackDuration { get; private set; } = 8.0f;
[Tooltip("★新設:糸を降らせる時間間隔(秒)。数値を小さくする(例: 0.1)ほど弾数が激増して密度が上がります")]
[field: SerializeField] public float CeilingShotInterval { get; private set; } = 0.2f;
[Tooltip("★新設:地面に赤マーク(予兆)が出てから、本物の糸が降ってくるまでのタイムラグ(秒)")]
[field: SerializeField] public float WebWarningDelay { get; private set; } = 0.8f;
[Tooltip("★新設:地面に生成された糸が消えずに残り続ける時間(秒)")]
[field: SerializeField] public float WebDuration { get; private set; } = 3.0f;
[Tooltip("★新設:すでに糸がある場所から、最低何メートル離すか(被り防止の半径)")]
[field: SerializeField] public float WebAvoidanceRadius { get; private set; } = 2.5f;
// ★新設:現在ステージ上に存在している(または予兆がある)糸の座標リスト
public List<Vector3> ActiveWebPositions { get; private set; } = new List<Vector3>();
[SerializeField] private GameObject warningMarkerPrefab;
[SerializeField] private GameObject webPrefab;
@@ -163,6 +163,10 @@ public class BossController : MonoBehaviour, IDamageble
private System.Collections.IEnumerator SpawnWebRoutine(Vector3 pos, float delay, float duration)
{
// 1. 生成する座標をアクティブリストに登録(この場所への他の割り込みを禁止する)
ActiveWebPositions.Add(pos);
// 2. 地面に予兆マークを生成
GameObject marker = null;
if (warningMarkerPrefab != null)
{
@@ -172,14 +176,23 @@ public class BossController : MonoBehaviour, IDamageble
yield return new WaitForSeconds(delay);
if (marker != null) Destroy(marker);
// 3. 本物の糸オブジェクトを生成X軸90度回転
if (webPrefab != null)
{
Quaternion webRotation = Quaternion.Euler(270f, 0f, 0f);
GameObject web = Instantiate(webPrefab, pos + new Vector3(0, 0.5f, 0), webRotation);
Destroy(web, duration);
// ★持続時間durationが終わるまで待機してからDestroyする形に変更
yield return new WaitForSeconds(duration);
if (web != null) Destroy(web);
}
else
{
yield return new WaitForSeconds(duration);
}
// 4. 糸が消滅したので、リストから座標を削除してスペースを解放する
ActiveWebPositions.Remove(pos);
}
public void ResetAllAnimationTriggers()