はい、ということで、前回の記事↓で作成したキャラクターを今回はキーを押したら体が動くところまでやっていきたいと思います。
歩かせるのは別の回でやりたいと思っています。あくまでも2D Pixel Unit Makerの使い方を考える記事ということで。
動かすにはプログラムを組む必要があります。 スクリプトともよばれてます。言語はC#。
①下準備
まず下準備として、プログラムを書いてコンパイルするソフトをインストールします。僕はVisualStudioを使っています。
VisualStudioのダウンロードはこちら
インストールの仕方の詳細は調べてくださいーw余裕があったら書きます
あとは動かしたいオブジェクトのアニメーション、アニメーターの設定を確認する。
ここがまぁまぁ難しい
今回2D Pixel Unit Makerで作ったキャラクター(青頭巾)にはアニメーションとアニメーターが追加されています。
まずはそれの確認をしてみる
完全独学(みんなそうだと思いますがw)なので合ってるかわからない、何らかのヒントになればと思います。
例のキャラクターが保存されているResources > Resources > SPUM > SPUM_Unitsフォルダへ移動してキャラクターを選択してみる
するとインスペクターにごちゃごちゃと表示されますが、「Open Prefab」を開くをクリック
するとインスペクターのところにルートが出てくるので、「UnitRoot」をクリックする。正直合ってるかわからないけど一個ずつクリックしていったらこんなかにそれっぽいやつが入ってたんでw
するとインスペクターのところにUnitRootの情報が出てくる
その中のAnimatorのところにControllerってのがあるけど、これがアニメーションを動かすためのスイッチャー的なやつ
このanimatorを覗く前に
一回整理しておきたいことがある
Unityの用語として今回話す中にscript、animator、animationってのがあるけど、これらを理解する必要がある
おそらくだが以下の感じだろう※違ってたらメールでこっそり教えてくださいw
※今回キャラクターを動かす上での話です
script :animatorにフラグを立てるC#プログラムのこと
animator :キャラクターのanimationの状態をフラグで管理、
animation :実際のモーションデータ
ようはscript君が「animator君、Aが押されたら走る動きにしてくれ」ってanimatorに指示を出す。そして実際Aが押されたらanimator君がanimation君に「おい、今Aが押されたからお前行ってこい」って指示を出す感じ
だと思うw
ちなみにそれぞれのアイコンは
script
animator
animation
こんな感じだ
animatorはスイッチャー的な役割となっていて、スイッチの種類は
Float型
Int型
Bool型
Trigger型
があるけど詳細は
型 | 数値 | 使い道 |
Flort | 少数含む値 | ジャンプや走るときなど連続した動きによいか |
Int | 整数 | floatとの使い分けがわかりゃん… |
Bool | true、false | 敵に当たって死んだときなどにtrueにする…などかな。falseになるまでモーションは戻らない。 |
Trigger | ※trueのみみたいな感じ | 一度だけモーションが動く(loopの場合いは繰り返す) なのでダメージ受けた時のモーションとかかなぁ…あとは攻撃とか…わかりゃん… |
こんな感じかなぁ…実際あんまりわからないから調べながらやってるw
このスイッチをscriptでONのする方法を記述する感じ
ではここで話をいったん元に戻して
animatorをのぞいてみよう
実際に2D Pixel Unit Makerで作ってみたキャラクターのanimatorが
先ほど画像に上げた
この「AnimationNewController」ってやつだがこいつにはスイッチ情報が初期状態では入っていない
そこで、こいつをいったんクリックしてみると…assetsのところに(おそらく画面下のところ)
「AnimationNewController」があるフォルダの場所を示してくれる
この中に「NormalAnimator」っていうのがあるが、こいつにはスイッチ情報が入っている、ちなみにClipフォルダにはanimationデータが格納されている。今回はanimationから作るわけではないためここは割愛する。
ではこの 「NormalAnimator」 ファイルをクリックしてみると中身が見れるのだが
どんな感じかというと
こういう風になっている、左がスイッチ情報、フラグ的なやつ。右が遷移図といってキャラクターの状態を示す。
※左の情報が出てこない場合、タブの「Parameters」をクリックすると出てくる
※animatorやanimationのwindowが出ない場合は上のwindowタブからAnimationの項目で呼び出せます
Entryを入口に最初にオレンジ矢印が示しているオレンジボックスの「RunState」が初期状態ということ、走るのが初期?と思われるかもしれませんが、オレンジのボックスをクリックしていただくと、中身が見れます。そこには細かく設定がされていてその中にidle(待機)もあります。
白い矢印がモーションの遷移先を示す、オレンジ矢印に色が変わると、モーションが矢印の先に遷移しているということ。今回はキャラクターを動かすことが目標なので詳しくは話しませんが、自分で設定する場合はここの設定も必要。
ちなみにこの矢印やボックスは自分で作って編集することもできます。
ちなみに左のスイッチ達は口とか〇がありますがそれぞれ
図形 | 意味 |
口 | Bool型 |
〇 | Trigger型 |
数値記入 | int型、float型 |
ここの数値はテストプレーなどに使うと思われるので、scriptを組む前にanimatorとanimationの紐づけ確認が行えます。
もちろんscriptを組んだ後に遷移図を見ながら確認もできます。
この「NormalAnimator」をドラッグ&ドロップでさっき「AnimationNewController」があった場所に落とします。
これで青頭巾は 「NormalAnimator」 が適用されました。
ここまで出来たら、実際に作ったキャラクターをSceneに入れてみます。
そして、動作確認のためanimatorを別windowで表示します。中央に画面が埋め込まれている場合は、タブをつかんで動かせば別表示にできます。もしanimatorが表示されていなければ、上のwindowタブのAnimationから呼び出せます。
ゲームを再生してみます。
そしてanimationウインドウのAttackにチェックを入れてみます。すると…
動きました
Attackにチェックは入れているんですがTtiggerだからかすぐに消えてしまいます、あとキャプチャしたらマウスアイコンも移りませんでした…まぁでも動いたからいっかw
ちなみにBool型の(口のチェックボックス)Runは、おそらく設定されていないので走らせるのであれば
「RunState」の値を0~1の値で入れてみましょう。
走り方が数値によって変わります。
まぁ準備はここまでにして実際にscriptを組んでやってみよう。
②スクリプトファイル作成
Unityでスクリプトファイルを作成して。それを VisualStudio などで開きます。
プロジェクトの下に「+▼」があると思いますがそこをクリックすると…
こんなリストが出てきます。その中にある「C#Script」をクリックすると、AssetにC#ファイルが作成されます。
「NewBehaviourScript」っているファイルができてますねー
これをダブルクリックして開いてみます。ここでこのファイルを開くプログラムを選択しろとか出てきたら、自分が使っているコンパイラーを選択してください。 僕はVisualStudio で開いています。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
最初にこれが記述されています、テンプレートです
これは書き換えてしまおう
usingのところはUnityを使う上で必要な記述なので残しておく
そしてさっき準備の項目で話していた「animator君、Aが押されたら走らせてくれ」っていう文をscriptで書いてみます。
すごく簡単にif文のみで書いていますが、ほかにもいろんな書き方があります。今回はただ、動けばいいのですw
ではscriptになりますが
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class motion : MonoBehaviour
{
private Animator anim = null;
void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
if (Input.GetKey(KeyCode.A))
{
anim.SetFloat("RunState", 0.5f);
}
if (Input.GetKey(KeyCode.S))
{
anim.SetFloat("RunState", 0.0f);
}
if (Input.GetKey(KeyCode.B))
{
anim.SetTrigger("Attack");
}
}
}
簡単です
上のscriptはAが走る、Sが止まる、Bが攻撃です。
このscriptの「public class motion : MonoBehaviour」この部分
motionというのは自分で勝手につけたクラス名です。これに合わせてファイル名も同じmotionにしないとエラーが出てしまうので注意してください。
③キャラにスクリプトを適用して動かしてみる。
では先ほど書いたscriptファイルを2D Pixel Unit Makerで作ったキャラクターに適用します。
操作は簡単キャラクターのPrefabのUnitRootを開きそこに落とすだけ。
するとscriptファイルが適用される
黄色で囲った場所にちゃんと入ってますね。
ちなみに画面の下にscriptのエラーみたいなやつが黄色字で出ると思いますが(出てなきゃそれでいい)
黄色字はとりあえず無視してもよいらしいが詳しいことは解らない。一応無視しても動作はする。
ここまで来たらもう動かすだけだ
再生ボタンを押してみよう
そしてさっきscriptで書いたキーを押してみると…
動きました
これで2D Pixel Unit Makerの大まかな仕組みを理解できた
次回はこの平面エスカレーターを逆走したような動きの青頭巾を実際に移動させるscriptを作っていきます。
ではでは