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

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

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

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

Unity

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

Q&A

解決済

1回答

2781閲覧

Unity:相手の座標(Vector2)を常に知りたい!

da-ryo

総合スコア11

C#

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

Unity

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

0グッド

0クリップ

投稿2021/07/06 07:22

#現状
現在unity&VScodeにて2Dゲームを作成しています。

オブジェクトAがオブジェクトBの位置を常に把握し、その位置関係によってAはサイズを変えるというプログラムを描きたいのですが、Bの座標は一度とったらその後いっさい変化しません。

#問題部分のコード

public class bPer : MonoBehaviour { //相手Bを取得 [SerializeField] GameObject npc; void Update() { //下のnp(相手Bの座標)が問題 Vector2 np = new Vector2 (npc.transform.position.x, npc.transform.position.y); //bp(自分Aの座標)はきちんとその時の座標をしめしてくれる Vector2 bp = transform.position; //自分Aと相手Bの位置関係を把握 float xb = np.x - bp.x; float yb = np.y - bp.y; //位置関係より、相手が右にいるなら右を向き、左なら左向きに if (xb >= 0) { this.transform.localScale = new Vector2( 4, 4 ); } if (xb < 0) { this.transform.localScale = new Vector2( -4, 4 ); } }

#試したこと
Debug.Logで確認してみたところ、bpは常に(0,0)(1,3)...というように移動してもその場の値を出してくれるのですが、npの方は最初の座標(3,5)から一切変化しません。

常に座標を知り、位置関係によってX方向のサイズ(見かけ上は向き)を変化させたいです。

よろしくお願いします。

#参考サイト
オブジェクトの座標の取得と変更

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

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

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

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

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

guest

回答1

0

ベストアンサー

手元で試したところ特に問題なく動く(NPCをEditor上から移動させると座標が更新される)のですが、どういう状況だと動かないのでしょうか?
このコードだとNPCへの参照を取っているだけなので、NPCを動かす処理が別にあるならそちらもチェックされたほうが良いかもしれません

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class bPer : MonoBehaviour { 6 //相手Bを取得 7 [SerializeField] GameObject npc; 8 9 void Update() { 10 //下のnp(相手Bの座標)が問題 11 Vector2 np = new Vector2(npc.transform.position.x, npc.transform.position.y); 12 13 Debug.Log(npc.gameObject.name + "/" +np); // ここでちゃんとnpcの位置が更新されている 14 15 //bp(自分Aの座標)はきちんとその時の座標をしめしてくれる 16 Vector2 bp = transform.position; 17 18 //自分Aと相手Bの位置関係を把握 19 float xb = np.x - bp.x; 20 float yb = np.y - bp.y; 21 22 //位置関係より、相手が右にいるなら右を向き、左なら左向きに 23 if (xb >= 0) { 24 this.transform.localScale = new Vector2(4, 4); 25 } 26 27 if (xb < 0) { 28 this.transform.localScale = new Vector2(-4, 4); 29 } 30 } 31}

投稿2021/07/06 08:29

hogefugapiyo

総合スコア3302

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

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

da-ryo

2021/07/09 09:28

今試してみたところ上手く動きました! 色々いじってみて原因がよくわからないままなのが残念でしたが、コードにはミスがなくおそらく私の凡ミスのようです。 回答していただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問