Unity5: 自分で作成した人型モデルを利用する(移動)


2017.07.11: created by
[Up] Japanese English

前提として理解しておくべき知識


MakeHumanで作成した人型モデルを Unity に取り込んで、キー操作で移動させる。

自分で作成した人型モデルを、Unityに取り込んで動かす簡単な方法を説明します。

  1. Unityで新しいプロジェクトを開始します。
  2. "Mecanim" という "3D" 形式のプロジェクトを NEW しています。




  3. 人型モデル(fbx)をUnityに取り込みます
  4. Hierarchyに地面となる Planeを配置します。InspectorのTransformの からResetを選んで、Position (x,y,z)=(0,0,0)にします。
  5. GameObject -> 3D Object -> Plane
    



  6. Hierarchy に Assets/Models/AsianBoy を配置します。
  7. AsiznBoy の Inspectorに追加された CharacterController コンポーネントの Center と Height の値を変更します。
  8. Sceneウィンドウを表示している状態で、Hierarchy 内で AsianBoy を選択すると、 CharacterController の Capsel Collider が緑色の実線で表示されます。 人型キャラクタと合致するように Center と Height の値を変更します。 ここでは Center (x,y,z)=(0,0.87,0), Height = 1.7 としました。




  9. 人型キャラクタを移動させるスクリプトを作成します。
  10. Hierarchy の中の Main Camera の位置を変更します。
  11. Plane はxz平面上の平面で、原点を中心として 10x10 の大きさです。 また、AsianBoyは原点にいます。 Main Camera が少し離れ過ぎているので Plane の端である Transform Position (x,y,z)=(0,1,-5)に設定しましょう。




  12. をクリックして実行してみます。
  13. キーボードの矢印キー(↑, ↓, ←, →)または 'w, 'a', 's', 'd' キーで AsianBoy が移動します。でも空中に浮いてしまっています。




  14. Projectウィンドウの Assets/Scripts/PlayerMove を次のように変更します。
  15. Playerを動かす時に、重力による加速度を考慮するようにします。 赤い文字の部分が追加された1行です。 これで AsianBoy が Plane の端を越えて移動すると、落下するようになりました。

    PlayerMove.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerMove : MonoBehaviour {
        public float velocity = 1.3f;
        private CharacterController charController;
        void Start () {
    	charController = gameObject.GetComponent<CharacterController>();
        }
        void Update () {
    	float h = Input.GetAxis("Horizontal");
    	float v = Input.GetAxis("Vertical");
    	Vector3 moveDirection = new Vector3(h, 0, v);
    	moveDirection.y += Physics.gravity.y;
    	charController.Move(velocity * Time.deltaTime * moveDirection);
        }
    }
    
  16. Projectウィンドウの Assets/Scripts/PlayerMove をさらに次のように変更します。
  17. 足が地面に接地しているときだけ、キーボード操作で移動できるようにします。

    PlayerMove.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerMove : MonoBehaviour {
        public float velocity = 1.3f;
        private CharacterController charController;
        void Start () {
    	charController = gameObject.GetComponent<CharacterController>();
        }
        void Update () {
    	float h = Input.GetAxis("Horizontal");
    	float v = Input.GetAxis("Vertical");
    	Vector3 moveDirection =  new Vector3(0, 0, 0);;
    	if (charController.isGrounded) {
    	    moveDirection = new Vector3(h, 0, v);
    	}
    	moveDirection.y += Physics.gravity.y;
    	charController.Move(velocity * Time.deltaTime * moveDirection);
        }
    }
    
  18. Sceneを保存します。
  19. ここで説明した Unity のプロジェクトファイルはこちら Mecanim.zip

Yoshihisa Nitta

http://nw.tsuda.ac.jp/