広島、晴れのち晴れ

【Unity】Dynamic(Floating) Joystick の 挙動について

&NewLine;<p>スマホ向けアプリで利用されるVirtual Joystickで有名なフリーアセット<a href&equals;"https&colon;&sol;&sol;assetstore&period;unity&period;com&sol;packages&sol;tools&sol;input-management&sol;joystick-pack-107631" target&equals;"&lowbar;blank" rel&equals;"noreferrer noopener">「JOYSTICK PACK」<&sol;a>がとても使い易くて申し分ないのですが、どうしても気になった事があったので書きます。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">気になった事<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p>Dynamic Joystick もしくは Floating Joystickを選択した時、ゲーム開始時の最初のタッチでいきなり動いてしまう+条件によってはJoystickの画面が表示されない。(一度、指を離して再度画面を押すと思い通りに動く)<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>上記症状は以下の条件で発生しました。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li>Canvas のRender Modeが「Screen Space &&num;8211&semi; Camera」&lpar;Overlayだと問題なし&rpar;<&sol;li><li>Dynamic Joystick&lpar;Floating Joystick&rpar;のAxis OptionsがBoth以外だと(一番最初のタッチで)Joystickの画像が表示されない<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p>原因は一番最初に画面をタッチした時にCameraの設定が正しくされていないためだったので、以下のように修正しました。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&sol;&sol; Assets -> Joystick Pack -> Scripts -> Base -> Joystick&period;cs&NewLine;protected virtual void Start&lpar;&rpar;&NewLine;&lbrace;&NewLine; HandleRange &equals; handleRange&semi;&NewLine; DeadZone &equals; deadZone&semi;&NewLine; baseRect &equals; GetComponent&lt&semi;RectTransform>&lpar;&rpar;&semi;&NewLine; canvas &equals; GetComponentInParent&lt&semi;Canvas>&lpar;&rpar;&semi;&NewLine; if &lpar;canvas &equals;&equals; null&rpar;&NewLine; Debug&period;LogError&lpar;"The Joystick is not placed inside a canvas"&rpar;&semi;&NewLine;&NewLine; Vector2 center &equals; new Vector2&lpar;0&period;5f&comma; 0&period;5f&rpar;&semi;&NewLine; background&period;pivot &equals; center&semi;&NewLine; handle&period;anchorMin &equals; center&semi;&NewLine; handle&period;anchorMax &equals; center&semi;&NewLine; handle&period;pivot &equals; center&semi;&NewLine; handle&period;anchoredPosition &equals; Vector2&period;zero&semi;&NewLine;&NewLine; &sol;&sol; 追加部分&NewLine; cam &equals; null&semi;&NewLine; if &lpar;canvas&period;renderMode &equals;&equals; RenderMode&period;ScreenSpaceCamera&rpar;&NewLine; cam &equals; canvas&period;worldCamera&semi;&NewLine;&rcub;&NewLine;&NewLine;public void OnDrag&lpar;PointerEventData eventData&rpar;&NewLine;&lbrace;&NewLine; &sol;&ast; この部分をStart&lpar;&rpar;に移動&NewLine; cam &equals; null&semi;&NewLine; if &lpar;canvas&period;renderMode &equals;&equals; RenderMode&period;ScreenSpaceCamera&rpar;&NewLine; cam &equals; canvas&period;worldCamera&semi;&NewLine; &ast;&sol;&NewLine;&NewLine; Vector2 position &equals; RectTransformUtility&period;WorldToScreenPoint&lpar;cam&comma; background&period;position&rpar;&semi;&NewLine; Vector2 radius &equals; background&period;sizeDelta &sol; 2&semi;&NewLine; input &equals; &lpar;eventData&period;position - position&rpar; &sol; &lpar;radius &ast; canvas&period;scaleFactor&rpar;&semi;&NewLine; FormatInput&lpar;&rpar;&semi;&NewLine; HandleInput&lpar;input&period;magnitude&comma; input&period;normalized&comma; radius&comma; cam&rpar;&semi;&NewLine; handle&period;anchoredPosition &equals; input &ast; radius &ast; handleRange&semi;&NewLine;&rcub;&NewLine;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>これで一応ちゃんと動いています。<br> 気になるのは、オリジナルではなぜ毎回Cameraをnullにして再取得しているのか?です。何か意味があるのかもしれないので、そんな時はコメントアウトを外せば大丈夫。だと思います。<&sol;p>&NewLine;

モバイルバージョンを終了