Unityに関連する記事です

 以下の内容で順番に実装を進めていきます。

 この手順では、キャラクターをキーボードを使って移動させるための制御処理を実装していきます。

手順6 −キャラの移動の実装−
 8.スクリプトを使って、キャラの移動を制御する  欹険Π榮亜



新しく学習する内容


 ・Header属性
 ・Input.GetAxisメソッド
 ・Rigidbody.velocity
 ・Summary(サマリー)機能


8.スクリプトを使って、キャラの移動を制御する

1.設計


 カメラの制御の際と同じように、ペンギンのキャラのゲームオブジェクトにも専用のスクリプトを作成してアタッチします。
スクリプトを使って、キャラを左右(X軸の方向)に移動できるように制御を行います。 

 このスクリプトによって制御を行うのは、Penguin ゲームオブジェクトにアタッチされている Rigidbody コンポーネントです。
このコンポーネントが扱う物理特性の情報を、スクリプトを使って制御操作を行い、キャラを移動させます


2.PlayerController スクリプトを作成する


 Scripts フォルダの中で右クリックをしてメニューを開き、Create => C# Script を選択してください。
新しいスクリプトが作成されますので、名前を PlayerController に変更します。

 ダブルクリックをしてVisual Studioエディターを起動し、スクリプトを記述してください。

 宣言フィールドに変数を2つ用意します。

 メソッドは Start メソッドはそのまま利用しますが、新しく Unityの持つ FixedUpdate メソッドを追加します。
また、自作メソッドである Move メソッドを用意し、この中でキー入力の判定と移動の処理を行います。

 Move メソッドは FixedUpdate メソッド内で呼び出し命令を記述し、フレームごとに呼び出されている状態を作って
いつでもキー入力を感知できるようにしておきます。

 Move メソッドの上の段にはサマリーという概要説明部分を記述しています。
これは Visual Studio エディターの持つ機能の1つです。作成方法は、Move メソッドをすべて書き終わってから、メソッドの1行上で半角スラッシュを3つ書いてください
自動的にサマリーが作成されます。他のメソッドや、クラス名でも同様に記述できますので、自作したメソッドについては、必ずサマリーを記述しておきましょう


PlayerController.cs

 <= クリックすると開きます。



3.<Input.GetAxisメソッド>


 別の記事で詳しく解説していますので、そちらを確認しておいてください。


 => Input.GetAxisメソッドとInputManagerの関連性


4.<Rigidbody.velocity>


 velocity(ベロシティ)とはRigidbodyクラスの持つ情報の1つで、各軸(x,y,z)の速度ベクトルを表しています。
ゲームオブジェクトが停止している場合、velocityの値はすべて 0 です。(velocity = 0, 0, 0)

  // Rigidbody の Velocity(速度)に、キー入力の判定値と移動速度を代入してキャラを移動
  rb.velocity = new Vector3(x * moveSpeed, rb.velocity.y, rb.velocity.z);

 今回の場合、x軸については、キー入力の値と moveSpeed 変数の計算結果が入り、その速度の方向へ移動を行います
そのほかの軸には velocity 自体の持つ値がそのまま代入されます。

 処理の直後に Debug.Logメソッドを入れているので、Console ビューを通じて、この velocity の値の動きを観察することができます。
キー入力を行いながら、どのような処理になっているかを確認しましょう。


参考サイト
Unity公式スクリプトリファレンス
Rigidbody-velocity
https://docs.unity3d.com/ja/current/ScriptReferenc...
SamuraiBlog 様
【Unity入門】Rigidbodyで自在に移動!velocityの活用方法!
https://www.sejuku.net/blog/55084


5.<Summary(サマリー)機能>


 関数(メソッド)やクラスを作成し終わりましたら、必ずその関数やクラスの説明を書くように心がけましょう。書く場所は関数名、あるいはクラス名の1行上の部分です。
半角スラッシュを3個連続で記述すると説明用のコメントであるサマリー(概要)が自動的に記述されます。

 別の記事で詳しく解説していますので、そちらを確認しておいてください。


 => 知っておきたい豆知識


6.Penguin ゲームオブジェクトに PlayerController スクリプトをアタッチする


 ヒエラルキーにある Penguin ゲームオブジェクトに PlayerController スクリプトをドラッグアンドドロップしてアタッチしてください。


