タッチしたポイントにジョイスティックが現れる実装方法
最近のスマホ3Dゲームによくあるタッチしたポイントにジョイスティックが現れる実装方法について、
kan-kikuchi.hatenablog.com
こちらのサイトで実装方法を紹介した。
しかし、もっと簡単な方法がないかを考えてみった。以下に、自分の実装方法を紹介する。
1.まず、UnityのStanddardAssetをインポートし、MobileSingleStickControlをSceneに配置する。
2.MobileSingleStickControlを親とし、Panelを一つ作成する。子GameObjectの一番上に配置、サイズ約画面サイズの半分。Joystickのbaseがあれば、JoyStickの親オブジェクトを作成する。
3.以下のScriptを作成し、Panelにアタッチし、InspectorのJoystickのGameObjectに2のJoystickをドラッグするだけ!!
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityStandardAssets.CrossPlatformInput; public class JoyStickInvisiable : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler { public GameObject JoyStick; private Vector3 m_StartPos; private Vector3 m_CurrentPos; public void OnDrag(PointerEventData eventData) { JoyStick.GetComponentInChildren<Joystick>().OnDrag(eventData); } public void OnPointerDown(PointerEventData eventData) { m_CurrentPos = Input.mousePosition; JoyStick.transform.position = m_CurrentPos; JoyStick.GetComponentInChildren<Joystick>().m_StartPos = m_CurrentPos; JoyStick.GetComponentInChildren<Joystick>().OnPointerDown(eventData); } public void OnPointerUp(PointerEventData eventData) { JoyStick.transform.position = m_StartPos; JoyStick.GetComponentInChildren<Joystick>().m_StartPos = m_StartPos; JoyStick.GetComponentInChildren<Joystick>().OnPointerUp(eventData); } // Use this for initialization void Awake () { m_StartPos = JoyStick.transform.position; } }