Cube(地面用)とCube(動かす用)の2個を配置して動かすほうのCubeにCharacterControllerを追加します。
んで、コードも追加して以下のように書くと動いた。
using UnityEngine; using System.Collections; public class Move : MonoBehaviour { /// <summary> /// 目的地 /// </summary> private Vector3 goal; /// <summary> /// キャッシュ用 /// </summary> private CharacterController controller; // Use this for initialization void Start() { // とりあえずのゴールは現在地 this.goal = transform.position; // CharacterControllerをキャッシュしとく this.controller = this.GetComponent<CharacterController>(); } // Update is called once per frame void 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弱者は辛い。