###前提・実現したいこと
Unityにて、スマートフォンゲームを作成しております。
ジョイスティックをStandardAssetsのMobileSingleStickControlを使用した所
実行時にジョイスティクを移動させ、離すと、初期位置が(0.0,0.0,0.0)になっており
画面外に出てしまいます。
実行時にスティックをドラックし離しても、画面内(実行前に配置した位置)に
戻るようにしたい。
###発生している問題・エラーメッセージ
エラー警告等は出ていません。
###該当のソースコード
using System; using UnityEngine; using UnityEngine.EventSystems; namespace UnityStandardAssets.CrossPlatformInput { public class Joystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler { public enum AxisOption { // Options for which axes to use Both, // Use both OnlyHorizontal, // Only horizontal OnlyVertical // Only vertical } public int MovementRange = 100; public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input public Vector3 m_StartPos; bool m_UseX; // Toggle for using the x axis bool m_UseY; // Toggle for using the Y axis CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis; // Reference to the joystick in the cross platform input CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis; // Reference to the joystick in the cross platform input void OnEnable() { CreateVirtualAxes(); } void Start() { m_StartPos = transform.position; } void UpdateVirtualAxes(Vector3 value) { var delta = m_StartPos - value; delta.y = -delta.y; delta /= MovementRange; if (m_UseX) { m_HorizontalVirtualAxis.Update(-delta.x); } if (m_UseY) { m_VerticalVirtualAxis.Update(delta.y); } } void CreateVirtualAxes() { // set axes to use m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal); m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical); // create new axes based on axes to use if (m_UseX) { m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName); CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis); } if (m_UseY) { m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName); CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis); } } public void OnDrag(PointerEventData data) { Vector3 newPos = Vector3.zero; if (m_UseX) { int delta = (int)(data.position.x - m_StartPos.x); delta = Mathf.Clamp(delta, - MovementRange, MovementRange); newPos.x = delta; } if (m_UseY) { int delta = (int)(data.position.y - m_StartPos.y); delta = Mathf.Clamp(delta, -MovementRange, MovementRange); newPos.y = delta; } transform.position = new Vector3(m_StartPos.x + newPos.x, m_StartPos.y + newPos.y, m_StartPos.z + newPos.z); UpdateVirtualAxes(transform.position); } public void OnPointerUp(PointerEventData data) { transform.position = m_StartPos; UpdateVirtualAxes(m_StartPos); } public void OnPointerDown(PointerEventData data) { } void OnDisable() { // remove the joysticks from the cross platform input if (m_UseX) { m_HorizontalVirtualAxis.Remove(); } if (m_UseY) { m_VerticalVirtualAxis.Remove(); } } } }
###試したこと
Joystick.csを確認した所、Start()内にてジョイスティックの位置を初期位置として
m_StartPos(ドラッグを止めた際に初期位置に戻る時に使う変数)にジョイスティックの
座標を代入していますが、Debug.Logにて確認した所、Start()が呼ばれる時点では
座標が(0.0,0.0,0.0)になっています。
問題はジョイスティックを画面内に移動させて(0.0以外の座標)から実行していますが
Start()を呼ばれている時点で、代入されている(0.0,0.0,0.0)という値がどこから来ているのか
どのようにして、正しい初期位置をStart()内にて代入するかです。
###補足情報(言語/FW/ツール等のバージョンなど)
Unity 5.3.5f1
使用言語 C#
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。