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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1097閲覧

Unityのスマホタッチ操作に関して(1本目に置いた指を2本目に引っ張られたくない)

Ruchi1237

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

0クリップ

投稿2019/10/12 11:23

編集2022/01/12 10:55

前提・実現したいこと

https://teratail.com/questions/167825
こちらと全く同じ問題が出ています。

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

回答のようにScriptを変更してもエラーが起きてしまい自力で解決することができません。どなたかよろしくお願いします。

c#

1using UnityEngine; 2using UnityEngine.UI; 3using UnityEngine.EventSystems; 4using System.Collections; 5using System.Collections.Generic; 6 7/// <summary> 8/// ジョイスティック 9/// </summary> 10public class Joystick : MonoBehaviour 11{ 12 13 //実際に動くスティック部分 14 [SerializeField] 15 [Header("実際に動くスティック部分(自動設定)")] 16 private GameObject _stick = null; 17 private const string STICK_NAME = "Stick"; 18 19 //スティックが動く範囲の半径 20 [SerializeField] 21 [Header("スティックが動く範囲の半径")] 22 private float _radius = 100; 23 24 //指を離した時にスティックが中心に戻るか 25 [SerializeField] 26 [Header("指を離した時にスティックが中心に戻るか")] 27 private bool _shouldResetPosition = true; 28 29 //現在地(x,y共に値が-1~1の範囲になる) 30 [SerializeField] 31 [Header("現在地(自動更新)")] 32 private Vector2 _position = Vector2.zero; 33 public Vector2 Position { get { return _position; } } 34 35 //スティックの位置(Setter) 36 private Vector3 _stickPosition 37 { 38 set 39 { 40 _stick.transform.localPosition = value; 41 _position = new Vector2( 42 _stick.transform.localPosition.x / _radius, 43 _stick.transform.localPosition.y / _radius 44 ); 45 } 46 } 47 48 //================================================================================= 49 //初期化 50 //================================================================================= 51 52 protected void Awake() 53 { 54 Awake(); 55 Init(); 56 } 57 58 //初期化 59 private void Init() 60 { 61 //スティックを生成する必要があれば生成し、位置を中心に設定 62 CreateStickIfneeded(); 63 _stickPosition = Vector3.zero; 64 65 //スティックのImage取得(なければ追加)、タッチ判定を取られないようにraycastTargetをfalseに 66 Image stickImage = _stick.GetComponent<Image>(); 67 if (stickImage == null) 68 { 69 stickImage = _stick.AddComponent<Image>(); 70 } 71 stickImage.raycastTarget = false; 72 } 73 74 //スティックを生成する必要があれば生成 75 private void CreateStickIfneeded() 76 { 77 //スティックが設定されていれば終了 78 if (_stick != null) 79 { 80 return; 81 } 82 83 //スティックが子にあるか検索、あれば取得し終了 84 if (transform.Find(STICK_NAME) != null) 85 { 86 _stick = transform.Find(STICK_NAME).gameObject; 87 return; 88 } 89 90 //スティック生成 91 _stick = new GameObject(STICK_NAME); 92 _stick.transform.SetParent(gameObject.transform); 93 _stick.transform.localRotation = Quaternion.identity; 94 } 95 96 float _radius2 = 150;//ジョイスティックの最大半径 97 public bool OnDrag(Vector2 touch) 98 { 99 //タップ位置を画面内の座標に変換し、スティックを移動 100 Vector2 screenPos = Vector2.zero; 101 //Debug.Log(Input.mousePosition); 102 RectTransformUtility.ScreenPointToLocalPointInRectangle(GetComponent<RectTransform>(), 103 new Vector2(Input.mousePosition.x, Input.mousePosition.y), 104 null, 105 out screenPos 106 ); 107 108 _stickPosition = screenPos; 109 110 //移動場所が設定した半径を超えてる場合は制限内に抑える 111 float currentRadius = Vector3.Distance(Vector3.zero, _stick.transform.localPosition); 112 113 if (currentRadius > _radius) 114 { 115 return false; 116 } 117 118 if (currentRadius > _radius) 119 { 120 //角度計算 121 float radian = Mathf.Atan2(_stick.transform.localPosition.y, _stick.transform.localPosition.x); 122 123 //円上にXとYを設定 124 Vector3 limitedPosition = Vector3.zero; 125 limitedPosition.x = _radius * Mathf.Cos(radian); 126 limitedPosition.y = _radius * Mathf.Sin(radian); 127 128 _stickPosition = limitedPosition; 129 } 130 } 131 132 private T GetComponent<T>() 133 { 134 throw new NotImplementedException(); 135 } 136 bool isInsideBoundary; 137 138 public void Update(PointerEventData eventData) 139 { 140 Touch[] touches = Input.touches; 141 for (int i = 0; i < Input.touchCount; i++) 142 { 143 Touch touch = touches[i]; 144 if (touch.phase == TouchPhase.Began || touch.ohase == TouchPhase.Moved) 145 { 146 isInsideBoundary = OnDrag(touch.position); 147 if (isInsideBoundary) break; 148 } 149 } 150 if (!isInsideBoundary) 151 { 152 if (_shouldResetPosition) 153 { 154 //スティックを中心に戻す 155 _stickPosition = Vector3.zero; 156 } 157 } 158 } 159 160 //================================================================================= 161 //更新 162 //================================================================================= 163 164#if UNITY_EDITOR 165 //Gizmoを表示する 166 private void OnDrawGizmos() 167 { 168 //スティックが移動できる範囲をScene上に表示 169 UnityEditor.Handles.color = Color.green; 170 UnityEditor.Handles.DrawWireDisc(transform.position, transform.forward, _radius * 0.5f); 171 } 172#endif 173 174}

###エラー
'Joystick.OnDrag(Vector2)': 値を返さないコード パスがあります。(97行目)

型または名前空間の名前 'NotImplementedException' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。(134行目)
140行目、141行目、144行目、146行目ー>定義がありません系のエラー

試したこと

回答のようにソースコードを変更した。

退会済みユーザー👍を押しています

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

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

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

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

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

sakura_hana

2019/10/13 04:12

エラーの内容を質問に追記してください。
sakura_hana

2019/10/16 02:00 編集

OnDragメソッドは必ずboolを返す必要があります。 現在は「currentRadius > _radius」を満たす場合だけしかboolを返していないのでエラーになります。 if (currentRadius > _radius) の中やメソッドの最後などに return trueかfalse; すればいいのですが、ちゃんとコード読んでないしif文がおかしい気がする (if (currentRadius > _radius)が2つある。原文では片方「_radius2」にしているが理由がよく分からない) ので意味の把握と確認を行ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問