概要
2016/4/11 に「Easy Character Movement」がリリースされました
「Easy Character Movement」を導入すると、
Rigidbody をベースとしたキャラクターコントローラーを使用できるようになり、
動く床や回転する足場と連動する処理を簡単に実装できます
検証環境
- Unity 2017.1.1f1
- Easy Character Movement 1.4
クイックスタート
Hierarchy を右クリックして「ECM>Character」を選択します
Project ビューで「Easy Character Movement/Prefabs/Models」フォルダの
「ECM_CapsuleDummy」プレハブを、Hierarchy の「ECM_Character」にドラッグします
Hierarchy を右クリックして「3D Object>Plane」を選択します
「Plane」の Position を 0, 0, 0 にします
「Main Camera」の Position を 0, 5, -10
Rotation を 30, 0, 0 にします
この状態でゲームを再生して矢印キーやスペースキーを押すと
キャラクターが正常に動作することが確認できます
動く床と連動させる
using UnityEngine; [RequireComponent( typeof( Rigidbody ) )] public class MoveFloor : MonoBehaviour { public float m_length = 2; public Rigidbody m_rigidbody = null; private void Reset() { m_rigidbody = GetComponent<Rigidbody>(); m_rigidbody.isKinematic = true; } private void Update() { var basePos = transform.position; var y = Mathf.PingPong( Time.time, m_length ); var position = new Vector3( basePos.x, y, basePos.z ); m_rigidbody.MovePosition( position ); } }
適当に Cube オブジェクトを作成して
上記のスクリプトをアタッチしてゲームを実行すると
キャラクターが動く床に乗って移動できることが確認できます
回転する足場と連動させる
using ECM.Examples.Common; using UnityEngine; [RequireComponent( typeof( Rigidbody ) )] public class RotateFloor : MonoBehaviour { public float m_rotateSpeed = 50; public Rigidbody m_rigidbody = null; private float m_angle; private void Reset() { m_rigidbody = GetComponent<Rigidbody>(); m_rigidbody.isKinematic = true; } private void Update() { m_angle += m_rotateSpeed * Time.deltaTime; m_angle = Utils.WrapAngle( m_angle ); var rotation = Quaternion.Euler( 0, m_angle, 0 ); m_rigidbody.MoveRotation( rotation ); } }
適当に Cube オブジェクトを作成して
上記のスクリプトをアタッチしてゲームを実行すると
キャラクターが回転する足場に乗って移動できることが確認できます