どんなツールもどうしても、細かいところから勉強してしまうと難しい!細かすぎ!とかで意欲が失ってしまう。
私はまず大枠をつかんで、その後に徐々に深いところを勉強していくスタイルです。
細かい機能があるとどうしても、ツールのボタンや操作が多機能になり難しくなってしまいます。
なので、画面上の大枠をつかんでいきましょう!
かくゆう私もできませんから
基本操作
2by3にすると、
真ん中から右へ、
・物体を生成
・素材を生成(画像や、プログラム、色という素材)
・物体に素材を紐付けたり、物体そのものの属性を変更する
そして作成した素材はドラッグ&ドロップで対象の物体に持っていくと、その物体に適用できます。
親と子の関係
Adobeの親と子の関係に近くて、
親が動くと子も同じように動く。(でもこれは確かプログラムで親と子のオブジェクトのそれぞれの位置の差が0という式を入れないとダメ)
物体に動きをつける(プログラムC#)
プログラムを書くことでさまざまな動きをつけたりすることができるようになります。
そしてプログラム上ではゲーム上などの物体の動きを定義するために、
Unity上で生成した物体をプログラム上で扱えるようにしないといけません。
クラスのなかに
変数でpublicと記載すると、このファイル以外からアクセスできるようになるので、
Unityの管理画面からアクセスできるようになります。
これができると、他の物体のオブジェクトをこのプログラムに紐づけることが可能になるので、1つのプログラム上に複数の物体を扱えるようになります。
上記でpublic GameObject playerと変数を宣言すると、以下のようにUnityの管理画面上で、
赤枠のようにplayer変数にどんな値を入れるか?(今回はGameObjectとC#で宣言してるので、オブジェクト名)を設定できる。
C#でのキーボード入力値の取得
キーボードで入力したものを検知しないといけない。
コード | 説明 |
---|---|
Input.getAxis(“horizontal”) | キーボードの左右を押した時数値化されて出力してくれる |
Input.getAxis(“vertical”) | キーボードの上下を押した時数値化されて出力してくれる |
Input.getKey(“キーボードのキー”) | キーボードの該当のキーを押したかどうかを判定。結果はTrue/False |
Input.getButton(“キーボードのキー”) | キーボードの該当のキーを押したかどうかを判定。結果はTrue/False |
※ ps4のコントローラーから操作できるように入力値の設定をする。
https://ameblo.jp/itokonjac/entry-12423033546.html
複数の物体でぶつかった時、どんな処理をするか?
①まず物体の衝突検知
②続いて、衝突直前、衝突直後の処理
public class NewBehaviourScript : MonoBehaviour { public float speed; public int value; private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); rb.AddForce(movement * speed); } private void OnTriggerEnter(Collider other) { if(other.gameObject.CompareTag("Pick Up")) { other.gameObject.SetActive(false); } } }
rbは
self.rb = という感じになっている。
コンポーネントをプログラムで扱えるようにコンポーネントオブジェクトを作成している。
上記のプログラムはsphereに紐づけている。
なのでsphereが何かオブジェクトにぶつかった時にOnTriggerEnter関数が実行される。
引数はデフォルトでCollier otherなのでどんなobjectにぶつかっても全て実行される。(つまり衝突したobjectは引数のotherに入る。)
特定のobjectと衝突した時に実行したい場合は、中身の処理でそういう設定をする必要がある。
objectにはタグというものをつけることができる。そこでタグPick Upを作成して、それをsphereとぶつかった時に処理したいobjectに設定をする。そしてbox colliderのis Triggerにチェックを入れる
そして上記のコードを記載することで、Pick Upのもののみ実行され、
SetActive(false)つまり、ぶつかったobjectを非表示(inactive)にする。→ アイテムとかでよく使われる!!
rb.AddForce(movement * speed);
これは、ある方向にどのくらいの力を加えるか?(addForce)
これによってキーボードを1回打った時、どのくらいの距離を動かすかを指定する。
OnTriggerEnter(Collider other)
この関数は、衝突したら実行するイベント関数で
その中で衝突時の処理を行っている。
SetActiveにすることで、その対象の物体の動きや表示を止めている。(アイテムを取った時などは消えるので、このように書くことでアイテムと衝突した際にアイテムが消えて取得したという感じになる。)
コード | 説明 |
---|---|
OnCollisionEnter | 衝突直前(くっつく直前)に実行する |
OnCollisionStay | 衝突中(くっついている時)に実行する |
OnCollisionExit | 衝突直後(離れてすぐ)に実行する |
OnTriggerEnter | |
OnTriggerStay | |
OnTriggerExit |
コード | 説明 |
---|---|
Update | |
FixedUpdate | |
LateUpdate |