プライバシーポリシー

プライバシーポリシー

公開中のゲームはこちら 【Cuel World】ほのぼのスローライフ! 見下ろし型の2Dサンドボックスゲーム! @ブログについて このブログでは、 *  Google AdSense を利用しています   - 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。   - Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「 広告 – ポリシーと規約 – Google 」をご覧ください。 *  Google アナリティクスを利用しています   -  このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。     このトラフィックデータは匿名で収集されており、個人を特定するものではありません。     この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。     この規約に関して、詳しくは ここをクリック してください。

Unityでクリックした位置に移動するプログラム


おどろき、おののき、マジ泣き、めがみちゃん!でも使った
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))


どうせマウスドラッグしているときに動けばいいんだから…



このブログの人気の投稿

「Unity」地面との当たり判定は、「ContactFilter2D」でいいんじゃない?

Unityで子オブジェクトをすべて取得したり、1つだったり