1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity2D】Physics2D.Raycast利用時に真下にレイを飛ばすやりかた

Last updated at Posted at 2019-03-12

#レイキャストを使う時に詰まった所
個人的に詰まった箇所をメモ。
プレイヤーの真下にレイを飛ばして、特定のタグの付いたオブジェクトがあればその座標を算出するプログラムです。ミスタードリラー的なゲームを作るのに役立つかも。

#参考:プレイヤーアタッチしているもの

Player.cs
        Vector2 StartPosition = transform.position;
        Vector2 EndPosition;

        //移動判定用 衝突するレイヤーはすべて入れる
        int LayerObject = LayerMask.GetMask(new string[] { "Chara", "Wall", "Block" });
        //自身の衝突判定を無くしてPhysics2Dの誤確認を無くす
        boxCollider.enabled = false;
        //Raycastで下方向に特定タグの付いたオブジェクトが無いかを検出
        RaycastHit2D HitObject = Physics2D.Raycast(StartPosition, Vector2.down, 10, LayerObject);
        //衝突判定を戻す
        boxCollider.enabled = true;
        //下方向の空白のスペースの深さ
        int Depth = -(int)HitObject.distance;
        //HitObject.distanceは検出したオブジェクトの長さ
        EndPosition = StartPosition + new Vector2(0, Depth); ;

RaycastHit2D オブジェクト名= Physics2D.Raycast(始まりの座標, レイの方向, レイの長さ, 衝突するレイヤー);
上のようなイメージで特定の座標からレイ(光線)を飛ばして、最初にぶつかったものの情報を取得してくれています。下方向に飛ばすのにはVector2.downを使えば良い。

#最初に書いていた駄目なプログラム

駄目だったプログラム
        Vector2 StartPosition = transform.position;
        Vector2 RayPosition = StartPosition + new Vector2(0, -1);
        Vector2 EndPosition;

        //移動判定用 衝突するレイヤーはすべて入れる
        int LayerObject = LayerMask.GetMask(new string[] { "Chara", "Wall", "Block" });
        //自身の衝突判定を無くしてPhysics2Dの誤確認を無くす
        boxCollider.enabled = false;
        //Raycastで下方向に特定タグの付いたオブジェクトが無いかを検出
        RaycastHit2D HitObject = Physics2D.Raycast(StartPosition, -Vector2.up, 10, LayerObject);
        //衝突判定を戻す
        boxCollider.enabled = true;
        //下方向の空白のスペースの深さ
        int Depth = -(int)HitObject.distance;
        //HitObject.distanceは検出したオブジェクトの長さ
        EndPosition = StartPosition + new Vector2(0, Depth); ;

Vector2 RayPosition でレイの向いている方向を定義しているが「StartPosition + new Vector2(0, -1);」では斜め下にレイが向いてしまい変なオブジェクトを取得していました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?