Unity2018.1.5f1
Windows10
□
今までにいくつかユニティちゃんを移動させる方法を紹介してきました。
【UnityC#講座】3D人型モデルの動かし方をユニティちゃんで学ぶ【Animator】
【UnityC#講座】ユニティちゃんをスカイリム風に操作する
【UnityC#講座】ユニティちゃんでもっとスカイリム風に操作したい 前編【カメラ】
【UnityC#講座】3D人型モデルを三人称視点で動かす【ユニティちゃん】
今回はマウスカーソルがある方向に移動するようにします。
ちなみにマウスでクリックしたところに移動させる方法は公式サイトでNavMeshAgentを使った方法が紹介されていました。
■マウスカーソルの方向に移動させる
ユニティちゃんをPlaneの上に置きRigidbodyとCapsuleColliderをつけてください。
そして以下のスクリプトをアタッチします。
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
public class MouseMove : MonoBehaviour { | |
//操作キャラの位置 | |
Vector3 playerPos; | |
//向く方向 | |
Vector3 direction; | |
Rigidbody rb; | |
//スピード | |
float speed = 0.03f; | |
//ジャンプ力 | |
float thrust = 400; | |
//移動できるかできないか | |
bool moveOn; | |
void Start() | |
{ | |
rb = GetComponent<Rigidbody>(); | |
moveOn = true; | |
} | |
void Update() | |
{ | |
//マウス右ボタンで移動できるかどうかを切り替え | |
if (Input.GetMouseButtonDown(1)) | |
{ | |
moveOn = !moveOn; | |
} | |
//マウス中ボタンで時間止める | |
if (Input.GetMouseButtonDown(2)) | |
{ | |
if (Time.timeScale != 0) | |
{ | |
Time.timeScale = 0; | |
} | |
else | |
{ | |
Time.timeScale = 1.0f; | |
} | |
} | |
} | |
void FixedUpdate() | |
{ | |
//Raycastの情報を入れる | |
RaycastHit hit; | |
if (moveOn) | |
{ | |
//カメラからマウスカーソルの位置に向けて出る | |
//仮想の線に当たった場所に移動する | |
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), | |
out hit, 100)) | |
{ | |
transform.position += transform.forward * speed; | |
} | |
//Raycastが当たった方向を操作キャラが向く | |
playerPos = this.transform.position; | |
direction = hit.point - playerPos; | |
transform.rotation = Quaternion.LookRotation(new Vector3 | |
(direction.x, 0, direction.z)); | |
//左クリックでジャンプする | |
if (Input.GetMouseButtonDown(0)) | |
{ | |
rb.AddForce(transform.up * thrust); | |
} | |
} | |
} | |
} |
これでマウスカーソルのある方向に移動するはずです。
そして左クリックでジャンプ、右クリックで移動停止、中クリックで時間が止まります。
FixiedUpdateを使っているのは、UpdateだとRigidbodyでの移動でない限りTime.timeScaleで停止させられないからです。
Raycastでカメラから出る仮想の線が当たった地点を目標にします。
なので当たるオブジェクトがないと反応しませんが、そこは下にオブジェクトを別に敷くなどして対応します。
スポンサーリンク
■マウスボタンのコード
まとめておくと便利だと思ったのでマウスボタンのコードをまとめておきます。
Input.GetMouseButton(0)
左クリックをしているとTrue。
Input.GetMouseButtonDown(0)
左クリックした瞬間だけTrue。
Input.GetMouseButtonUp(0)
左クリックしてからボタンを上げた時にTrue。
0は左ボタン、1は右ボタン、2が中ボタンです。
Input.GetAxis(“Mouse ScrollWheel”)
中ボタンのスクロールでFloatの数値をとれます。
■マウスカーソルを替える
Cursor.SetCursor(Texture2D,CursorMode)
マウスカーソルを替える方法はこちらです。
マウスカーソルの画像、画像のどこでクリックを有効にするかをスクリプトで決めます。
画像はスクリプトをアタッチしたオブジェクトのInspectorからセットします。
これではマウスカーソルが大き過ぎるので小さくします。
Project > Create > Assetsにあるインポートしたマウスカーソル画像のInspectorから替えます。
その下部のMax sizeから好きなサイズを選び最下部にあるApplyをクリックしてください。
これは300×300の画像を32にしたものです。
■関連記事
【UnityC#講座】見つけたら追いかけてくる監視ユニティちゃん【NavMeshAgent】
【UnityC#講座】上下キーで前進後退、左右キーで方向替える移動法【ユニティちゃん】
この作品はユニティちゃんライセンス条項の元に提供されています
スポンサーリンク