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

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

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

Q&A

解決済

1回答

383閲覧

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

PECTONG

総合スコア3

0グッド

0クリップ

投稿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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問