二代目備忘録スマートフォン用の表示で見る二代目備忘録2018-11-27Unity備忘録23頁目「ここまでのおさらい等」Unity江上宿六です。ここまで記してきたUnityの操作や処理についておさらいしようと思いました。理由はブランクのせいで割と記憶から飛んでしまったからです、悲しい。画面の操作やオブジェクトの生成について書いた頁。左上のアイコンをクリックして移動や回転などの挙動を選択する事が出来る。W,Eキーを使うなりして切り替える方が楽な感じかもしれない。視点の移動はAlt+左ドラッグを覚えておくと良さそうである。4頁目:インスペクターインスペクターの説明や、オブジェクトの操作も行った頁。5,6頁目:スクリプトを書いてみる実際にスクリプトを書いてみた頁。5頁ではStart関数やUpdate関数の説明、スクリプトを実行させるにはオブジェクトにアタッチして使う事などを説明。6頁目ではオブジェクトを回転させてみたりしてました。クラス内に回転速度を保持する変数を宣言し、Start関数内で回転速度量を設定。Update内でtransform.Rotate()を使いオブジェクトをその回転速度分を回転させるという処理を行い続ける、という感じの事を行いました。各方向への回転速度の制御を行ったりしました。8頁目:ボタンを押したり放したり、という状態の検知Input.MouseButtonDown()は押した時の状態。Input.MouseButton()は押し続けている状態。Input.MouseButtonUp()は離した時の状態。キーボード入力の検知はInput.GetKeyDown、GetKey、GetKeyUpを使う。9頁目:パッドとかの操作パッドのボタンはInput.GetKey(KeyCode.Joystick1Button0)等で取得可能。スティックはInput.GetAxis("Horizontal")で水平方向、Input.GetAxis("Verticle")で垂直方向を取得出来、値はそれぞれ-1.0f~1.0fの間となる。このHorizontaやVerticalというのはEdit→ProjectSettings→Inputから表示されるInputManagerのものを参照しているようで、ここから色々と設定出来る。TypeがJoystickAxisならば、そこのAxisを変えたりする事で様々なスティックなどの状態を検知出来るようになるようである。自分のWiiプロコン用のやつではこのようになっていたと書いておきます。3rd:右スティックX4th:右スティックY5th:十字キーX6th:十字キーY10頁目:Prefabと言いつつRigidbodyオブジェクトにRigidbodyを追加する事で物理的な挙動をさせられるようになる。追加方法はインスペクターのAddComponentからPhysics→Rigidbodyとする。当たり判定に用いられるColliderとセットで扱われる事が多い。11頁目:Prefabとインスタンス生成シーン上にあるオブジェクトをアセットにドラッグする事でPrefabが生成される。Prefabというのは画面に同じオブジェクトを大量に出現させたいとかいう時に使えたりするもので、オブジェクトの雛形となる物。1.生成を制御する為のオブジェクトを生成する2.スクリプトを生成してそのオブジェクトにアタッチしておく3.スクリプト内でPrefabの受け皿となるGameObjectをPublicで宣言する4.Inspectorで先ほどのPrefabを宣言した所にアウトレット接続する5.スクリプト内でGameObjectを宣言してInstantiateを使う、これによってPrefabのデータを宣言したGameObjectに受け渡すことが出来る。6.(変更があるなら)初期状態を設定したりする。13頁目:ランダム数ランダムな値を扱う時の処理です。Random.Range(a,b)とするとaとbの間の数値が得られる。floatで(-1.0,1.0)した場合は-1.0~1.0の値が得られるが、intで(-10,10)とした場合は-10~9までの値が得られ、10は得られないという点には注意。14頁目:当たり判定Colliderを使った当たり判定を主に扱いました。OnCollisionEnter():当たった瞬間OnCollisionStay():当たり続けている間OnCollisionExit():離れた瞬間といった感じで関数が用意されており、それぞれのタイミングで呼ばれます。同様にOnTrigger~()という関数も用意されていて、OnCollision~との違いは当たった時にオブジェクトが物理的な挙動を行うか行わないかという点です。OnCollision~は行われ、OnTrigger~は行われません。この回ではタグを設定して球と床を区別し、処理を分けたりしています。15頁目:小ネタ回オブジェクトにマテリアルを設定して色づけをしたり、rigidbody.AddForce()を使い物理挙動をするオブジェクトに力を加えて飛ばしたりしました。16頁目:UIの作成テキストのUIを作成し、アンカーを使って表示位置を設定しました。インスペクターで色々と設定が出来るので、必要に応じて確認。17頁目:UIの更新UIの更新はスクリプトを使って行われます。UnityEngine.UIと記述してUIを扱える様にしておくのを忘れずに。スクリプト内でGameObjectを宣言し、Start関数内でGameObject.Find()を使ってUIのテキストオブジェクトを取得して代入しておく。Update関数内でGetComponent<Text>().textに実際表示されるテキスト内容を代入することでUpdate関数が呼ばれる度にUIが更新されるようになる。スコアならばToString()を使って数値を文字列に変換してやると良い。ToString("D")とすると整数、ToString("F1")とすると小数点第一位まで変換される。18,19頁目:ゲーム的処理を行う得点の追加はGameを制御する空のオブジェクト用のスクリプト内にpublicで関数を作り、オブジェクトが破棄される時にそれを呼び出すようにしている。その関数を使うためにはGameObject.Findでその制御用オブジェクトを取得し、GetComponent<スクリプト名>.関数名()とする。スコア変数の方をpublicにするという発想は却下。この辺のデータを表に出すべきではない気がするので。19頁目でも同様にゲームを制御する関数を作り、呼び出すという事の繰り返し。面倒くさい関数の使い方をしてるかもしれないけど、多分ベターでしょう。20,21頁目:シーンの切り替え行き来するシーンをFile→BuildSettingsのScenesInBuildに登録する。UnityEngine.SceneManagementを定義しておき、SceneManager.LoadScene()で移動先のシーンを指定すればシーンが切り替わる。21頁目、シーン移動によってオブジェクトが全て破棄されてしまうのでStart関数内でDontDestroyOnLoad()を呼び、破棄されないように設定をした。これによってオブジェクトは保持されるが、今回はUpdateで既に存在しないオブジェクトに対して処理を行いエラーを吐いたりしたので値を受け渡したら破棄しました。この辺の設計は微妙だと思いました。22頁目:反省会サウンドやアニメーションについて書くとか書いてある。いう感じで記していたのを確認しました、何故か数日かかりましたが。実はこの確認作業でだいぶ勘が戻ってきたというか、思い出してきました。言えあのGetComponent<>の書き方は相変わらず馴染めない感じですけどね。これで先に進めそうです。いう事で次回は反省会にあった通りサウンド、アニメーションあたりをやっていきたいと思います。やらないと忘れてしまうので。