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

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

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

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

Q&A

解決済

1回答

634閲覧

Colliderが接触してないときに非表示にしたいです

manmanJ

総合スコア19

Unity

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

0グッド

0クリップ

投稿2019/05/24 19:43

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerView : MonoBehaviour { GameObject [] ObjViews= GameObject.FindGameObjectsWithTag("Obj"); void OnTriggerEnter(Collider other){ if(other.CompareTag("Obj")) { foreach (GameObject ObjView in ObjViews) { ObjView=GetComponent<Renderer>().enabled = true; } } } void OnTriggerExit(Collider other){ if(other.CompareTag("Obj")) { foreach (GameObject ObjView in ObjViews) { ObjView=GetComponent<Renderer>().enabled = false; } } } }

ObjView=GetComponent<Renderer>().enabled = true;
ObjView=GetComponent<Renderer>().enabled = false;
がエラーになって動きません
タグから拾ってきたオブジェにcolliderが接触した場合表示、接触してない場合非表示にできるようにしたいです

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

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

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

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

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

guest

回答1

0

ベストアンサー

念のためおうかがいしますが、出したり消したりしたいのはPlayerViewの方でしょうか、それともObjViewsの方でしょうか?
おそらくObjViewsの方だろうと思ったのですが、その場合はObjView=ObjView.にすればいいかと思います。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerView : MonoBehaviour 6{ 7 GameObject[] ObjViews; 8 9 void Start() 10 { 11 // FindGameObjectsWithTagはフィールド初期化タイミングでは使えないので 12 // オブジェクト取得はStart内で行うことにしました 13 ObjViews = GameObject.FindGameObjectsWithTag("Obj"); 14 } 15 16 void OnTriggerEnter(Collider other) 17 { 18 if (other.CompareTag("Obj")) 19 { 20 foreach (GameObject ObjView in ObjViews) 21 { 22 // なぜかObjViewに代入しようとしており、C#ではforeach列挙用の変数への 23 // 代入を許さないルールになっているためエラーが出たのでしょう 24 ObjView.GetComponent<Renderer>().enabled = true; 25 } 26 } 27 } 28 29 void OnTriggerExit(Collider other) 30 { 31 if (other.CompareTag("Obj")) 32 { 33 foreach (GameObject ObjView in ObjViews) 34 { 35 ObjView.GetComponent<Renderer>().enabled = false; 36 } 37 } 38 } 39}

もしPlayerViewの方ならばこんな感じでしょうかね?

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerView : MonoBehaviour 6{ 7 void OnTriggerEnter(Collider other) 8 { 9 if (other.CompareTag("Obj")) 10 { 11 GetComponent<Renderer>().enabled = true; 12 } 13 } 14 15 void OnTriggerExit(Collider other) 16 { 17 if (other.CompareTag("Obj")) 18 { 19 GetComponent<Renderer>().enabled = false; 20 } 21 } 22}

投稿2019/05/24 23:08

Bongo

総合スコア10807

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

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

manmanJ

2019/05/25 06:15

やってみましたが反応せず、Unity側の設定がまちがっていたかも PlayerviewからobjのtagをさがさずにobjからPlayerviewのTagを探すやりかたで解決できましたが 処理はどちらのほうがはやいんですかね?
Bongo

2019/05/25 22:17

どちら側でも速度的に大差はなさそうな気はします。オブジェクトが数百、数千もあればもしかすると何らかの要因で差が出てくるかもしれませんが、オブジェクトの数が少なければこの処理が全体の処理の中で占める割合は小さいでしょうから、気にする必要はないんじゃないでしょうか。 Obj側でうまくいったのでしたら、他に何か不都合(Obj側に書くと管理が面倒になるのでなるべくやりたくない...のような)がなければそれで問題ないように思います。 気になるようでしたらディーププロファイリング(https://docs.unity3d.com/ja/current/Manual/ProfilerWindow.html )をやってみて、この表示・非表示処理が処理時間にどれだけ影響を及ぼしているか調査してみてもいいでしょう。
manmanJ

2019/05/27 11:35

一応obj側の非表示、表示もこれから使う予定なのでもしまたView側で不都合があれば朝鮮してみます ディーププロファイリングやってみましたが全体が見えるようにした状態で表示、非表示で変化がみえました。 まだオブジェもキューブとかなので大きいサイズになってきたらいろいろつついてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問