【UnityC#講座】ユニティちゃんをマウスカーソルの方向に移動させる

マウスカーソル移動/トップ

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);
}
}
}
}
view raw 26a.cs hosted with ❤ by GitHub

これでマウスカーソルのある方向に移動するはずです。
そして左クリックでジャンプ、右クリックで移動停止、中クリックで時間が止まります。
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からセットします。

マウスカーソル移動/でかカーソル画像

これではマウスカーソルが大き過ぎるので小さくします。

マウスカーソル移動/画像のInspector上部 マウスカーソル移動/画像のInspector下部

Project > Create > Assetsにあるインポートしたマウスカーソル画像のInspectorから替えます。
その下部のMax sizeから好きなサイズを選び最下部にあるApplyをクリックしてください。

マウスカーソル移動/ミニカーソル画像

これは300×300の画像を32にしたものです。

■関連記事

【UnityC#講座】見つけたら追いかけてくる監視ユニティちゃん【NavMeshAgent】

【UnityC#講座】上下キーで前進後退、左右キーで方向替える移動法【ユニティちゃん】

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

スポンサーリンク

目次に戻る