Programming Serendipity

気まぐれに大まかに生きるブログ

Unity5 メモ27

  • スマートフォン向けゲームの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;  
}