このページの説明
キャラ(オブジェクト)を移動させるのに使うパーツを簡易説明で書いて行きます
目次 キー入力、キーボード、マウスの操作編 input オブジェクトを移動させる方法 物理ありなし ジャンプさせる時に使う地面設置判定は、コリジョン、トリガー編でやります アニメーションさせる(アニメーターbool値を)
キー入力、キーボード、マウス、ゲームパッド等の操作編
Input.GetKey
使用例 if (Input.GetKey(KeyCode.W)){ key_w = true;}
Input.GetkeyUp Input.GetKeyDown InputGetKey
それぞれ、離した瞬間、押した瞬間、押している間となる
(KeyCode.マルマル)
ここでどのキーを操作したかアルファベット大文字でキーボードのキーをとなる
他にもSpace Left shift いろいろあるので調べて見てください
Input.GetMouseButton()
マウスのボタン編
使用例 if (Input.GetMouseButton(0)) {なんかの処理; }
0だと左クリック1だと右クリック2だとマウスのホイール(真ん中のボタン)クリック
これもキー操作と同じようにInput.GetMouseButtonUp Input.GetMouseButtonDownがあり離した時押した瞬間押している間とできる
Input.GetAxis()
マウスの横の動きと、縦の動きを使う
使用例 float dx = Input.GetAxis ("Horizontal"); float dy = Input.GetAxis ("Vertical"); transform.Translate (dx, dy, 0.0F);}
確かこれででもできたはず、直接中に入れるやつ
transform.Translate(Input.GetAxis("Horizontal"),0,0)
オブジェクトを移動させる方法
これたくさんありすぎて、まっ頑張る
リジッドボディーを使う移動処理の場合Fixed Update()の中に入れたほうがいいらしいです。まだ勉強中で詳しくは、説明できないし、理解してないのでリジッドボディー使っているものを動かすときは、何も考えずにこれの中にぶち込んじゃっています
Time.deltaTimeとTime.fixedDeltaTime(物理挙動用)これを掛けるのは、くせにしておいたほうが良さそう、オブジェクトを移動させるときにアップデートのタイミング基準で処理するのがデフォルトでこれだと、パソコンの性能がいいとたくさん処理されて悪いと、少ない回数の処理になっちゃいます、タイムデルタタイムを使えばこの時間でここまでみたいに、パソコンの性能関係なしに一定の間隔で処理をさせることができます。と解釈しております
物理挙動なし編
transform.Translate()
これ書いてあるスクリプトをアタッチしているオブジェクトを基準にどれだけ動かすか?と言う使い方と解釈してます
.forward とか.upとかを使うときは、Vector3.forwardみたいに使いましょう、これもいっぱい種類があるので便利です
transform.forwardを使うと意味わかんない挙動になっちゃいます(苦労しました)
使用例(俺がよく使うやつ) if (key_w) { transform.Translate(Vector3.forward * Nspeed * Time.deltaTime); }
これは、使ったことない transform.Translate(x,y,z);
物理挙動編
同じ移動でも慣性の法則にしたい、少しずつ加速したい、減衰させたいとかいろいろ指示できるのが、この移動方法のメリットだと思います、でもたくさんありすぎて大変です
velocity
使用例 private void FixedUpdate() { GetComponent<Rigidbody>().velocity = transform.forward * 1500 * Time.fixedDeltaTime; }
この使用例は、僕がプレイヤーが弾を打つときに使用する、弾プレハブにアタッチしたscriptから取って来ました
GetComponent<Rigidbody>()これは、忘れないように気をつけてください、今回は、宣言しないでここでやりましたが
void Start () { Rigidbody rb = GetComponent<Rigidbody>(); }
こんな感じでどこかで宣言しておいたほうがいいかもしれません
その場合rb.velocity=transform.forward~~~~~~とやればいいはず
ごめもしかしたらrb.velocity=vector3.forward~~~かも座標の基準がこの場合どこになるのか今度調べたらここ修正しますので、正しく動く方を採用してください
最初の例題のスクリプトだと複雑になってくると、どうなるか心配なので、ちゃんと宣言して使ったほうがいいかもしれません、と言うことで追記しました
AddForce()
アドフォースは、力を加える感じ、少しずつ物理的に加速していき、減速していく感じと僕は、解釈しています、引数に方向とフォースモードを設定することができ、いろんな力の加え方を設定できます
void Start () { Rigidbody rb = GetComponent<Rigidbody>(); }
これを忘れないようにしてくださいrbのところは、好きな名前でOKです
使用例 if (jump) { rb.AddForce(Vector3.up * Njump * Time.fixedDeltaTime,ForceMode.Impulse); jump = false; }
引数1にベクトルを指定して引数2でフォースモードを指定してください、フォースモードは、検索して見てください、しばらく勉強の予定がありません(すんません)
ちなみにインパルスImpulseは、スッゲー加速しそうなイメージだったので使って見ました
アニメーションさせる(アニメーターbool値を)
ここは、スクリプト用の予定なのでそれ以外の設定は、あまり触れませんアニメーターコントローラーとかの設定は、ほかでいつかやります
anim=GetComponent<Animator>();
ゲットコンポーネントは、忘れずにねanimのとこは、好きな名前にしてokです
宣言した名前.Setbool(“ステートで設定したやつ”,真偽);
ステート間を遷移するトランジションの遷移条件のboolのtrue falseを変えるスクリプトです
使用例 if(InputGetKey(KeyCode.w) { anim.Setbool("walk",true); //これを追加記入する } if(InputGetKeyUp(KeyCode.w) { anim.Setbool("walk,false");//キー離したら待機状態に戻すため }
セットブールないにある”ステートで設定したやつ”(ダブルクオーテーション忘れずにね)これ実は、boolの名前なのか?ステートの名前なのか把握してません実験したらいいだけなのですが、なぜ実験してないのか?両方とも同じ名前つけてしまえば必要ないからです、今の所必要性がわからないので、同じ名前をつけて運用しておきます
コメント