Unity新規学習メモ

##ショートカットキー

|効果|コマンド|
|---|---|
|プロジェクトの上書き保存|⌘ + S|
|プロジェクトの別名保存~|⌘ + ⇧ + S|
|---|---|
|\[パン](画面移動)モード|Q|
|パン(平行移動)|⌥ + ⌘ + ドラッグ|
|パン(回転移動)|⌥ + ドラッグ|
|\[移動]モード|W|
|\[回転]モード|E|
|\[拡大縮小]モード|R|
|\[Rect Tool]モード(移動回転拡大縮小全部(2D用なんでもツール？)|T|
|\[移動回転拡大縮小]モード(3D用なんでもツール？)|Y|

##オブジェクトに属性を付与

◆Add component →　Rigidbody → Use Gravity(デフォルトON)
設定したオブジェクトに対して重力による動きが加わる。

##後のGUI操作は書くのが面倒に・・・

[\[Unity２Dチュートリアル\]](https://miyagame.net/bomb-avoid1/)
[爆弾を避けよ！～１～ unityアプリの設計](https://miyagame.net/bomb-avoid1/)
[爆弾を避けよ！～２～ 素材のダウンロード　下準備](https://miyagame.net/bomb-avoid2/)
[爆弾を避けよ！～３～ オブジェクトの設置](https://miyagame.net/bomb-avoid3/)
[爆弾を避けよ！～４～ オブジェクト・UIの設置](https://miyagame.net/bomb-avoid4/)
[爆弾を避けよ！～５～ コントローラスクリプトの作成(プレイヤー移動)](https://miyagame.net/bomb-avoid5/)
[爆弾を避けよ！～６～ コントローラスクリプトの作成(爆弾落下)](https://miyagame.net/bomb-avoid6/)
[爆弾を避けよ！～７～ コントローラスクリプトの作成(当たり判定)](https://miyagame.net/bomb-avoid7/)
[爆弾を避けよ！～８～ ジェネレータの作成(爆弾追加)](https://miyagame.net/bomb-avoid8/)
[爆弾を避けよ！～９～ ジェネレータの作成(リトライボタン)](https://miyagame.net/bomb-avoid9/)
[爆弾を避けよ！～１０～ コントローラスクリプトの作成(リトライボタン非表示)](https://miyagame.net/bomb-avoid10/)
[爆弾を避けよ！～１１～ 効果音の設定](https://miyagame.net/bomb-avoid11/)
[爆弾を避けよ！～１２～【補足】 アプリのビルドと公開](https://miyagame.net/bomb-avoid12/)

で爆弾避けゲームをなぞって作成、最後にプレイヤー移動を左右矢印キーで、っていうのを自分で付加してやったが、UnityはGui操作による開発が基本になりそうなので、感覚で覚えるしかないな・・・。あと、なんとなくMacBookノートではやりにくい。Windowsデスクトップで大きい画面見ながらやる方が良さそう。あと、サイトでも進めてたが、ノートのトラックパッドじゃやりにくい、マウスがあった方がやっぱりいい。すぐサボるからノート持って自習室行くけど。

コードの記述は随時ググって調べよう。なんとかなりそうな気はする。

##2Dゲーム作成で学んだ、スクリプト記述の考え方

### 書いたスクリプトはオブジェクトにアタッチしないと使えない。
アタッチしたオブジェクトもDeActive状態のままでは機能しない・・・

### スクリプトから、別スクリプトへアクセス

スクリプトから、**同シーン内**の別のスクリプトへのアクセスは、それがアタッチされたオブジェクトへの参照から辿る。参照元でpublic GameObjectを定義し、unityのinspectorから手作業で紐づけるのが良い(GameObject.Find()は重くなりがちな処理みたい(特にUpdate()に書く場合))
[Unity - 他のスクリプトを触る](https://qiita.com/pilkul/items/bceca844771874d465ef)

### 同シーン内で画面の切り替え

同シーン内で画面の切り替えというか、UI用のメニュー画面を一定時間後とかに最前面に表示させたい場合、親オブジェクト配下に各種オブジェクトを配置して親オブジェクトを非アクティブにしておいてしかる後に親オブジェクトをアクティブにすれば表示されるが、その間一切非表示オブジェクトに紐づけたスクリプトは動作しない。なので、ゲームの得点のカウントアップなんかは空オブジェクトにスクリプトを紐づけて行わせてしまえ。
[【Unity uGUI】パネル（Panel）を使ってUIを表示・非表示にする方法](https://xr-hub.com/archives/11782)

### DB替わりにローカルファイル保存

公開するつもりのないアプリはGitHubに留めておく。その場合でもアプリを動かすにあたり、アプリを閉じた後も保存しておきたいデータがある。データベースを使うまでもないデータであれば、ローカルファイルに保存しておくべき。慣れ親しんだCSVファイルを！と思っていたがしっかりまとめてくれていたのでありがたく頂戴する。
[[Unity 2D] データを保存する(外部ファイルCSV)](https://high-programmer.com/2017/12/10/unity-savedata-otherfile/)

### 配列のソート

ややこしすぎて、全然理解が追い付かない。
今回やろうとしたのは、CSVファイルに保存した、2列の文字列を配列に入れてからソートする、というもの。

とりあえず覚えておくことは、「Sort.Array()メソッド」っていう便利なものがある（他にもListとか、Orderbyとかあるみたいだがよく分からん）
これは多次元配列は使えないが、ジャグ配列であればソートすることができるので、CSVを配列に代入する際はジャグ配列に代入すること。
次に、Sort.Array()に渡す値の書き方が簡単なのが、***ラムダ式？***とかいうらしい。
文字列の場合は、Array.Sort(jag, (x, y) => String.Compare(y[1],x[1]));という感じで書く。
ちなみに数値の比較は、Array.Sort(jag, (x, y) => x[1]-y[1]);だけでいいっぽい。

A列をソートした状態で更に、B列もソート、というやり方もあるらしいがややこしいことはひとまず置いておく。
一列ずつのソートにしとこうぜ。

Array.Sort(jag, (x, y) => String.Compare(y[1],x[1]));について、
[1]を、[0]とかにすれば、ソートする列を変えられる。
y[1],x[1]を、x[1],y[1]とかにすれば、昇順降順が入れ替わる。
これだけ覚えておけばなんとかなる！！！！
ちなみに、渡した配列がそのままインデックスが変わって、ソートされて返ってくるので、破壊的ソート？とかいうっぽい。

[ジャグ配列・多次元配列のソート](https://smdn.jp/programming/netfx/sorting/2_arrays/)
[【C#入門】配列、Listをソートする方法(降順、カスタマイズも解説)](https://www.sejuku.net/blog/40456)
[配列のソート](http://home.a00.itscom.net/hatada/csharp/arraysort01.html)