質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

受付中

Unityの2Dでプレイヤーをマウスの方向に向ける方法について

porusan0880
porusan0880

総合スコア19

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

3288閲覧

投稿2019/12/14 02:25

編集2022/01/12 10:55

Unityを勉強していて、2Dにてキャラクターをマウスカーソルの方向に向ける方法にて調べてみたところ、下記のパターンAとパターンBの2通りのやり方があるようですが、それぞれ使用用途が違うのでしょうか。
どもちらもどういう動きをしているか、イマイチまだ理解できていない状態なので教えていただけますでしょうか。

■パターンA
[PlayerControle.cs]

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControle : MonoBehaviour { public float m_speed; // Update is called once per frame private void Update() { var h = Input.GetAxis("Horizontal"); var v = Input.GetAxis("Vertical"); var velocity = new Vector3(h, v) * m_speed; transform.localPosition += velocity; transform.localPosition = Utils.ClampPosition(transform.localPosition); var pos = Camera.main.WorldToScreenPoint(transform.localPosition); var rotation = Quaternion.LookRotation(Vector3.forward, Input.mousePosition - pos); transform.localRotation = rotation; } }

[Utils.cs]

using System.Collections; using System.Collections.Generic; using UnityEngine; // 便利な関数を管理を性的クラス public static class Utils { // 移動可能な範囲 public static Vector2 m_moveLimit = new Vector2(4.15f, 3.0f); // 指定された位置を移動可能な範囲に収めた値を返す public static Vector3 ClampPosition(Vector3 position) { // Mathf.Clamp(制限したいオブジェクトの座標,座標の最小値,座標の最大値) return new Vector3( Mathf.Clamp(position.x, -m_moveLimit.x, m_moveLimit.x), Mathf.Clamp(position.y, -m_moveLimit.y, m_moveLimit.y), 0 ); } }

■パターンB
[PlayerControle.cs]

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControle : MonoBehaviour { public float m_speed; // Update is called once per frame private void Update() { var h = Input.GetAxis("Horizontal"); var v = Input.GetAxis("Vertical"); var velocity = new Vector3(h, v) * m_speed; transform.localPosition += velocity; transform.localPosition = Utils.ClampPosition(transform.localPosition); // プレイヤーのスクリーン座標を計算する var screenPos = Camera.main.WorldToScreenPoint(transform.position); // プレイヤーから見たマウスカーソルの方向を計算する var direction = Input.mousePosition - screenPos; // マウスカーソルが存在する方向の角度を取得する var angle = Utils.GetAngle(Vector3.zero, direction); // プレイヤーがマウスカーソルの方向を見るようにする var angles = transform.localEulerAngles; angles.z = angle - 90; transform.localEulerAngles = angles; } }

[Utils.cs]

using System.Collections; using System.Collections.Generic; using UnityEngine; // 便利な関数を管理を性的クラス public static class Utils { // 移動可能な範囲 public static Vector2 m_moveLimit = new Vector2(4.15f, 3.0f); // 指定された位置を移動可能な範囲に収めた値を返す public static Vector3 ClampPosition(Vector3 position) { // Mathf.Clamp(制限したいオブジェクトの座標,座標の最小値,座標の最大値) return new Vector3( Mathf.Clamp(position.x, -m_moveLimit.x, m_moveLimit.x), Mathf.Clamp(position.y, -m_moveLimit.y, m_moveLimit.y), 0 ); } public static float GetAngle(Vector2 from, Vector2 to) { // 指定された2つの一から角度を求める var dx = to.x - from.x; var dy = to.y - from.y; var rad = Mathf.Atan2(dy, dx); return rad * Mathf.Rad2Deg; } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。