現在2Dシューティングゲームを制作しています。
『数秒ほどプレイヤーを追跡し、一定時間後、座標を固定して、そこにレーザーを撃ち込む』というスクリプトを作りたいのですが、どうしてもProject上の座標(0, 0, 0)にレーザーが飛んで行ってしまいます。
###実現したいこと
#####【プレイヤーObjectを追跡用オブジェクトが追跡=> 一定時間後、追跡用オブジェクトの座標を固定=>追跡用オブジェクトの座標にレーザーを撃ち込む】
流れとしては、【プレイヤーObjectを追跡用オブジェクトが追跡=> 一定時間後、追跡用オブジェクトの座標を固定=>追跡用オブジェクトの座標にレーザーを撃ち込む】といった流れです。
5時間くらい奮闘したのですが、一向に解決しなかったので質問させていただきました。
###追跡用オブジェクト
C#
1using System.Collections; 2using System.Collections.Generic; 3 4using UnityEngine; 5 6public class Rader : MonoBehaviour 7{ 8 public GameObject Player; 9 public float Speed = 12f; 10 11 bool Stop = false; 12 13 14 void Start() 15 { 16 Player = GameObject.Find("Player"); 17 18 } 19 20 void Update() 21 { 22 23 if (Stop == false) 24 { 25 26 if (Player != null) 27 { 28 LockStart(); 29 Invoke("LockOn", 4f); 30 } 31 } 32 } 33 34 void LockStart() 35 { 36 this.transform.position = Vector3.MoveTowards( 37 this.transform.position, 38 new Vector3(Player.transform.position.x, 39 Player.transform.position.y), 40 Speed * Time.deltaTime 41 ); //追尾関係 42 } 43 44 void LockOn() 45 { 46 Stop = true; 47 } 48}
###レーザー砲
C#
1using System.Collections; 2using System.Collections.Generic; 3using System.Collections.Specialized; 4using System.Net; 5using System.Net.Mime; 6using System.Security.Cryptography; 7using System.Threading; 8using UnityEngine; 9 10public class Lazer : MonoBehaviour 11{ 12 float speed = 10.0f; 13 int count = 0; 14 15 public Transform TargetObj; 16 17 void Update() 18 { 19 var diff = (TargetObj.position - transform.position).normalized; 20 transform.rotation = Quaternion.FromToRotation(Vector3.up, diff); 21 count++; 22 23 if (count >= 300) 24 { 25 this.transform.localScale -= new Vector3(speed * Time.deltaTime, speed * Time.deltaTime, 0); //段々消えていく。 26 if (transform.localScale.y < 0) 27 { 28 Destroy(gameObject); 29 } 30 } 31 32 } 33}
###ボス(raderおよびlazer呼び出す側のスクリプト)
######必要ないと思われるところは省略しました
C#
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.ComponentModel.Design; 5using System.Net; 6using System.Security.Cryptography; 7using System.Security.Permissions; 8using System.Threading; 9using UnityEngine; 10 11public class boss : MonoBehaviour 12 13 public Transform firePoint6; 14 public Transform raderPoint; 15 16 public GameObject rader; 17 public GameObject lazer; 18void lockOn() 19 { 20 //ーーーーーーーーーーーーーーーーーーレーザー関連ーーーーーーーーーーーーーーーーーーーーーー// 21 Instantiate(rader, raderPoint.position, rader.transform.rotation); 22 Invoke("LaserBeam", 4f); 23 } 24 25 void LaserBeam() 26 { 27 Instantiate(lazer, firePoint6.position, lazer.transform.rotation); 28 } 29 30 31 32 private void OnTriggerEnter2D(Collider2D collision) 33 { 34 //collisionにぶつかった相手の情報が入っている:bullet,player 35 if (collision.CompareTag("Player") == true) 36 { 37 gameController.GameOver(); 38 } 39 else if (collision.CompareTag("Bullet") == true) 40 { 41 int tmpPoint = BossLife; 42 tmpPoint = tmpPoint - 1; 43 BossLife = tmpPoint; 44 45 if (BossLife == 100) 46 { 47 InvokeRepeating("lockOn", 1f, 20f); 48 49 if (BossLife == 0) 50 { 51 Instantiate(explosion, transform.position, transform.rotation); 52 Destroy(gameObject); 53 Destroy(collision.gameObject); 54 gameController.AddScore(); 55 } 56 } 57 } 58 } 59}
なんとかして座標を取得できないのでしょうか。それとも、そもそもPrefabの座標は更新できないのでしょうか?
あなたの回答
tips
プレビュー