質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

766閲覧

Unityで他のオブジェクトが自分の前にあるか後ろにあるか取得したい

taa_subaka

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/09/18 14:23

# 実現したいこと
Unityで戦闘機ゲームを製作していて、近くの敵をロックオンするスクリプトを作ったのですが、
敵が後ろにいる場合でもロックオンされてしまいます。
自分と敵のZ座標をひいて前後を取得しようとしたのですが、方向が変わると後ろにいてもロックオンしてしまいます。
Unityで他のオブジェクトが自分の前か後ろか取得する正しい方法はあるのでしょうか...
どなたかご教授いただければ幸いです。

C#

1using UnityEngine; 2using UnityEngine.UI; 3using System.Collections; 4 5public class rader : MonoBehaviour 6{ 7 private GameObject nearObj; 8 private float searchTime = 0; 9 public GameObject homing; 10 public GameObject distext; 11 public GameObject gunsight; 12 public Vector3 enemyv3; 13 public Vector3 tfz; 14 public float gapz; 15 // Use this for initialization 16 void Start() 17 { 18 nearObj = serchTag(gameObject, "Player"); 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 searchTime += Time.deltaTime; 25 26 if (searchTime >= 0.1f) 27 { 28 nearObj = serchTag(gameObject, "enemy"); 29 30 searchTime = 0; 31 } 32 33 34 } 35 36 37 GameObject serchTag(GameObject nowObj, string tagName) 38 { 39 float tmpDis = 0; 40 float nearDis = 0; 41 GameObject targetObj = null; 42 Text dist = distext.GetComponent<Text>(); 43 44 foreach (GameObject obs in GameObject.FindGameObjectsWithTag(tagName)) 45 { 46 47 tmpDis = Vector3.Distance(obs.transform.position, nowObj.transform.position); 48 49 50 if (nearDis == 0 || nearDis > tmpDis && nearDis <= 1000) 51 { 52 nearDis = tmpDis; 53 targetObj = obs; 54 enemyv3 = obs.transform.position; 55 tfz = transform.InverseTransformDirection(enemyv3); 56 gapz = tfz.z - this.transform.position.z; 57 58 if (nearDis <= 500 && gapz <= 1) 59 { 60 homing = obs; 61 string str = nearDis.ToString("N0"); 62 dist.text = str; 63 gunsight.SetActive(true); 64 } 65 else 66 { 67 gunsight.SetActive(false); 68 } 69 70 } 71 72 } 73 74 75 76 return targetObj; 77 78 } 79}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bboydaisuke

2021/09/19 03:27

> Unityで他のオブジェクトが自分の前か後ろか取得する正しい方法 「前」とか「後ろ」をどう定義しているかわかりませんが、普通に3次元の数学を使います。「自分」のローカル座標系の「前方 (forward)」と「自分→他のオブジェクト」のベクトルの内積が正ならば「自分より前方にいる」と言えます。 何も見ないで入力したので表現など間違ってるかもしれませんが、数学を調べたり実際に作ってみたらすぐわかると思います。
taa_subaka

2021/09/19 03:40

コードの書き方を間違っていたようです。Z座標の差を求めることで取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問