回答編集履歴

1

コメントを受けて追記

2018/06/07 01:19

投稿

sakura_hana
sakura_hana

スコア11427

test CHANGED
@@ -13,3 +13,75 @@
13
13
  そもそもスワイプをどう取得するかは「unity スワイプ」「unity フリック」等で検索をどうぞ。
14
14
 
15
15
  一例:[Unity-フリック操作について - Qiita](https://qiita.com/pilkul/items/e8864882b3f7e59b05e3)
16
+
17
+
18
+
19
+ ---
20
+
21
+
22
+
23
+ (追記分)
24
+
25
+
26
+
27
+ 「キューブの元の位置から、タッチ位置を動かした分だけ移動」だと思うので、考え方としては
28
+
29
+ `cube.transform.position = cube.transform.position + distance;`
30
+
31
+ こうだと思います。
32
+
33
+
34
+
35
+ で、最初の回答にも書きましたがVector3.Distanceは距離(float)を取得します。
36
+
37
+ Vecor3(三次元)とfloat(一次元)は足すことは出来ないので、ここは`終了位置 - 開始位置`を使って差のベクトルを取得して、キューブの元の位置に足し算します。
38
+
39
+
40
+
41
+ なお、distanceも「タッチ開始位置から現在のタッチ位置まで」になっていなかったので修正しています。
42
+
43
+
44
+
45
+ ```C#
46
+
47
+ Vector3 startPos; //タッチ開始位置
48
+
49
+
50
+
51
+ void Update () {
52
+
53
+ if(Input.GetMouseButtonDown(0)){
54
+
55
+ //タッチ開始位置を保存
56
+
57
+ startPos = Input.mousePosition;
58
+
59
+ }else if(Input.GetMouseButton(0)){
60
+
61
+ Vector3 position = Input.mousePosition;
62
+
63
+ position.z = 10f;
64
+
65
+ Vector3 worldposition = Camera.main.ScreenToWorldPoint(position);
66
+
67
+ //「現在位置-タッチ開始位置」の差のベクトルを取る
68
+
69
+ Vector3 distance = worldposition - startPos;
70
+
71
+ cube.transform.position += distance; //元の位置に足す
72
+
73
+ }
74
+
75
+ }
76
+
77
+ ```
78
+
79
+
80
+
81
+ 「ベクトルの足し算引き算」(プログラムではなく数学の範疇)を調べてみるといいと思います。
82
+
83
+ (Unityの場合、「ベクトル」も「座標」もVector3を使うのでどっちなのか理解した上でコードを読み書きする必要あり)
84
+
85
+
86
+
87
+ 移動制限については「unity 移動制限」で検索すれば色々出て来るので都合の良い方法を探してみてください。