using UnityEngine;
public class AoiController : MonoBehaviour, ICounterReceiver
{
public GameObject prefab; // 生成するprefab を簡単に差し替えできるよう public で外部から変更できるようにしておく
public GameObject posTarget; // 葵ちゃんを出現させる地点をオブジェクトで指定する
// 速度は適切な速度を探れるように、publicで外部から変更できるようにしておく
public float prefabSpeed = 1000;
public float prefabTorque = 300;
public void UpdateCounter(int count) {
// 数値変動に応じて葵ちゃんの数を増減させる
AdjustAoiChan(count);
}
public void spawnAoi() {
// prefab からインスタンスを生成
GameObject aoi = Instantiate(prefab, posTarget.transform.position, Quaternion.identity);
Rigidbody2D aoiBody = aoi.GetComponent<Rigidbody2D>();
// 葵ちゃんの親を AoiController に設定する
aoi.transform.SetParent(gameObject.transform);
// 上方向のランダムな方向を決定
Vector2 direction = Random.insideUnitCircle.normalized;
direction.y = Mathf.Abs(direction.y);
// ランダムな回転速度を決定、整数にしたとき2で割り切れない場合は逆回転にする
float torque = Random.value;
if ((int)(torque*100) % 2 == 1) {
torque *= -1;
}
// 生み出した葵ちゃんに力を与える
aoiBody.AddForce(direction * prefabSpeed, ForceMode2D.Force);
aoiBody.AddTorque(torque * prefabTorque, ForceMode2D.Force);
}
void AdjustAoiChan(int target) {
// 今いる葵ちゃんの数をカウント
int now = transform.childCount;
// 今いる人数の方が多い場合は葵ちゃんには消えてもらう
foreach (Transform aoi in transform) {
if (now <= target) {
break;
}
Destroy(aoi.gameObject);
now--;
}
// 今いる人数の方が少ない場合は葵ちゃんを生み出す
while (now < target) {
spawnAoi();
now++;
}
}
}