スマートフォン向けゲームのUIのまとめ
http://gameui.matme.info/blog/車がハングしたときのレスキュー処理
①タイヤがひとつも接地していないことと②車がほとんど動いていないことの2つの条件を満たしたときに車をスタート地点にリスポーンさせる。
[SerializeField] List<Vector3> recordedPoints; [SerializeField] int rescueCount; [SerializeField] int stayingDistance; void Start(){ InvokeRepeating("RecordPosition", 10, 1); } void Update(){ if (IsInMidAir() && Staying()){ Respawn(); recordedPoints.Clear(); } } // ハング判定のために車の位置を1秒ごとに記録 void RecordPosition(){ if (IsInMidAir()){ recordedPoints.Add(transform.position); if (recordedPoints.Count > rescueCount){ recordedPoints.RemoveAt(0); } } } // 宙に浮いてるか bool IsInMidAir(){ WheelHit wheelHit; foreach (var wheel in m_WheelColliders){ wheel.GetGroundHit(out wheelHit); if (wheelHit.collider != null) return false; } return true; } // 動いていないか bool Staying(){ if (recordedPoints.Count < rescueCount) return false; foreach (var p in recordedPoints){ if (Vector3.Distance(p, recordedPoints[0]) > stayingDistance) return false; } return true; }