このブログについて

このブログについて

■ 公開中のゲーム ・ 16連打で18億年!? TapTapCats! 9,223,372,036,854,775,807回 タップして、別宇宙からの刺客を倒そう! あなたのタップの力が試される! 毎秒 16連打 を続けても、 約18.27億年 かかるので長生きしながら遊んでね! 記事 →  16連打で18億年!? TapTapCats! 購入 →  https://yamatogamelabs.booth.pm/items/5978628 ・ 攻略!ダークチョコモカチップフラペチーノ城! 一本道のローグライク ! モンスターを倒し、レベルアップしてアクションを獲得し、うまく使って下へと進んでいこう! HPや空腹の管理が勝利の鍵! たくさんのモンスターや謎のフロアを攻略し、ボスを倒そう! 記事 →  攻略!ダークチョコモカチップフラペチーノ城! 購入 →  https://yamatogamelabs.booth.pm/items/5698476 ・  Cuel UP! 無料で遊べるようになりました! ギリギリを攻めてジャンプ! 様々なオブジェクトを飛び乗り、かわし、上へ上へと進んでいこう! 記事 →  Cuel UP! 無料で遊べるようになりました! 購入 →  https://yamatogamelabs.booth.pm/items/5515664 ■ その他、規約など ・  ゲームのプレイ、ゲーム実況、二次創作などの規約 ・  プライバシーポリシー

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つだったり