質問編集履歴

1

スクリプトを追加しました。

2024/03/21 07:12

投稿

HightGuel
HightGuel

スコア1

test CHANGED
File without changes
test CHANGED
@@ -8,12 +8,142 @@
8
8
 
9
9
  独学でプログラミングを学び始めたばかりで分からないことが多く申し訳ないのですが、どなたか解決に向けてお力を貸していただけないでしょうか。
10
10
 
11
+ ボタンはスクロールビューに配置していて、スクロールビューには縦にスワイプした時、横にスクロールしないようにプログラムしてあります。
12
+ ```
13
+ using System.Collections;
14
+ using System.Collections.Generic;
15
+ using UnityEngine;
16
+ using UnityEngine.UI;
17
+ using UnityEngine.EventSystems;
18
+
19
+ public class FoodListController : ScrollRect
20
+ {
21
+ private bool moveChack = false;
22
+
23
+ // Scroll Viewでマウスボタン押下時
24
+ public override void OnInitializePotentialDrag(PointerEventData eventData)
25
+ {
26
+ base.OnInitializePotentialDrag(eventData);
27
+ }
28
+
29
+ // マウスボタン押下中に初めてマウスを動かしたとき
30
+ public override void OnBeginDrag(PointerEventData eventData)
31
+ {
32
+ base.OnBeginDrag(eventData);
33
+ if(Mathf.Abs(eventData.delta.x)<Mathf.Abs(eventData.delta.y))
34
+ {
35
+ moveChack = false;
36
+ return;
37
+ }
38
+ moveChack = true;
39
+ }
40
+
41
+ // マウスボタン押下中にマウスを動かしている間
42
+ public override void OnDrag(PointerEventData eventData)
43
+ {
44
+ if (moveChack)
45
+ {
46
+ base.OnDrag(eventData);
47
+ }
48
+ }
49
+
50
+ // マウスボタンを離したとき
51
+ public override void OnEndDrag(PointerEventData eventData)
52
+ {
53
+ base.OnEndDrag(eventData);
54
+ }
55
+ }
56
+ ```
57
+
58
+ buttonについているItemSourceDataクラスのitemSourceDataと、画面上半分に設置したimageについているRoomCharaDataクラスのroomCharaDataをゲームコントローラーのFoodJudge_メソッドに渡したいです。
59
+
60
+ button↓
61
+ ```
62
+ using System.Collections;
63
+ using System.Collections.Generic;
64
+ using UnityEngine;
65
+ using UnityEngine.UI;
66
+ using UnityEngine.EventSystems;
67
+
68
+ public class ItemButton : MonoBehaviour ,IBeginDragHandler,IDragHandler IEndDragHandler
69
+ {
70
+ public ItemSourceData itemSourceData;
71
+
72
+ public void Awake()
73
+ {
74
+ this.gameObject.GetComponent<Image>().sprite = itemSourceData.sprite;
75
+ }
76
+
77
+ public void OnClick()
78
+ {
79
+ Debug.Log("ボタンが押された");
80
+ }
81
+
82
+ public void OnBeginDrag(PointerEventData eventData)
83
+ {
84
+ GetComponent<Image>().raycastTarget = false;
85
+ Debug.Log("ドラッグ開始");
86
+ }
87
+
88
+ public void OnEndDrag(PointerEventData eventData)
89
+ {
90
+ GetComponent<Image>().raycastTarget = true;
91
+ Debug.Log("ドラッグ終わり");
92
+ }
93
+ }
94
+ ```
95
+ image↓
96
+ ```
97
+ using System.Collections;
98
+ using System.Collections.Generic;
99
+ using UnityEngine;
100
+ using UnityEngine.EventSystems;
101
+
102
+ public class FoodDrop : MonoBehaviour,IDropHandler
103
+ {
104
+ public GameObject gameController;
105
+
106
+ public void OnDrop(PointerEventData eventData)
107
+ {
108
+ if (eventData.pointerDrag != null)
109
+ {
110
+ ItemSourceData itemSourceData= eventData.pointerDrag.gameObject.GetComponent<ItemButton>().itemSourceData;
111
+ RoomCharaData roomCharaData = gameController.GetComponent<FoodJudge>().roomCharaData;
112
+ gameController.GetComponent<FoodJudge>().FoodJudge_(roomCharaData, itemSourceData);
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ゲームコントローラー↓
119
+ ```
120
+ using System.Collections;
121
+ using System.Collections.Generic;
122
+ using UnityEngine;
123
+ using UnityEngine.UI;
124
+ using TMPro;
125
+ using DG.Tweening;
126
+
127
+ public class FoodJudge : MonoBehaviour
128
+ {
129
+ public Image PlayerIllust;
130
+ public RoomCharaData roomCharaData;
131
+
132
+ private void Awake()
133
+ {
134
+ CharaChange(roomCharaData.WELCOME_SPRITE);
135
+ }
136
+
137
+ public void CharaChange(Sprite welcome)
138
+ {
139
+ PlayerIllust.GetComponent<Image>().sprite = welcome;
140
+ }
11
141
 
12
142
 
13
- ### 該当のソースコード
143
+ public void FoodJudge_(RoomCharaData roomCharaData, ItemSourceData itemSourceData)
14
-
15
- ```
144
+ {
145
+ Debug.Log(roomCharaData + " " + itemSourceData);
16
- 特になし
146
+ }
17
147
  ```
18
148
 
19
149
  ### 試したこと・調べたこと
@@ -23,7 +153,7 @@
23
153
  - [ ] その他
24
154
 
25
155
  ##### 上記の詳細・結果
26
- Rayを使う方法が1番適していると思うのですが、いまいち仕組みが理解できません。
156
+ buttonにIDragHandlerが継承されていないのでOnBeginDrag呼び出されないのだと思いますが、継承するとスクロールビューが全く動かなくなってしまいました。Rayを使う方法が1番適していると思うのですが、いまいち仕組みが理解できません。
27
157
 
28
158
  ### 補足
29
159
  特になし