startPos
とworldposition
の座標系が異なっているためかと思います。
下記のようにしてみてはいかがでしょうか?
C#
1using UnityEngine;
2using System.Collections;
3using System.Collections.Generic;
4
5public class Enemy : MonoBehaviour
6{
7 Vector3 startPos;
8
9 void Update()
10 {
11 Transform myTransform = this.transform;
12
13 if (Input.GetMouseButtonDown(0))
14 {
15 // 下の「worldPosition」はワールド座標なのに、こちらの「startPos」はスクリーン座標なので...
16 // startPos = Input.mousePosition;
17
18 // 「startPos」もワールド座標とし、座標系を一致させる
19 Vector3 position = Input.mousePosition;
20 position.z = 10f;
21 startPos = Camera.main.ScreenToWorldPoint(position);
22 }
23 else if (Input.GetMouseButton(0))
24 {
25 Vector3 position = Input.mousePosition;
26 position.z = 10f;
27 Vector3 worldposition = Camera.main.ScreenToWorldPoint(position);
28 Vector3 distance = worldposition - startPos;
29 myTransform.position += distance;
30 }
31 }
32
33 void OnCollisionEnter2D(Collision2D coll)
34 {
35 if (coll.gameObject.tag == "Player")
36 {
37 Destroy(gameObject);
38 }
39 }
40}
もし上記の修正だけで意図通りの動きになれば問題ないですが、スワイプで操作するという目的から察しますに、さらに下記のように修正を加える必要があるかもしれません。
C#
1using UnityEngine;
2using System.Collections;
3using System.Collections.Generic;
4
5public class Enemy : MonoBehaviour
6{
7 Vector3 startPos;
8
9 // さらに、Enemyのタップ開始時の位置も保存しておけるようにして...
10 Vector3 startEnemyPos;
11
12 void Update()
13 {
14 Transform myTransform = this.transform;
15
16 if (Input.GetMouseButtonDown(0))
17 {
18 Vector3 position = Input.mousePosition;
19 position.z = 10f;
20 startPos = Camera.main.ScreenToWorldPoint(position);
21
22 // タップ開始時に位置を保存し...
23 startEnemyPos = myTransform.position;
24 }
25 else if (Input.GetMouseButton(0))
26 {
27 Vector3 position = Input.mousePosition;
28 position.z = 10f;
29 Vector3 worldposition = Camera.main.ScreenToWorldPoint(position);
30 Vector3 distance = worldposition - startPos;
31
32 // 下記ではスワイプ中に指を止めていても移動し続けてしまうはずなので...
33 // myTransform.position += distance;
34
35 // タップ開始時のEnemyの位置に対してdistanceを加算し、それを現在のEnemyの位置とする
36 myTransform.position = startEnemyPos + distance;
37 }
38 }
39
40 void OnCollisionEnter2D(Collision2D coll)
41 {
42 if (coll.gameObject.tag == "Player")
43 {
44 Destroy(gameObject);
45 }
46 }
47}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/12 20:47