0
0

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.

Unityでちょっとつまずいたとこまとめ

Last updated at Posted at 2020-11-09

はじめに

非プログラマーの初級者がUnity(2D)をいじっていてちょっとつまずいたところや小さい事項のメモです。
ちょくちょく更新する予定です。
基本出先にてスマホから投稿しています。

ほかにもこんなやり方があるよ!という場合は教えていただけるとうれしいです。

RaycastHit2Dがnull

やりたかったこと

プレイヤーが敵の索敵範囲内に入り、目視できるとプレイヤーを追いかける。

実装方法

Phyics2D.Raycast(Vector2D 敵の位置, Vector2D プレイヤーの相対的な方向, float 検出距離)にてRaycastする。
プレイヤーのGameObjectが返されたら追尾モードに、壁などそれ以外なら現在の移動を続けるようにする。

何でつまずいたか

RaycastHit2Dがnullを返す。
ときどきそれ以外が返ってくるが、プレイヤーのGameObjectではない。

原因

プレイヤーのGameObjectのLayerがDefaultではなかった。
Raycast(2Dも3Dも?)がデフォルトで判定するのはDefaultという名前のLayer0のみである。

解決方法

Raycastの引数にLayermaskを与えることで解決。
Layermaskはint型のため、
int Layermask = 1 << プレイヤーのレイヤー番号 | 1 << 壁のレイヤー番号を作成し、Raycastの第4引数で渡した。

Interfaceを定義する場所

やりたかったこと

敵の移動処理(歩く、飛ぶなど)で共通するランダムウォークの方向転換をInterfaceにて定義する。
敵の管理をするclassのUpdateにて一括で呼び出すため。

何でつまずいたか

どこで定義すればいいのかわからなかった。

解決方法

class内でないならどこでもいいみたい。
複数のInterfaceをまとめるため、Interfaces.csを作成してそこに記載した。
このスクリプトはGameObjectにアタッチするはない。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?