公式のUnity2D入門をv2020.3でやってみる(4)


ワールドとのインタラクション 投射物の作成

  • 弾の設定
  • 物理演算の設定方法
  • 弾の発射方法

rigidbody2d.AddForce(direction * force);
のような感じで物体に外力を加える。

public 変数を作成し、projectilePrefab を呼び出します。プレハブはアセットとして保存された GameObject なので、GameObject 型にする必要があります
は今までのチュートリアルの何処かにあったかな・・・と思って見返してもpublicでGameObjectは定義していなさそう。
public GameObject projectilePrefab;

弾の発射は
GameObject projectileObject = Instantiate(projectilePrefab, rigidbody2d.position + Vector2.up * 0.5f, Quaternion.identity);
とあるけど、2番目の引数のVerctor2.up*0.5fが最初分からなかったけど
ここを見ると
Vector2(0, 1)
と同値

ボタンが
Input.GetKeyDown(KeyCode.C)
とCだけど、コントローラとかを考えると移動みたいに何かあるはず。
ということで検索すると
Input.GetButtonDown("Fire1")
でとりあえず取得できる(古いやり方?新しいInput対応版はとりあえず見ていない)
と思ったらすぐ後ろに書いてあった。。。

オブジェクトの作成時に Unity が Start を実行せず、次のフレームで実行する
Start とは逆に、Awake はオブジェクトが作成されたとき(Instantiate が呼ばれたとき)にすぐに呼ばれる
ややこしや

  • レイヤーの考え方
  • 判定の消し方
  • 遠く離れた物体の削除

レイヤーの衝突設定は
Edit > Project Settings > Physics 2D
衝突後に物理演算やめるには
rigidbody2D.simulated
何度か出てきてるけど、当たったものが何かの判定はこのeがnullかで行えば良い、みたい。
(Class.Typeみたいなので判定しなくてもよい)

EnemyController e = other.collider.GetComponent<EnemyController>();
if (e != null)

カメラ

  • Cinemachine パッケージの導入
  • カメラの設置とキャラクターの追随
  • カメラの移動制限

パッケージインストールでいきなりエラーが出た。

Unityの再起動で解決。
次に「メニューバーの上部にある Cinemachine > Create 2D Camera 」
がどこにあるのか一瞬分からなかったけど、普通にファイルとか編集の所に追加されていた。
なお平行投影サイズ(Orthographic Size)は最初から5だった

Polygon Collider 2Dで
削除キーを押しながらドラッグすることで、ポイント(五角形の一番上のポイントのようなもの)を削除することができます
のやり方がよく分からないが、どうやらCtrlキーを押しながら「辺」をクリックすると消える模様。
最後のポイント設定で値を丸めて、ボーダーが直線になるようにします
は結局やり方がわからず放置。

ビジュアルスタイリング パーティクル

  • 演出のスプライト作成
  • パーティクルシステムの作成

パーティクルの設定は多すぎて覚えられないので、とりあえず覚えない。

  • パーティクルを利用するためのコード

publicにインスペクタ上で割り当てたオブジェクトはプロジェクトからも割り当てられるけど、
「自分の子要素」にあるオブジェクトを割り当てないと(同じ名前でも)ダメっぽい。(それはそう)

ビジュアルスタイリング ユーザインターフェース(ヘッドアップディスプレイ)

  • Canvas作成
  • 画像の配置

日本語に変換している場合はキャンバスグループを作成だと思われる。
サイズは固定かスケールかで選択できて、Scale With Screen Sizeを使いたいけど
とりあえずチュートリアル通り固定で進める。

画像のサイズ、アンカーの扱い等はチュートリアルだけだといまいち分かり辛い。
やってる中で分からなかったのはピポットの動かし方。
そのままドラッグしても画像が動く。アンカー設定でShift押しながらやっても青丸は動かない。
最終的に下までやって動作させてみたらおそらく想定通りに動いているので、表示上だけの問題か。

  • コード中でのUnityEngine.UI.Imageのusing
  • static化してアクセス

public static UIHealthBar instance { get; private set; }
でstaticなオブジェクトへのアクセスを作成は少し前のプロパティとかいうものと同じ書き方。

眠くなってきてしまったので最後らへんのソースをあまりじっくり見ること出来てないので続きはまた次回
⇒2021/10/2 更新

よく見るとmask.rectTransform.rect.widthのrectTransformは初出ぽい。
transform.positionはあった(あとrigidbody2d.position)
rectTransformはUI要素限定で、ピクセル単位での操作用なのかと思ったが
ドキュメントを見ると
RectTransform は GUI のために使用されるだけでなく、他のことにも使われます
と書いてあるので、試しに普通の2Dオブジェクトの正方形を置いてから矩形トランスフォームのコンポーネントを設置できたので、使おうと思えば使えるという事だと理解。
問題はSetSizeWithCurrentAnchorsのようなメソッドの書き方で
ドキュメントを見てもaxisには「サイズを指定する軸」としか書いてないためRectTransform.Axis.Horizontalを指定すればいいという事まではチュートリアルだけでは理解が難しそう。