おどろき、おののき、マジ泣き、めがみちゃん!でも使った
Unityでマウスをクリックした位置にキャラクターを動かすプログラムです
ゲーム制作でよく使いそうなので、まとめておきました
あまり難しく考えず、
→ マウスクリックの位置を取得
→ 動け!
というプログラムにしました
↓以下がソースとなります
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
private Vector3 setTapPos;
private float speed = 7;
void Update()
{
// 移動する
Move();
}
// タップした位置に移動する
private void Move()
{
// ボタンを押したとき
if (Input.GetMouseButtonDown(0))
{
setTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
// ボタンを押しているとき
if (Input.GetMouseButton(0))
{
setTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
setTapPos.z = 10;// カメラとプレイヤーの距離
// Lerpで動かす
transform.position = Vector3.Lerp(transform.position, setTapPos, speed * Time.deltaTime);
}
}
}
スクリーン座標をワールド座標へ変換
マウスクリックした位置はスクリーンの座標ですが、
キャラの操作はワールド座標で動かさなければならいので
Camera.main.ScreenToWorldPoint(Input.mousePosition)
を使い、マウスの位置を取得します
これがややこしくて、
めっちゃめっちゃ時間がかかった記憶が…😢
Vector3.Lerpを使って滑らかに移動
Vector3.Lerpを使うと滑らかに移動することができるので使ってみました!
transform.position = Vector3.Lerp(transform.position, setTapPos, speed * Time.deltaTime);
transform.positionに放り込めばOK
マウスを押し続けているときも動かしたかったので
if (Input.GetMouseButton(0))
を使っています
あれ? マウスをクリックしたときのDownはなくてもよくね?
これ → if (Input.GetMouseButtonDown(0))
どうせマウスドラッグしているときに動けばいいんだから…