最初のコードを出来るだけ崩さず指定した方向に進むよう修正すると
C#
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4
5public class playerbullet : MonoBehaviour
6{
7 Vector2 vec;
8 public float speeds = 2;
9
10 void Start()
11 {
12
13 }
14
15 void Update()
16 {
17 if (Input.GetMouseButtonDown(0))
18 {
19 Vector3 mousePositionVec3 = Input.mousePosition;
20 mousePositionVec3.z = -Camera.main.transform.position.z;
21 vec = Camera.main.ScreenToWorldPoint(mousePositionVec3);
22 // Debug.Log(vec);
23 }
24
25 //vecに2次元座標の値を代入し、その方向に向かってMoveTowardを使て飛ばそうとしています。
26 transform.position = Vector2.MoveTowards(transform.position, new Vector2(vec.x, vec.y), speeds * Time.deltaTime);
27
28 //transform.Translate(0.2f, 0, 0);
29 //上記のスクリプトが右方向にまっすぐ進む要因です。取り除くと弾は発射口から動かなくなります。
30
31 if (transform.position.x > 10)
32 {
33 Destroy(gameObject);
34 }
35 }
36}
これでクリックした方向に弾は向かっていくのではないでしょうか。
ただこれだと指定した位置に移動するだけなので近くをクリックするとそこで止まってしまいますし、途中で方向転換も可能です。
次にクリック角度方向に真っすぐ進み、進行中は入力を受け付けない作りにすると
C#
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4
5public class playerbullet : MonoBehaviour
6{
7 Vector2 vec;
8 private float speeds = 0;
9 private bool isBulletStart;
10
11 void Start()
12 {
13
14 }
15
16 void Update()
17 {
18 if (Input.GetMouseButtonDown(0) && !isBulletStart)
19 {
20 Vector3 mousePositionVec3 = Input.mousePosition;
21 mousePositionVec3.z = -Camera.main.transform.position.z;
22
23 vec = Camera.main.ScreenToWorldPoint(mousePositionVec3);
24
25 float zRotation = Mathf.Atan2(vec.y - transform.position.y, vec.x - transform.position.x) * Mathf.Rad2Deg;
26 transform.rotation = Quaternion.Euler(0f, 0f, zRotation);
27 speeds = 0.2f;
28 isBulletStart = true;
29 }
30
31 transform.Translate(Vector2.right * speeds);
32
33 if (transform.position.x > 10 || transform.position.y > 10)
34 {
35 isBulletStart = false;
36 Destroy(gameObject);
37 }
38 }
39}
こちらの方が想定している動きをしてくれるかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/29 12:17
2017/09/29 14:15