Skip to content

Instantly share code, notes, and snippets.

@yashihei
Last active June 21, 2020 04:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yashihei/47cd2a5614ba01c853a756a3c4eb613f to your computer and use it in GitHub Desktop.
Save yashihei/47cd2a5614ba01c853a756a3c4eb613f to your computer and use it in GitHub Desktop.
BoxCast使うときのTips

RaycastやLinecastを使って、接地判定やショットの当たり判定を取ってたけど、やっぱり太さが欲しいのでBoxCastを使った。

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などで補う必要がある。

NonAlloc版の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]);
    }
}

傾きのあるBoxのDrawGizmosの描画について

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本打つ

ケースによるけど、幅を取ってレイを2本打つのもありかも。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment