
プレイヤーキャラクター:Part 1
Tutorial
Beginner
+0XP
30 mins
(239)
Unity Technologies

前のチュートリアルでは、Unity エディターに触れて、このプロジェクトのアセットをインポートしました。これでプレイヤーキャラクターの作業を始める準備が整いました!
このチュートリアルでは、以下の作業を行います。
- プレイヤーキャラクターのプレハブを作成する
- キャラクターのアニメーション化を始める
- キャラクターが物理演算に反応するようにする
このチュートリアルを終えると、John Lemon の動作をコントロールするための最初のスクリプトを作成できるようになります。
1. シーンの保存
前のチュートリアルでは、Unity エディターのレイアウトについて説明しました。また、シーンがゲームオブジェクトで構成されていることも分かりましたね。ゲームオブジェクトは、ゲーム内でどのように動作するかを指定するためのコンポーネントを持っています。
それでは、ゲームオブジェクトを作成したシーンに追加しましょう!
新しいプロジェクトを作成すると、Unity は自動的に "Untitled" という空のシーンを作成します。
File > Save の順に選択する
か、Ctrl/Cmd + S を押してファイルを保存する場所を選択します。すでに Scenes というフォルダーがあるので、その中にこのシーンを "MainScene" として保存しましょう。
Project ウィンドウに MainScene というシーンアセットが作成されているのがわかります。
これで、作業するシーンができました。チュートリアルの残りの部分では、このシーンを使用します。変更を保存するには、Ctrl/Cmd + S を定期的に押すことを忘れないように!
2. キャラクターモデルの追加
前のチュートリアルでは、このゲームを作成するために必要なすべてのアセットをインポートしました。最初に使うアセットは 3Dモデル です。
3D ゲームで目にするもののほとんどは、キャラクターや環境、小道具などのモデルです。これらは通常、Unity の外部で作成され、ゲームを作るためにインポートされ、機能が追加されます。これらのモデルを使うには、ゲームオブジェクトとして追加する必要があります(これをモデルの インスタンス を作成すると言います)。
プレイヤーキャラクターの John Lemon を追加してみましょう。
1.Project ウィンドウで、 Assets > Models > Characters フォルダーに移動し、 JohnLemon というモデルを探します。
2.Project ウィンドウから シーンビューにモデルをドラッグします。これにより、モデルを配置する場所を正確に選択することができます。(モデルをヒエラルキーにドラッグして、デフォルトの位置にゲームオブジェクトを作成することもできます)。
3.カーソルをシーンビューに合わせて、 F ボタンを押してフォーカスを合わせます。
これで、シーン内にプレイヤーのキャラクターが表示されるはずです。また、先ほどインスタンス化したゲームオブジェクトの情報を Inspector(インスペクター) で確認することもできます。現在、インスペクターには 2 つのコンポーネントがあります。
- Transform コンポーネント:シーン内のオブジェクトの位置やサイズを持つ
Animator コンポーネント:オブジェクトをアニメーション化できる
しかし、このキャラクターはそれらの機能だけではありません。例えば、シーンビューでプレイヤーキャラクターが表示されますが、これらのコンポーネントにはどちらもその要因となるものがありません。
4.Hierarchy ウィンドウで、JohnLemon のゲームオブジェクトを見つけます。
ゲームオブジェクトの名前の横に矢印が表示されていますが、これはゲームオブジェクトは子を持つことを意味します。
5.矢印をクリックして JohnLemon を展開し、その子要素を参照してください。
このゲームオブジェクトは、JohnLemon というゲームオブジェクトと Root というゲームオブジェクトの 2 つの子を持ちます。JohnLemon という子ゲームオブジェクトを選択します。
このゲームオブジェクトには、Skinned Mesh Renderer (スキンメッシュレンダラー)と呼ばれるコンポーネントがあります。これにより、キャラクターを見ることができるようになります。
モデルは三角形のメッシュで構成されており、メッシュレンダラーがそのメッシュを "レンダリング" するので、それを見ることができます。スキンメッシュレンダラーは、モデルのすべてのボーン情報(位置/回転)に基づいてメッシュの形状を変更することができる特殊なタイプのメッシュレンダラーです。これらのボーンはモデルの子ゲームオブジェクトです。JohnLemon のボーンはすべて Root ゲームオブジェクト
の子です。
6.ヒエラルキーで、 Root ゲームオブジェクトを選択します。Alt キー(Windows)または Option キー(MacOS)を押しながら、その名前の左側にある矢印をクリックして、すべての子ゲームオブジェクトを展開します。
これらのゲームオブジェクトはそれぞれ JohnLemon の身体の一部を表しています。
7.再生モードに移行するには、ツールバーの 再生 ボタンをクリックします。
8.ヒエラルキーで、 LeftForeArm というゲームオブジェクトを選択します。Transform コンポーネントで、 Rotation フィールドを見つけ、 Y 値を 90に設定します。
シーンビューでは、JohnLemon の左腕が 90 度に曲がっているのが見えるはずです。これは基本的に JohnLemon をアニメーションさせる方法です。キャラクターの親のゲームオブジェクトの Animator コンポーネントは、Transform コンポーネントでゲームオブジェクトすべてのボーンの回転値を変更します。これらの変更はキャラクターをアニメーション化するために同時に行います。
9.もう一度再生ボタンを押して再生モードを終了します。再生モード中に行った変更は、終了時には保存されないことにご注意ください。
10.Alt キー(Windows)または Option キー(MacOS)を押しながら、JohnLemon の親ゲームオブジェクトの横にある折り込み矢印をクリックして、すべてのゲームオブジェクトを再度折りたたみます。
キャラクターの作成作業に踏み込む前に、 プレハブ およびプレハブがどのようにゲームの作成に役立つのかをご覧ください。
3. プレハブとは何か?
プレハブは設定されているコンポーネントを持つゲームオブジェクトまたはゲームオブジェクトの集まりを表す特殊なタイプのアセットです。それらは同じものを簡単にインスタンス化するためのプループリントのようなものです。プレハブの各インスタンスはプレハブアセットにリンクされているので、アセットを変更すると、すべてのシーンでプレハブの全バージョンが変更されます。
プロジェクトでの最初の使用目的は、キャラクターをプレハブにすることです。つまり、ゲームの複数レベルを作成する場合、新しいプレハブをインスタンス化するだけで、レベルごとに JohnLemon を作り直す必要はないのです。
プレハブは、Hierarchy ウィンドウで青い名前とアイコンで識別できます。
でもちょっと待ってください!JohnLemon のゲームオブジェクトは青い名前と青いキューブのアイコンを持っていますが、キューブの上には小さな白い紙があります。JohnLemon のゲームオブジェクトはすでにプレハブですか?
それに近いものがあります。Unity では、モデルは読み取り専用のプレハブのように機能します。それらは、そのモデルのインスタンスを作成するためのブループリントですが、ブループリント自体は変更できません。
4. キャラクターをプレハブ化する
このプレハブで内容を変えられるようにする必要があるので、調整できるものを新しく作ってみましょう。
1.Hierarchy からゲームオブジェクトを Project ウィンドウ の Assets > Prefabs の順に選択しフォルダにドラッグします。オリジナルのプレハブを作成するか、プレハブのバリアントを作成するかを問うダイアログボックスが表示され、 Original Prefab を選択します。
このようにしてゲームオブジェクトをドラッグすると、ドラッグしたフォルダに関係なくプレハブになります。プロジェクトを整理整頓するには、Prefabs フォルダにすべてのプレハブを格納しておくと便利です。
2.これで JohnLemon のプレハブが作成されました。そのプレハブに加えた変更は、シーン内の JohnLemon のプレハブのインスタンスに反映されます。プレハブに変更を加えるには、Prefab モードで編集するためにプレハブを開く必要があります。その前に、Ctrl + S(Windows)か Cmd + S(macOS)を押してシーンを保存します。
これで、JohnLemon のプレハブを開くことができます!
3.Inspector ウィンドウで、 Open Prefab ボタンをクリックします。
Unity エディターが Prefab モードになります。このモードは、以前に編集していたシーンから移動し、プレハブだけの一時的なシーンに移動します。シーンビューはわずかに変更されました。上部には、左側に Scenes | JohnLemon と書かれた新しいバーがあり、右側には Auto Save と書かれたチェックボックスがあります。
Scenes | JohnLemon は Prefab モードで編集中のプレハブのパンくずリストです。この場合、JohnLemon のプレハブを編集しているだけで、ここから戻ると編集していたシーンに戻ってしまいます。
4.Auto Save チェックボックスを無効にします(有効にすると動作が遅くなります)。Save ボタンが表示されるので、プレハブに加えた変更を手動で保存できます。
5.Hierarchy ウィンドウには、上部に新しいバーが追加されました。
左側には、パンくずリストの階層で 1 つ前の手順に戻ることができる矢印があります。ここで矢印をクリックすると MainScene に戻ります。
この 3D Beginner プロジェクトでは、プレハブを編集します。 大抵の場合は、Prefab モードへ入ることでこれを行うことができます。シーン内のゲームオブジェクトの編集とプレハブの編集の切り替えに慣れることが、Unity を使う上での基本です。
これで、JohnLemon のプレハブをアニメーション化して最初の変更を行う準備ができました。
5. キャラクターのアニメーション化
プレイヤーキャラクターは、このゲームでは 2 つの異なるアニメーション(プレイヤーが動いている状態の歩行アニメーションと休止状態のアイドルアニメーション)を持つことになります。
JohnLemon のゲームオブジェクトを選択し、 Inspector でその Animator コンポーネントを見てみましょう。最初のプロパティは Controllerと呼ばれるものです。これは、JohnLemon を動かすために使用するアニメーターコントローラーと呼ばれるアセットタイプへの参照を取得します。
アニメーターコントローラには ステートマシン が含まれていて、Animator コンポーネントが任意の時間に任意の階層へどんなアニメーションを設定すべきかを決定します。このアニメーションは、アニメーターコントローラーに設定されているアニメーションクリップに基づいています。
6. アニメーターコントローラーを作成しよう
まずはアニメーターコントローラーを作りましょう。
1.Project ウィンドウで、 Assets > Animation > Animators フォルダを探します。それを右クリックして、 Create > Animator Controller の順に選択します。
2.アニメーターコントローラーを作成したら、名前を "JohnLemon" にします。ダブルクリックして Animator ウィンドウで編集するためにそれを開きます。
Animator ウィンドウには、2 つのメインセクションがあります。
- 左側にある Animator Layers と Animator Parameters を編集するためのパネル
- 右側にステートマシン自体を表示するエリア
3.Animator ウィンドウの左上にある Parameters のタブをクリックします。
アニメーターコントローラーのステートマシンは、 Animator Parameters の現在の値に基づいて決定を行います。これらのアニメーターパラメーターはスクリプトで設定された値を持っています。キャラクターが再生しているアニメーションに影響を与えることができる独立変数ごとに 1 つのパラメータが必要です。
JohnLemon は、休止状態のアイドルアニメーションと、動いている状態の歩行アニメーションの 2 つのアニメーションを持つことになります。つまり、動いている状態と休止状態があるということです。
パラメーターには次の 4 種類があります。
- float パラメーターは、浮動小数点変数(小数点以下の桁数を持つ数値)の値を持ちます。
- int パラメーターは、整数(小数点以下が含まれない数値)の値を指定します。
- bool パラメーターには、boolean 型 (true(真)またはfalse(偽)の値を指定します。
- trigger パラメーターは、値を保持しない特別なタイプのパラメーターです。これにより、あるアニメーションから別のアニメーションへと変わります。
この場合、キャラクターが歩いているか休止しているかのどちらかであることがわかっているので、 bool パラメーターが最も理にかなっています。
4.+ ボタンをクリックし、ドロップダウンメニューから Bool を選択して、アニメーターの新しい Bool 型のパラメーターを作成します。
5.新しいアニメーターパラメーターを選択し、名前を "IsWalking" にします。スペルと大文字を正確に書くことが重要です。その理由は、次のチュートリアルで最初のスクリプトを書くときに理解できるでしょう。
IsWalking パラメータの名前の右側には、無効化したチェックボックスがあります。
これはパラメーターのデフォルト値です。プレイヤーの入力がない場合、キャラクターは休止した状態になるため IsWalking は false に設定する必要があります。つまり、ここでは何も変える必要がないということです。
7. アニメーションの設定
これで再生するアニメーションを決定する方法ができましたが、まだアニメーションの準備ができていません。さっそく設定してみましょう。
1.Project ウィンドウで、 Assets > Animation > Animation ウィンドウの順に移動します。
現在、アニメーションにはどのように見えるかを示すアイコンが表示されています。ただし、この場合は、リストビューでアセットを表示する方が簡単です。Project ウィンドウの右下にあるスライダーを見つけ、左端までドラッグします。
2.5 つのモデルが表示されるはずですが、そのうちの 2 つは John@で始まるものです。この命名規則により、これらが JohnLemon のアニメーションであることがわかります。
John@Idle と John@Walk の両方を展開すると、それらのサブアセットが表示されます。
サブアセットには、親のゲームオブジェクト(モデルはゲームオブジェクトとしてインスタンス化されることを忘れないように)の直下の子のメッシュとアニメーションが表示されます。 これらのモデルについて、アニメーションはそれぞれ Idle(休止)と Walk (歩行)になります。
3.これらのアニメーションをアニメーターコントローラで使用するには、Project ウィンドウから Animator ウィンドウにドラッグします。Idle から始めましょう。
4.アニメーションは、アニメーターコントローラ内の Animator Statesに存在します。アイドル(休止)とウォーク(歩行)のアニメーションをドラッグすると、アニメーターコントローラーはそれらを含む 2 つの状態を作成し、それらのアニメーションにちなんだ名前を付けました。
アニメーターステートは、アニメーターコントローラーに含まれるステートマシンの一部です。ステートマシンには、どの状態が現在の状態であるかを決定するロジックが含まれています。次に、現在の状態によって再生されるアニメーションが決まります。
デフォルトの状態は オレンジ色で表示されます。この場合、最初にドラッグしたのでデフォルトの状態は Idle になっています。デフォルトの状態は、状態を右クリックして Set As Layer Default State を選択することで変更できます。
ステートマシンには 2 つの状態がありますが、どの状態を再生するかを定義するロジックはありません。現在のところ、ステートマシンはデフォルトの状態で起動し、変更されることはないので、JohnLemon は常にアイドル(休止)状態になります。ロジックを追加するには、 アニメーターの遷移(Transition) を作成する必要があります。
8. アニメーターの遷移を作成する
アニメーターの遷移を作成するには:
1. アイドル状態を右クリックして、 Make Transition を選択します。この操作で遷移が作成され、作成された遷移はマウスカーソルに従って動きます。
遷移の作成を完了するには、Walk ステートをクリックします。
2.キャラクターは、歩行からアイドル状態に戻ることができる必要があるので、このプロセスを繰り返して、Walk(歩行)から Idle (休止)への遷移を作成します。
ステートマシンは以下のようになるはずです。
3.ステートマシンを使用すると 2 つのアニメーションの間で遷移を行えますが、いつ遷移するかはまだわかりません。IsWalking パラメーターを作成したことを覚えていますか?これは、ステートマシンがアニメーションを変更するか、そのままの状態を維持するかを決定するために使用します。
接続している矢印線をクリックして、 Idle(休止)から Walk(歩行) 状態への遷移を選択します。
4.Inspector で、この遷移の設定を確認します。最初に変更する必要があるのは、 Has Exit Time のチェックボックスです。
Has Exit Time が true(チェックボックスが有効)の場合、一定の時間が経過した後、自動的に遷移が行われ、ステートマシンは次の状態を再生します。このゲームでは遷移のタイミングをコントロールすることが重要なので、 Has Exit Time のチェックボックスを 無効 にしましょう。
Inspector ウィンドウのさらに下には、"遷移が有効であるためには、少なくとも 1 つの条件または Exit Time が必要であるという警告が表示され、それ以外の場合は無視されます。 "Has Exit Time のチェックボックスを無効にしただけなので、今のところこの遷移を行う理由はありません。条件 を追加して遷移する理由を与える必要があります。
9. 遷移条件の追加
遷移に条件を追加するには:
1. (現在は空の)条件リストの下にある + ボタンをクリックします。
2.Idle(休止)から Walk(歩行)への遷移は、キャラクターが歩いているとき、つまり IsWalking が true のときに必要です。
作成されるデフォルトの条件は、実際にはここで必要なものだけです。IsWalking が true の場合、JohnLemon は Idle(休止)から Walk(歩行)に遷移する必要があります。何も変更する必要はありません!
次は Walk(歩行)から Idle(休止)への遷移を設定します。この遷移には、同様の要件があります。
3.アニメーターウィンドウで、 Walk(歩行)から Idle(休止) 状態への遷移を選択します。Has Exit Time チェックボックス を無効 にします。これまでのように、一定時間経過した後ステートを切り替えたくないので、ステートを切り替えたい時にだけ遷移が起こるようにします。
4.これで、Has Exit Time チェックボックスが無効になったので、別の条件を作成する必要があります。
この条件は IsWalking にもチェックする必要がありますが、今回は値を false に設定します。キャラクターが休止状態の場合は、Walk(歩行)から Idle(休止)に遷移します。
これでアニメーターコントローラーの完成です!
10. アニメーターコントローラーを JohnLemon のプレハブに割り当てます。
JohnLemon のプレハブに、これが使用するアニメーターコントローラーであることを伝える必要があります。
1.Project ウィンドウで、 Assets > Animation > Animators の順に移動し、JohnLemon のアニメーターコントローラーを見つけます。
2.Hierarchy で JohnLemon のゲームオブジェクトを選択してから、Inspector の Animator コンポーネントの Controller プロパティにアニメーターコントローラーをドラッグします。これは非常に重要なステップです。 これがないと JohnLemon は動けません。
3.Scene ウィンドウの右上にある Save ボタンをクリックします(これを行うには、Scene タブを選択する必要がある場合があります)。
これで、JohnLemon のプレハブのすべてのインスタンスが更新され、変更が反映されました。
11. キャラクターが物理演算に反応するようにします
キャラクターは、お化け屋敷の中にある様々な部屋や廊下を進み探索していくようになります。彼はゴーストではないので、壁を通り抜けられないようにすることが重要です!
そのためには、JohnLemon のプレハブが 物理演算 に反応することを確認します。
1.Prefab モードで編集するために JohnLemon のプレハブを開きます。インスペクターには、Transform と Animator の 2 つのコンポーネントがあります。物理演算に反応するためには、キャラクターはさらに 2 つのコンポーネントを必要とします。Rigidbody と Collider です。
Rigidbody コンポーネントは、ゲームオブジェクトを物理演算システムの一部である移動可能なものとして示します。キャラクターを動かせるようにしたいし、壁にぶつかるようにしたい(したがって物理演算システムの一部になる)ので、JohnLemon のゲームオブジェクトは Rigidbodyコンポーネントを必要とします。
2.Add Component ボタンをクリックします。
3.表示される検索バーに「Rigidbody」と入力し、表示されるオプションからこれを選択します。
これは 3D プロジェクトなので、Rigidbody2D では なく 、Rigidbody をクリックするようにしてください。誤ってコンポーネントを追加してしまった場合は、コンポーネントの右上隅にある歯車のコンポーネントコンテキストメニューを使って削除することができます。
4.これまでの JohnLemon のプレハブでの作業を保存して、何も失わないようにしてください。
5.これで JohnLemon のプレハブに Rigidbody コンポーネントをアタッチしたので、重力などの物理効果に反応します。再生モードにして、実際の動作を見てみましょう。Scene ビューの上部にある Scenes をクリックして MainScene に戻り、ツールバーの Play ボタンを押します。
うーん、ちょっと違いますね。キャラクターは少しだけ落ちてから停止してしまいますから。もう一度再生ボタンを押して再生モードを終了します。
これはアニメーターが原因で発生しています。Animator コンポーネントの 3 つ目のプロパティは、 Apply Root Motion で、現在有効になっています。
12. ルートモーションとは?
アニメーションは、個別のヒエラルキーのすべてのゲームオブジェクトを移動したり、回転させたりするために使用されます。これらの動きや回転のほとんどは親に対して相対的に行われますが、ヒエラルキーの親ゲームオブジェクトには親がいないため、動きは相対的ではありません。この親ゲームオブジェクトはルートと呼ばれることもあり、その動きはルートモーションと呼ばれます。
重要な注意事項!JohnLemon のプレハブのヒエラルキーでルートと呼ばれるゲームオブジェクトは、そのスケルトンのルートを参照しており、実際のルートのゲームオブジェクトではありません。ルートのゲームオブジェクトは、Animator コンポーネントの上にあるゲームオブジェクトのいずれかになります。この場合、 JohnLemon という名前のゲームオブジェクトになります。
Apply Root Motion は Animator コンポーネントで有効になっているので、アニメーションのルートの動きはフレームごとに適用されます。アニメーターが Idle(休止)を再生していて動きがないので、アニメーターは動きを適用しません。では、どうして JohnLemon のゲームオブジェクトは動くのでしょうか?これはアニメーターの アップデートモード によるものです。
13. 更新ループとは?
ゲームは映画やテレビと似たような働きをします。つまり、画面に画像が表示され、この画像は 1 秒間に何度も変化し、動きのような錯覚を与えます。これらの画像を フレーム と呼びます。これらのフレームを画面に描画する作業を レンダリング と呼びます。映画やテレビについては、画面に表示される次の画像はあらかじめ決められていることが多いのですが、ゲームではユーザーが次に何が起こるかに対して影響力を持っているため、次の画像は大きく変化します。それぞれの画像は、ユーザーの入力に基づいて決める必要があり、この変化はほんの一瞬で起こるので、何を表示するかを決めるプログラミングもこの速度で動作します。これを 更新ループ と呼びます。
1 つのフレームが表示されるたびに、いくつものことが順番に起こります。ここで知っておく必要があるのは、カスタムコンポーネントの Update メソッドが呼び出され、新しい画像が画面にレンダリングされることだけです。これらの更新の長さは、計算やレンダリングの複雑さに応じて異なります。しかし、物理演算をすべて実行する別のループがあります。このループは更新頻度を変えないので、 FixedUpdateと呼ばれています。
Animator コンポーネントは、Update を実行するときに変更することができます。デフォルトではレンダリングに合わせてこれを実行します。これは、アニメーターが更新でキャラクターを動かしていることと、リジッドボディが FixedUpdate で同時にキャラクターを動かしていることを意味します。これが問題の原因であり、簡単に修正できます!
14. John Lemon の動きを修正する
まずはプレハブの編集に戻りましょう。
1.Inspector ウィンドウで、プレハブの Open ボタンをクリックします。
2.Animator コンポーネントに移動します。Update Mode プロパティのドロップダウンで、 Animate Physics を選択します
この変更により、アニメーターは物理演算に合わせてキャラクターを動かします。これでキャラクターを動かすための更新ループの間に競合はなくなり、物理演算に通常通りに反応するようになります。
3.アニメーションには垂直方向のルートモーションがないことは既に説明しましたが、これによって JohnLemon が何かと衝突した後に垂直方向に動くのを止めることはできません。これを止めるにはいくつか方法があります。
最もわかりやすいオプションは、Rigidbody コンポーネントの Use Gravity を無効にすることです。
この設定により、キャラクターが落ちるのを止められますが、必ずしも必要なものとは言えません。Use Gravity を無効にした場合、衝突によって下に押された場合はキャラクターが落下するか、衝突によって押し上げられた場合はキャラクターが浮いてしまう可能性があります。絶対にこうなってほしくないので、代わりに 物理演算を使ってキャラクターの動きを制約する必要があります。
4.RigidBody コンポーネントを見つけ、矢印をクリックし Constraints プロパティを展開します。
これらの Constraint プロパティは、リジッドボディが移動できる方向を制約します。
Unity の座標系がどのように機能するのかを正確に理解するために、座標系に触れてみましょう。
15. Unity の座標
Unity では、位置と方向は x、y、z で表される 3D 座標で機能し、これらを組み合わせて ベクトル になります。ベクトルについては、次のチュートリアルで詳しく説明します。シーンは、Scene ウィンドウの右上に表示されるこれらの方向についてグローバルな定義を持っています。
色付きの矢印は各軸の正の方向を表し、反対側の灰色の矢印は負の方向を表します。
- X 軸は赤
- Y 軸は緑
- z 軸は青
16. 位置と回転
シーン内に親がないゲームオブジェクトは、すべてシーンの原点(0, 0, 0)からの相対的な 位置 を持っています。親を持つ子のゲームオブジェクトはすべて、親を基準にした相対的な位置を持っています。ただし、ゲームオブジェクトは回転させることができるので、子の相対的な(またはローカル)位置は、親の回転した座標系の中になります。Rigidbody の Constraints が参照するのは、これらのローカル座標(または軸)です。
JohnLemon のゲームオブジェクトのローカル軸を見てみましょう。
1.JohnLemon のゲームオブジェクトを選択し、シーンビューを見ます。
以下のようになっていることがわかります。
- x 軸 (赤) はキャラクターの 右を指している
- y 軸(緑)は 上向き
- z 軸(青)は 前方を向いている
2.では、キャラクターはどのような制約を持つべきなのでしょうか?
キャラクターは前方と左右に移動できる必要があるので、X や Z の位置を制約する必要はありません。ただし、上下に動かないようにすることが重要で、それを止めるには、Freeze Position Y のチェックボックスを有効にします。
3.回転とは、個々の軸を中心とした回転を指します。例えば、キャラクターを x 軸を中心に回転させた場合、そのキャラクターは前後に傾いているように見えます。
z 軸を中心に回転させると、横に傾いているように見えます。
JohnLemon はこの中の方法のいずれかでも動かないはずなので、 Freeze Rotation X と Z のチェックボックス を有効にします。JohnLemon は向きを変える必要があるので、Freeze Rotation Y のチェックボックスを無効にしておきましょう。
Rigidbody コンポーネントが設定され、キャラクターが物理演算システムに反応するようになりました。しかし、実際にはまだシーンの中で物理的な存在感がなく、何もぶつかることができないし、他の何かにぶつかることもできません。シーンにおいて物理的な存在感を持たせるためには、 Collider (コライダー)が必要です。
17. コライダーを John Lemon に追加する
コライダーとは、様々なコンポーネントを網羅した一般的な用語です。コライダーは物理的な衝突を目的としたオブジェクトの形状を定義し、キャラクターが何かにぶつかったり、当てられたりすることを可能にします。様々な形状の Collider コンポーネントがありますが、JohnLemon に最もフィットする最もシンプルなものは、 Capsule Colliderです。
1.Inspector ウィンドウの Add Component ボタンをクリックし、Capsule Collider を検索します。Capsule Collider オプションを選択し、Capsule Collider 2D をクリックしないようにします。
2.現在のところ、カプセルコライダー(Capsule Collider)は実際にはモデルをカバーしていないので、ゲーム内の衝突は正常に動作しません。JohnLemon の形状に近づくように、カプセルコライダーのサイズと位置を変更する必要があります。
カプセルコライダーの Height プロパティを1.4 に、Center プロパティを(0, 0.7, 0)に変更します。
これらの変更は、コライダーの真ん中が地面からの高さの半分であることを意味し、JohnLemon の高さは約 1.4 メートルであるため、形状は彼を辛うじてカバーしています。
3.カプセルコライダーの Radius プロパティを 0.4 に変更しましたが、まだ少し広いです。
カプセルは、今の形状がちょうどいいくらいに見えますね!
これで、必要に応じて物理演算に反応し、壁にぶつかっても倒れないキャラクターができました。
18. まとめ
このチュートリアルでは、ゲームのキャラクター作成に取り組みました。あなたはプレハブの機能をほんの少し学び、JohnLemon がどんなふうに振る舞うかを決める単純なルールを作成しました。次のチュートリアルでは、最初のスクリプトを書くことで、キャラクターパズルの最後のピースを探ります。