3つの方法がある。
Transformコンポーネント
物理演算(重力)を無視して、位置、回転、大きさを変更できる。
フレーム毎に呼ばれる Update()で使うと良い。
例)
transform.positon = new Vector3(1, 2, 3);
transform.localPosition = new Vector3(1, 2, 3);
transform.Rotelte(new Vector3(0, 0, 10);
transform.localScale *= 3;
Rigidbodyコンポーネント
力、回転、加速度を加え、物理演算を行い動かす。
入力に関係ない処理は、物理演算毎に呼ばれる FixedUpdate()で使うと良い。
例)
var rigidbody = GetComponent<Rigidbody>();
rigidbody.MovePosition(new Vector(1, 2, 3));
rigidbody.AddForce(transform.forward * 100);
rigidbody.velocity = new Vector3(10, 0, 0);
CharacterControllerコンポーネント
接地、衝突(当たり)判定もできるキャラクターを扱うのに適した方法。
例)
var charactorController = GetComponent<CharacterController>();
characterController.Move(new Vector3(1, 2, 3));
characterController.SimpleMove(new Vector3(1, 2, 3));
フレーム毎に呼ばれるUpdate()は、実行しているパソコンの性能によって、たくさん呼ばれたり、呼ばれなかったりします。たくさん呼ばれると速く動くし、たくさん呼ばれないと遅く動きます。どのパソコンでも同じ速さで動かすために Time.deltaTime を掛算して使います。
例)
transform.Rotelte(new Vector3(0, 0, 10 * Time.deltaTime);
PlayerInputコンポーネント
Input.GetKey() で確認する。
例)
public class PlayerScript : MonoBehaviour
{
float speed = 3.0f;
void Update()
{
// Wキー(前方移動)
if (Input.GetKey(KeyCode.W))
{
transform.position += speed * transform.forward * Time.deltaTime;
}
// Sキー(後方移動)
if (Input.GetKey(KeyCode.S))
{
transform.position -= speed * transform.forward * Time.deltaTime;
}
// Dキー(右移動)
if (Input.GetKey(KeyCode.D))
{
transform.position += speed * transform.right * Time.deltaTime;
}
// Aキー(左移動)
if (Input.GetKey(KeyCode.A))
{
transform.position -= speed * transform.right * Time.deltaTime;
}
}
}
歩く、走るなどの動きをクリップとして保存ができ、再生することで、同じ動きを何回も実行できる。
作成手順
Projectの AssetsにAnimationsフォルダを作成
Hierarchyのオブジェクトを選択
Window/Animation/Animation を選択
Animation Window で、 [Create]ボタンを押す
名前を付けて、Animationsフォルダを指定して[保存]ボタンを押す
この最初のAnimationは、常に動作するデフォルトのAnimationになる
最初は、Idolにして追加で、Jump, AttackのAnimation Clipを追加していく
Animation Controller と Animation Clip が作成される
Projectの AssetsにAnimationsフォルダに作成した、Animation Controllerをダブルクリック
エディターにてタイムライン上に動きを指定
クリップリストの ▼を押して、Create New Clipを選択すると、新しいAnimation Clipが作成できる
Animation Clip
アニメーションクリップを作成すると クリップを入れるファイル(*.anim)が作成される。
Aminator Controlerでは、Stateとして扱われる。
Animator Controller
Animator Window で、Animation Clipを State として配置される。
State間をTransitionで結んで、State同士の行き来を設定する。
キーボードを押したらTransitionを使うことをプログラムで記述できる。キャラクターがキーにより移動するときや攻撃のアクションをするときにAnimation Clipのアニメーションを付けることができる。
さらに、複数のStateをまとめてあつかうSubStateがある。複数のAnimation Clipを合成して動かせる Blend Treeがある。
トリガーの設定
Animetorの 左上の + をクリック
メニューより trigger を選択
名前を付ける
Transitionの設定
InspectorのConditionsの+をクリック
▼をクリックしてtrigger名を選択
スクリプトでトリガーを設定
private Animator _animator;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
_animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
_animator.SetTrigger("EarthRed"); //アニメーションを再生
}
}
Animatorコンポーネント
動きをさせてたいオプジェクトにアタッチされる。このコンポーネントをスクリプトから利用して、トリガーを発動できる。
【Unity】Animator機能のことはじめ
https://note.com/info_/n/n577f4f3147ec
3.5 Unity入門講座【アニメーション 後半】Mecanimの使い方
左がAnimation Controller
右が Animation Clip
Animator Window
Animation Controllerをダブルクリックすると開く
Animation エディター
Animation Clipをダブルクリックすると開く