RaycastやLinecastを使って、接地判定やショットの当たり判定を取ってたけど、やっぱり太さが欲しいのでBoxCastを使った。
詳しくはテラシュールさんのブログ(http://tsubakit1.hateblo.jp/entry/2016/02/25/025922#BoxCast%E3%81%A8SphereCast%E3%81%AE%E6%AD%BB%E8%A7%92) にて書かれてる。BoxCastの仕様上、開始地点を判定しないのでその部分の判定をOverlapBoxなどで補う必要がある。
private Collider[] _buffer = new Collider[4];
// num に _buffer に保存されているコライダーの数が入る
int num = Physics.OverlapBoxNonAlloc(transform.position, _collider.size/2, _buffer, transform.rotation);
// 全部走査するとNullRefで怒られるのでnumで打止る
for (int i = 0; i < num; i++)
{
if (_buffer[i].CompareTag("Enemy"))
{
Attack2Enemy(_buffer[i]);
}
}
BoxCastはGizmosで表示しないと分かりづらいので表示したい。 RaycastやLinecastならば、Gizmos.DrawLine(startPos, endPos)で簡単に書けていたけど、Boxは少し異なる。 GizmosのmatrixにlocalToWorldMatrixを代入して、回転を指してあげる。
private void OnDrawGizmos()
{
Gizmos.matrix = transform.localToWorldMatrix;
Gizmos.DrawWireCube(Vector3.zero, _collider.size);
}
ケースによるけど、幅を取ってレイを2本打つのもありかも。