質問編集履歴

3

インスペクターなどの画像を追加

2018/05/06 03:48

投稿

navesanta
navesanta

スコア198

test CHANGED
File without changes
test CHANGED
@@ -143,3 +143,7 @@
143
143
  }
144
144
 
145
145
  ```
146
+
147
+ ![イメージ説明](c2cb6eeb0a2cc4e872e66fdc91be984f.png) ![イメージ説明](8a73eb0c6b4486c195070b47864829b4.png)
148
+
149
+ ![イメージ説明](7e852d5cd66ad77e362982104ba3ce02.png)

2

コードの修正

2018/05/06 03:48

投稿

navesanta
navesanta

スコア198

test CHANGED
File without changes
test CHANGED
@@ -23,6 +23,10 @@
23
23
  色々錯誤してドラッグして移動するまでは出来たのですが上記方法が結びつきません。
24
24
 
25
25
  分かる方ヒントでも良いので教えて下さい。
26
+
27
+
28
+
29
+ ★回答をいただいた事を加味して修正しました。
26
30
 
27
31
 
28
32
 
@@ -70,6 +74,8 @@
70
74
 
71
75
  prevPos = transform.position;
72
76
 
77
+ Debug.Log("OnBeginDrag");
78
+
73
79
  }
74
80
 
75
81
 
@@ -81,6 +87,8 @@
81
87
  // ドラッグ中は位置を更新する
82
88
 
83
89
  transform.position = eventData.position;
90
+
91
+ Debug.Log("OnDrag");
84
92
 
85
93
  }
86
94
 
@@ -94,6 +102,8 @@
94
102
 
95
103
  transform.position = prevPos;
96
104
 
105
+ Debug.Log("OnEndDrag");
106
+
97
107
  }
98
108
 
99
109
 
@@ -101,6 +111,8 @@
101
111
  public void OnDrop ( PointerEventData eventData )
102
112
 
103
113
  {
114
+
115
+ Debug.Log("OnDrop");
104
116
 
105
117
  var raycastResults = new List<RaycastResult>();
106
118
 

1

コードの修正

2018/05/05 08:15

投稿

navesanta
navesanta

スコア198

test CHANGED
File without changes
test CHANGED
@@ -28,94 +28,106 @@
28
28
 
29
29
  下記スクリプトをGameObjectAにアタッチしています。
30
30
 
31
+ GameObjectBのTagをDroppableFieldにしました。
32
+
31
33
 
32
34
 
33
35
  ```ここに言語を入力
34
36
 
35
- public class Swipe : MonoBehaviour {
37
+ using System.Collections.Generic;
36
38
 
37
- private Vector3 toolPosPast;
39
+ using UnityEngine;
38
40
 
39
- private Vector3 toolPos;
41
+ using UnityEngine.EventSystems;
40
42
 
41
- private Vector3 tapPos;
43
+ using UnityEngine.UI;
42
44
 
43
45
 
44
46
 
45
- // Use this for initialization
47
+ // Imageコンポーネントを必要とする
46
48
 
47
- void Start () {
48
-
49
-
50
-
51
- }
52
-
53
-
54
-
55
- // Update is called once per frame
49
+ [RequireComponent ( typeof ( Image ) )]
56
-
57
- void Update () {
58
-
59
- swipeController();
60
-
61
-
62
-
63
- }
64
50
 
65
51
 
66
52
 
67
- private void swipeController(){
53
+ // ドラッグとドロップに関するインターフェースを実装する
68
54
 
69
- if(Input.GetMouseButtonDown(0)){
55
+ public class DragAndDrop : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IDropHandler
70
56
 
71
- toolPosPast = this.transform.position;
57
+ {
72
58
 
73
- Debug.Log(toolPosPast);
59
+ // ドラッグ前の位置
74
60
 
75
- Debug.Log("Down");
61
+ private Vector2 prevPos;
76
62
 
77
- toolPos = this.transform.position;
78
63
 
79
- tapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
80
64
 
81
- }
65
+ public void OnBeginDrag ( PointerEventData eventData )
82
66
 
83
- if(Input.GetMouseButton(0)){
67
+ {
84
68
 
85
- Debug.Log("Drag");
69
+ // ドラッグ前の位置を記憶しておく
86
70
 
87
- Vector3 prePos = this.transform.position;
71
+ prevPos = transform.position;
88
72
 
89
- Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition)- tapPos;
73
+ }
90
74
 
91
- if(Input.touchSupported){
92
75
 
93
- diff = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position) -tapPos;
94
76
 
95
- }
77
+ public void OnDrag ( PointerEventData eventData )
96
78
 
97
- diff.z = 0.0f;
79
+ {
98
80
 
99
- this.transform.position = toolPos + diff;
81
+ // ドラッグ中は位置を更新する
100
82
 
101
- }
83
+ transform.position = eventData.position;
102
84
 
103
- if(Input.GetMouseButtonUp(0)){
85
+ }
104
86
 
105
- Debug.Log("Up");
106
87
 
107
- toolPos = toolPosPast;
108
88
 
109
- // tapPos = Vector3.zero;
89
+ public void OnEndDrag ( PointerEventData eventData )
110
90
 
111
- tapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
91
+ {
112
92
 
113
- }
93
+ // ドラッグ前の位置に戻す
114
94
 
95
+ transform.position = prevPos;
96
+
115
- }
97
+ }
98
+
99
+
100
+
101
+ public void OnDrop ( PointerEventData eventData )
102
+
103
+ {
104
+
105
+ var raycastResults = new List<RaycastResult>();
106
+
107
+ EventSystem.current.RaycastAll ( eventData, raycastResults );
108
+
109
+
110
+
111
+ foreach ( var hit in raycastResults )
112
+
113
+ {
114
+
115
+ // もし DroppableField の上なら、その位置に固定する
116
+
117
+ if ( hit.gameObject.CompareTag ( "DroppableField" ) )
118
+
119
+ {
120
+
121
+ transform.position = hit.gameObject.transform.position;
122
+
123
+ this.enabled = false;
124
+
125
+ }
126
+
127
+ }
128
+
129
+ }
116
130
 
117
131
  }
118
132
 
119
-
120
-
121
133
  ```