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

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

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

Q&A

解決済

1回答

882閲覧

キャラクターと"接触したオブジェクト"の情報を変数として取得したい

ITATI

総合スコア14

0グッド

0クリップ

投稿2018/05/23 14:36

編集2019/02/23 11:46

キャラクターが接触した長方形オブジェクトの
1.オブジェクト名
2.オブジェクトの幅、高さ
3.オブジェクトの座標
を取得したいと考えています。
この変数は、ロックマン仕様のはしごを再現する為に利用します。

該当のソースコード

C# キャラクターのスクリプト。オブジェクト接触判定部分

1void OnTriggerStay2D(Collider2D other) 2 { 3 if (other.gameObject.tag == "Ladder"){ladder = true;}//はしごオブジェクトに接触するとtrue 4 else if (other.gameObject.tag == "Stair"){stair = true;}//階段オブジェクトに接触するとtrue 5 6    objectName = other.name; 7 float width = gameObject.GetComponent<SpriteRenderer>().bounds.size.x; 8 print("width: " + width); 9 10 }

###問題点 試したこと
1.オブジェクト名

objectName = other.name;

"stringを暗黙的にstring[]に変換できません"というエラーが返ってきます。

2.オブジェクトの幅

float width = gameObject.GetComponent<SpriteRenderer>().bounds.size.x

取得できる幅情報は、キャラクターのスプライトサイズであり、目的とする長方形オブジェクトの幅ではありません。

3.オブジェクトの座標

Vector3 tmp = GameObject.Find(/*オブジェクト名*/).transform.position; GameObject.Find(/*オブジェクト名*/).transform.position = new Vector3(tmp.x + 100, tmp.y, tmp.z);

の様なやり方があるようですが、様々なエラーが出てうまく記述が出来ませんでした。

何か解決策があればご教示お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

1. オブジェクト名

エラーの通り、stirng[]型のobjectNameに対してstring型のother.nameは代入できません。
代入するのであれば例えば、

CSharp

1objectName[0] = other.name;

などとする必要があります。

2. オブジェクトの幅

これはotherからとる必要があります。
以下のようにしてみてください。

CSharp

1float width = other.gameObject.GetComponent<SpriteRenderer>().bounds.size.x

3. オブジェクトの座標

衝突したオブジェクト側の位置情報を取得するのであれば、

CSharp

1var pos = other.gameObject.transform.position;

でどうでしょうか?

投稿2018/05/23 15:02

TakafumiYuasa

総合スコア124

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

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

ITATI

2018/05/26 09:53

アドバイスありがとうございます。今しがた問題解決しました。 最終的にはこのような記述になりました。 ```C# void OnTriggerStay2D(Collider2D other) { if (other.gameObject.tag == "Ladder") { ladder = true; Object_width = other.gameObject.GetComponent<SpriteRenderer>().bounds.size.x; Object_hight = other.gameObject.GetComponent<SpriteRenderer>().bounds.size.y; var pos = other.gameObject.transform.position; Object_posX = pos.x; Object_posY = pos.y; objectName = other.name; } else if (other.gameObject.tag == "Stair"){stair = true;} //Debug.Log(other.name); //objectName = other.name; } ``` ご協力いただき、ありがとう御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問