残すところ後1日ちょっとですが、Unity Assets がプロトタイプピング・メガバンドルセールをやっています。
このメガバンドルに3Dキャラクターを簡単に動かすアセット(Easy Character Movement)が入っています。
このアセットだけで凸凹道も、階段も上れるし、高さによってはちゃんと引っかかるように設定もできます。
無料のジョイスティックアセットを合わせれば、モバイルでもタッチでキャラクターを操作できます。
メガバンドルのアセットと無料のJoystickアセットと合わせて、操作する方法をまとめました。
1. アセットのインポート
- Easy Character Movement と Joystick をインポートします
- インポート方法はこちら
2. Joystick の準備
- Hierarchy 上の空白スペースを左クリックし、UI -> Canvas を選択して Canvas を作成します



3. 動かすキャラクターの準備
- Easy Character Movement の Demo シーンを開いて、Hierarchy 上の ECM_EthanCharacter を Projcet の Asset にドラッグアンドロップして prefab 化します。




4. Joystick と Easy Charactor Movement を繋ぐプログラム
- Project の Assets を右クリックして Create -> C# Script を選択し、OriginalCharacterController.cs(Unity 上は拡張子が表示されません)を作成します。

using UnityEngine;
using ECM.Controllers;
public class OriginalCharacterController : BaseCharacterController
{
private Joystick joystick;
void Start()
{
joystick = FindObjectOfType<Joystick>();
}
protected override void HandleInput()
{
moveDirection = new Vector3
{
x = joystick.Horizontal,
z = joystick.Vertical
};
}
}
5. Ethan にプログラムを設定
- prefab 化した ECM_EthanCharacter についている EthanCharacterController を削除します。


6. 実行して Ethan を Joystick で動かす
7. これでは物足りない人はこちら
先ほど作ったプログラムをこちらに更新して実行します。
- HandleInput にジャンプとしゃがむ動作を入れています。
- Animate メソッドを追加して、移動時などにアニメーションするようにしています。
using UnityEngine;
using ECM.Controllers;
public class OriginalCharacterController : BaseCharacterController
{
private Joystick joystick;
void Start()
{
joystick = FindObjectOfType<Joystick>();
}
protected override void HandleInput()
{
moveDirection = new Vector3
{
x = joystick.Horizontal,
z = joystick.Vertical
};
jump = Input.GetKey(KeyCode.J);
crouch = Input.GetKey(KeyCode.C);
}
protected override void Animate()
{
if (animator == null) return;
var move = transform.InverseTransformDirection(moveDirection);
var forwardAmount = move.z;
animator.SetFloat("Forward", forwardAmount, 0.1f, Time.deltaTime);
animator.SetFloat("Turn", Mathf.Atan2(move.x, move.z), 0.1f, Time.deltaTime);
animator.SetBool("OnGround", movement.isGrounded);
animator.SetBool("Crouch", isCrouching);
if (!movement.isGrounded)
animator.SetFloat("Jump", movement.velocity.y, 0.1f, Time.deltaTime);
var runCycle = Mathf.Repeat(animator.GetCurrentAnimatorStateInfo(0).normalizedTime + 0.2f, 1.0f);
var jumpLeg = (runCycle < 0.5f ? 1.0f : -1.0f) * forwardAmount;
if (movement.isGrounded)
animator.SetFloat("JumpLeg", jumpLeg);
}
}
こんな感じで動きます。ちゃんと Joystick の位置に応じて歩いたり走ったりしていますね。
キーボードのJキーを押すことでジャンプもできます。