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

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

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

解決済

8方向のスプライトを切り替えてクリックした位置にオブジェクトを移動したい。

PECTONG
PECTONG

総合スコア1

1回答

0グッド

0クリップ

141閲覧

投稿2022/12/06 10:58

前提

いつも参考にさせていただいております。
Unityでスマホ用のアクションゲームを作っています。
オブジェクトを8方向に割り当てられたスプライトを切り替えつつクリックした位置に移動させたいのですが、「スプライトを切り替える」「クリックした位置に移動する」それぞれについてはできるんですが二つを組み合わせることができません。
なにとぞお力添えをよろしくお願いします。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ▲8方向に割り当てられたスプライトを進行方向に合わせて表示したい。
  • ▲クリックした位置に移動させたい。
  • ▲動きが止まった時にアニメーションをアニメーションが開始したスプライトで停止させたい。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

C# using UnityEngine; using System.Collections; using System.Collections.Generic; [RequireComponent(typeof(BaseMortionController))] public class BaseCharacterController : MonoBehaviour { private BaseMortionController m_Character; Vector3 touchWorldPosition; private void Awake() { m_Character = GetComponent<BaseMortionController>(); } private void Update() { } private void FixedUpdate() { if (Input.GetMouseButtonDown(0)) { Vector3 touchScreenPosition = Input.mousePosition; touchScreenPosition.z = 5.0f; Camera camera = Camera.main; touchWorldPosition = camera.ScreenToWorldPoint(touchScreenPosition); float h = Input.mousePosition.x; float v = Input.mousePosition.y; m_Character.Move(h, v); } }

該当のソースコード

C# using UnityEngine; using System.Collections; public class BaseMortionController : MonoBehaviour { private Animator m_Anim; private Rigidbody2D m_Rigidbody2D; Vector3 touchWorldPosition; [SerializeField] private float move_speed = 7.0f; private void Awake() { m_Anim = GetComponent<Animator>(); m_Rigidbody2D = GetComponent<Rigidbody2D>(); } public void Move(float h_move, float v_move) { Vector3 direction = new Vector3 (h_move, v_move).normalized; m_Rigidbody2D.velocity = direction * move_speed; m_Anim.SetFloat("Direction_x", h_move); m_Anim.SetFloat("Direction_y", v_move); } ### 試したこと キー入力タイプのスクリプトにマウスタイプのスクリプトをいろいろ組み合わせてみました。 ### 補足情報(FW/ツールのバージョンなど) Unity 2021.3.14f1

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

自己解決しました。

コードを記載させていただきます。
同じような問題に直面している方々の参考になれば幸いです。

ちなみにBlendTreeを使用して方向のアニメーションを管理しています。

C#

1using UnityEngine; 2using System.Collections; 3 4public class Player : MonoBehaviour 5{ 6 7 private float speed = 8.0f; 8 private bool walkCheck; 9 private Vector2 target; 10 private Rigidbody2D rb2D; 11 private Animator m_Anim; 12 private Vector3 direction; 13 private Transform thisTransform; 14 15 void Start() 16 { 17 rb2D = GetComponent<Rigidbody2D>(); 18 m_Anim = GetComponent<Animator>(); 19 walkCheck = false; 20 m_Anim.SetBool("StopBool", true); 21 } 22 23 void Update() 24 { 25 if (Input.GetMouseButton(0)) 26 { 27 target = Camera.main.ScreenToWorldPoint(Input.mousePosition); 28 getVector(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition)); 29 walkCheck = true; 30 } 31 32 //歩いていたら歩くアニメーションの再生 33 if (walkCheck) 34 { 35 m_Anim.SetBool("StopBool", false); 36 37 float sqrRemainingDistance = (rb2D.position - target).sqrMagnitude; 38 if (sqrRemainingDistance > float.Epsilon) 39 { 40 Vector2 newPostion = Vector2.MoveTowards(rb2D.position, target, speed * Time.deltaTime); 41 rb2D.MovePosition(newPostion); 42 43 44 45       m_Anim.SetFloat("Direction_x", direction.x); 46 m_Anim.SetFloat("Direction_y", direction.y); 47 } 48 else 49 { 50 GetComponent<Rigidbody2D>().velocity = Vector2.zero; 51 m_Anim.SetBool("StopBool", true); 52 } 53 } 54 } 55 public void getVector(Vector3 from, Vector3 to) 56 { 57 direction = new Vector3(to.x - from.x, to.y - from.y, to.z - from.z); 58 } 59 void OnCollisionEnter2D(Collision2D coll) 60 { 61 GetComponent<Rigidbody2D>().velocity = Vector2.zero; 62 m_Anim.SetBool("StopBool", true); 63 } 64 65}

投稿2022/12/07 10:37

PECTONG

総合スコア1

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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