<手順動画 アタッチ>
https://gyazo.com/29cf61897ab159e8dba839aa52760bdb


 宣言している moveSpeed 変数に Header 属性が付与されているため、インスペクターに日本語で設定した情報が追加表示されて変数の内容を理解しやすくなります。
今後、教材内で Header 属性が付与されていない変数があった場合、必要に応じて、自分や他人が見てもわかりやすくなる工夫の1つとして追加することを覚えておいてください。


Penguin ゲームオブジェクト インスペクター画像



7.Penguin ゲームオブジェクトの PlayerController スクリプトを設定する


 Penguin ゲームオブジェクトのインスペクターには、アタッチした PlayerController スクリプトの情報の中に、public 修飾子で宣言した変数の情報が表示されています。
この moveSpeed 変数の型は float 型ですので値を入力していきます。なお、整数値でも、実行時には浮動小数点として扱われますので問題ありません。
(たとえば、5 と入力した場合、それは自動的に 5.0 として扱われます)


 moveSpped 変数はキャラの左右方向への移動速度です。値が大きいほどキャラの移動速度が速くなります。
速すぎても遅すぎてもゲームになりませんので、最初は 3 〜 5 前後を設定してください。0 のままですと、移動しません


Penguin ゲームオブジェクト 値の設定後のインスペクター画像



8.ゲームを実行して動作を確認する


 設定が終了しましたので、早速ゲームを実行して移動が行えるかどうか、動作を確認します。

 ゲーム実行中に十字の左右矢印キー、あるいはA,Dキーを押してみてください。そちらの方向にキャラが移動すれば制御成功です。
カメラもしっかりとキャラの移動に対して追従してくれます。


<実行動画>
https://gyazo.com/22b66c4f41206b0b664cdfb621b0f4e1


9.問題点を修正する


 何回か実行して動作を確認していると気づくことがあるはずです。


<検証動画 フェンスに接触すると停止してしまう>
https://gyazo.com/073e68bc04412f0a7e49e6ca6aaf45d5


 キャラが他のゲームオブジェクト(フェンス) に接触すると、その際にコライダー間で摩擦が発生し、キャラが停止してしまいます。
そういうゲームであれば問題ないのですが、このゲームではずっと滑っていくデザインのゲームとしたいため、
これは不具合として解消されるべき問題となります。

 改善策としては、フェンスのゲームオブジェクトにも、斜面のゲームオブジェクトと同じように
BoxCollider コンポーネントの設定にある Material プロパティ欄に PhysicMaterial の設定を行うことで改善できます。

 とはいえ、フェンスは数が多いため、1つずつ設定していては大変です。ここではまとめて同じ情報を設定する方法をご紹介します。

 ヒエラルキーの RightFences ゲームオブジェクト内にある、fence_single ゲームオブジェクトを24個、全部をまとめて選択します。
まとめて選択する方法は、まず、fence_single ゲームオブジェクトを左クリックし、その後、一番下の fence_single(23) ゲームオブジェクトを Shift キーを押した状態で左クリックします。
こうすることで範囲内のゲームオブジェクトを一括で選択することが出来ます。


<手順動画 一括選択>
https://gyazo.com/ec563a273263c066ff84a03fd446ffd8


ヒエラルキー画像



 その後、この選択された状態にしてから、インスペクターに表示されている Box Collider コンポーネントの Material プロパティ欄に
NoFiriction の PhysicMaterial をドラッグアンドドロップしてアサインします。こうすることで、右側のフェンスのゲームオブジェクトにはすべて PhysicMaterial が設定できます


<手順動画 一括選択した状態で、NoFiriction の PhysicMaterial をドラッグアンドドロップしてアサインする>
https://gyazo.com/022bad24ea68e5429c3d3df97201e720


 設定したら、ヒエラルキーで1つずつフェンスのゲームオブジェクトをずらしてアサインを確認しておきましょう。

 問題なければ、この同じ手順で、左側のフェンスのゲームオブジェクトにも、NoFiriction の PhysicMaterial をアサインしてください

 両方のフェンスに NoFiriction の PhysicMaterial が設定できれば完了です。


10.ゲームを実行して動作を確認する


 改めてゲームを実行して確認を行いましょう。フェンスのゲームオブジェクトに接触しても摩擦がなくなり、そのまま滑り続ければ制御成功です。


<実行動画>
https://gyazo.com/af344fb52b8c2e7cb61f1a0d94eeee91


 以上でこの手順は終了です。

 => 次は 手順7 −キャラの加速・停止制御の実装− です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます