[過去ログ]
【3Dゲームエンジン】Unity質問スレッド30 [無断転載禁止]©2ch.net (1002レス)
【3Dゲームエンジン】Unity質問スレッド30 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/gamedev/1500412168/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
767: 名前は開発中のものです。 [sage] 2017/08/23(水) 06:33:45.15 ID:9IfN6Xrm >>758だけど、みんなありがとう。おかげで多少進展しました。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { public int numButtons; private GameObject[] buttons = new GameObject[25]; // Use this for initialization void Start () { this.buttons = GameObject.FindGameObjectsWithTag ("button"); Debug.Log (buttons.Length); } } これをあるシーンに使ったら 一見何も関係なさそうなpublic int numButtons;を入れるとログは27、入れないと0が出ました。 別のシーンで使ったら合ってもなくても0でした。 numbuttonsはスクロールパネル上にボタンのプレハブを大量に並べるときにつくった変数で、インスペクタ上で27で上のどちらのシーン上にも存在しています。 試しに前者のシーンでnumbuttonsに26を設定したらログの27が26になりました。 配列の大きさを決める表現が間違っていたら元も子もないですが、 それにしてもなぜ関係ない変数が干渉してくるのか理解できません。 http://mevius.5ch.net/test/read.cgi/gamedev/1500412168/767
768: 名前は開発中のものです。 [sage] 2017/08/23(水) 07:49:19.60 ID:TuNmkY+t >>767 デバッガで追っても再現しないし、何言ってんだか意味が分からない 貴方の環境固有の問題としか言い様がない http://mevius.5ch.net/test/read.cgi/gamedev/1500412168/768
769: 名前は開発中のものです。 [sage] 2017/08/23(水) 12:17:15.25 ID:0fyfcMVA >>767 まず1つ1つが何をしているのかよく理解することが大事です buttons.Length これは確保された実際の配列の数が格納されています。 配列が1つも確保されていないのなら"0"を返し 仮に25個確保されたのなら"25"を返します。 buttons = GameObject.FindGameObjectsWithTag ("button"); これは 画面右上のタグ部分が"button"になってるGameObjectを全部buttonsという配列に格納するものです。 buttonというタグを付けられたGameObjectが2つ存在していれば2つ配列が新規に作成され 1つも存在していなければ配列は作成されません。 つまりbuttons.Lengthの値は"0"です。 private GameObject[] buttons = new GameObject[25]; //←無意味です this.buttons = GameObject.FindGameObjectsWithTag ("button"); //ここで実際に存在するbuttonの数だけ自動的に配列が再確保されます 上のコードは下と同じです private GameObject[] buttons; buttons = GameObject.FindGameObjectsWithTag ("button"); 説明が重複しますが タグにbuttonが指定されているGameObjectが存在していないのならば配列は確保されず buttons.Lengthの値は"0"です。 numButtonsの値はプログラムのどこにも使用されておらずこれも無意味で必要ありません(結果に影響していません) http://mevius.5ch.net/test/read.cgi/gamedev/1500412168/769
771: 769 [sage] 2017/08/23(水) 12:29:22.72 ID:0fyfcMVA >>767 using UnityEngine; using System.Collections; public class Nichan_767 : MonoBehaviour { private GameObject[] buttons = new GameObject[25]; // Use this for initialization void Start() { Debug.Log("Length=" + buttons.Length); // ?24と表示される buttons = GameObject.FindGameObjectsWithTag("button"); Debug.Log("Length=" + buttons.Length); // ?0と表示される } } ?の時点では private GameObject[] buttons = new GameObject[25]; で確保した物は存在していますが ?の結果から buttons = GameObject.FindGameObjectsWithTag("button"); ここで配列を再構築してるのを理解いただけるかと思います。 仮にTag"button"のGameObjectを3つ配置すると?の結果は3に変化します。 このように1行1行の命令が何をしているのか、そして動きの変化を丁寧に見ている事が大切になりますよ。 参考にしてみてください。 http://mevius.5ch.net/test/read.cgi/gamedev/1500412168/771
782: 名前は開発中のものです。 [sage] 2017/08/24(木) 07:41:29.43 ID:ruQ5JhDH >>767です。 多少進展しました。 public class NewBehaviourScript : MonoBehaviour { private GameObject[] buttons = new GameObject[25]; // Use this for initialization void Start () { this.buttons = GameObject.FindGameObjectsWithTag ("button"); Debug.Log (buttons.Length); } } とりあえずスクリプト全体の変数を見直して、そのあと初めて デバッグしました。25これこれはいらないのですが、あえて残してます。 シーン1では、buttonsの要素数が25になった後、buttonタグを有したオブジェクトが入り27になりました。 教えてもらった挙動の通りで、こちらは多分解決しました。 これをシーン2で試したら要素数25の後 、this.buttons = GameObject.FindGameObjectsWithTag ("button"); の処理で0になりました。 そこでFindGameObjectsWithTag でbuttonタグをもったゲームオブジェクトを見つけられていないと考えました。 そこで30個ほどbuttonタグをつけたオブジェクトを作ってみたら、加えたオブジェクトの数と等しい要素数がthis.buttons = GameObject.FindGameObjectsWithTag ("button"); の処理で反映されました。 buttonタグをもったオブジェクトはアクティブで、タグ名もbuttonで、タグマネージャにもbuttonタグはあります。 シーン1では上手くいってるだけに、シーン2にはどこかしら不具合があるはずなんだと思いますが、何を考えるべきだとおもいますか? http://mevius.5ch.net/test/read.cgi/gamedev/1500412168/782
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.034s