Cube(地面用)とCube(動かす用)の2個を配置して動かすほうのCubeにCharacterControllerを追加します。
んで、コードも追加して以下のように書くと動いた。
using UnityEngine; using System.Collections; publicclass Move : MonoBehaviour { /// <summary>/// 目的地/// </summary>private Vector3 goal; /// <summary>/// キャッシュ用/// </summary>private CharacterController controller; // Use this for initializationvoid Start() { // とりあえずのゴールは現在地this.goal = transform.position; // CharacterControllerをキャッシュしとくthis.controller = this.GetComponent<CharacterController>(); } // Update is called once per framevoid Update() { // 移動速度 Vector3 velocity = Vector3.zero; if (this.controller.isGrounded) { // 地面についてたらif (Input.GetButtonDown("Fire1")) { // 現在のマウスの位置から地面にRayを飛ばしてゴールの場所を特定する var ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit info; if (Physics.Raycast(ray, out info)) { this.goal = info.point; } else { // ぶつからなかったら何もしないreturn; } } if (Vector3.Distance(goal, transform.position) < 0.5f) { // ゴールと今の場所が近かったら何もしないreturn; } // ゴールと現在地の差分を正規化して var direction = (this.goal - transform.position).normalized; // 速度をかけて velocity = direction * 5.0f; // 一応ジャンプも考慮してif (Input.GetButton("Jump")) { velocity.y = 60.0f; } else { velocity.y = 0; } } // 重力を加味して velocity.y -= 20.0f; // 移動this.controller.Move(velocity * Time.deltaTime); // 物体を目的地のほうに向ける transform.LookAt(this.goal); } }
くっそ苦労したなぁ…。Unity弱者は辛い。