今回は前回アセットストアから入手したキャラクターをキーボードのキーを押した時に移動出来るようにしてみます。
とりあえず前回までに登場した(シーンに配置した)「takasi」君を削除しておきます。(ああ無情)
そしてArmy01をシーンに配置し、名前を「masasi」君にしておきます。
CharacterControllerコンポーネントの追加と設定の変更
このプレハブにはすでにアニメーションが設定されていて一度だけ歩く動作をして、歩くアニメーションが終わったらそのまま止まります。
アニメーションに関しては次回やるのでそれまでは置いておいてください。
今回はアニメーションをせず、とりあえずキーボードを押した時にキャラクターが移動するところまで作ってみます。
キャラクターの移動機能を「masasi」君に設定します。
キャラクターの移動機能はCharacter Controllerという名前で、
キャラクター(移動させたい物)にコンポーネント(機能)を設定し、パラメータを変更することで移動に関する制限や当たり判定の範囲等を指定する事が出来るようになります。
「masasi」君を選択した状態でインスペクタの所を見てください。
「masasi」君に設定された機能一覧が見れます。
さきほど説明にあったアニメーションの機能(Animatorコンポーネント)も設定されている事が確認出来ます。
それでは以下の画像のように選択しCharacter Controllerを設定してみましょう。
Add Component→Physics→CharacterControllerを選択します。
「masasi」君のインスペクタ上にCharacter Controllerが現れました。
Slope Limitは登れる坂の最大角度
Step Offsetは登れる段差の高さ
になります。
坂のように角度がある所で登っていける場所がSlope Limitの角度までです。
Step Offsetの値の段差までは登れるようになります。それより大きい段差には移動出来ません。
Unityでは1が1mなのでStep Offsetが0.3であれば30cmの段差であれば段差を移動出来ます。
このようにパラメータを指定する事でキャラクターが超えられる段差等の設定が出来ます。
下の方にあるCenter、Radius、Heightは当たり判定の範囲(コライダ)の設定になり、
その範囲がScene画面上の緑色の範囲で表現されています。
その範囲がキャラクターと合うようにパラメータを調整します。
↓
緑色の範囲がキャラクターと重なっているのがわかると思います。
この部分が当たり判定となり、他の物と接触したかどうかの判定範囲となります。
これでキャラクター移動コンポーネントの設定が終わったので、キーボードを押した時にキャラクターが移動するスクリプトをプログラミングしていきます。
スクリプトの作り方とキャラクター移動の方法
Unityで使用出来るスクリプトはC#、JavaScriptです(Unity2017からはC#のみになっているようです)。
わたくしのブログではC#を使用していきます。
読み替えに関しては

を参照してください。
JavaScriptで記述するとインテリジェンス機能?がデフォルトで使えないのでスクリプトを組む時に検索候補が出てきません。
これは結構痛い・・・・・(^_^;)
JavaScriptも通常のJavaScriptとは少々勝手が違いますが、扱った事がある人ならば問題はないと思います。
まずはAssetsフォルダに新しいフォルダを作成し名前を「scripts」として、スクリプトファイルはそこに一括で入れていこうと思います。
上画面のようにscriptsフォルダ内で右クリック→Create→C# Scriptを選択します。
ファイル名を「Move」に変更しておきます。
スクリプトを編集するエディタは変更する事が出来ます。
上画面のようにEdit→Preferencesと選択し、
上画面のようにExternal ToolsのExternal Script Editorの所を変更します。
「Move」ファイルをダブルクリックするとスクリプト編集の為のエディタが起動します。
スクリプトをゲームオブジェクトに設定している状態ならばインスペクタのスクリプト名の部分をダブルクリックする事でもスクリプトの編集エディタを開けます。
スクリプトの作成と編集が終わったので、キャラクター移動のスクリプトを記述していきたい所ですが、まずはキャラクターを移動させる為に何をするべきかを考えていきます。
キャラクター移動機能はCharacter Controllerが持っていますので、そのCharacter Controllerの機能をスクリプトで取得します。
取得したら移動のキーが押された時にCharacter Controllerの機能を使用してキャラクターを移動させる。
という事になります。
- Character Controllerの機能の取得
- 移動キーが押されたらCharacter Controllerの機能を使って移動させる
Character Controllerの機能の取得は最初に1回だけにし、それを保存し必要になったら使うというのがいいと思います。
移動キーが押された時にCharacter Controllerの機能を使って移動させる為には、キーが押されたかどうかを逐一確認する必要があります。
これらの機能を作る前に、まずはスクリプトを作成した時に最初から記入されているスクリプトを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using UnityEngine; using System.Collections; public class Move : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } |
となっていて、C#スクリプトファイル名とpublic classとして宣言したMoveは同じ名前にします。
MoveスクリプトはMonoBehaviourクラスを継承した形で定義しています。
StartやUpdateはメソッドと言い、特定の機能をまとめた処理の事を言います。
このメソッドは自作出来ます。
が、Unity側で最初から用意されているメソッドもあり、その一部が
StartとUpdate
という名前になります。
Startはアクティブなオブジェクトが登場した時1回実行
Updateはオブジェクトが登場している間、一定時間毎に実行
でUnity側からStartとUpdateが実行されることになります。
アクティブというのはそのスクリプトが設定されているゲームオブジェクトが有効であるかどうかという事です。
シーンに設置はしてるけど使える状態にしていない場合は非アクティブです。現時点では無視しておいてください。
Character Controller機能の取得はStart内で
キーを押した時の移動に関する処理はUpdate内に記述すればいいということになります。
ではスクリプトを書いてみましょう!
と思ったんですが、長くなったのでまた次回。