[過去ログ] 【3Dゲームエンジン】Unity質問スレッド30 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
760: 2017/08/23(水)00:20 ID:0fyfcMVA(1/4) AAS
>>758
実際に取得できたbuttonの配列数とnumButtonsの値が不一致なんだと思います。
例えばbuttonが2個しかないのに
numButtons = 4
のように設定しているとforループで
button[0] //大丈夫
button[1] //大丈夫
button[2] //indexoutofrangeexception
button[3] //indexoutofrangeexception
と用意されていない配列まで呼び出そうとし
「indexoutofrangeexception(存在しない配列番号を指定しています)エラーなりますよ。
for (int i = 0; i < numButtons; i++)
ではなく
for (int i = 0; i < button.Length; i++)
の方が確実です
761: 2017/08/23(水)00:21 ID:f4UC00rn(1) AAS
配列と非配列が同居。
762: 2017/08/23(水)01:23 ID:AOtX330Z(1) AAS
なんでDebug.Logは使えるのにbutton.lengthをLogに出そうと思わなかったのか?
763: 2017/08/23(水)01:36 ID:3WNWlazc(1) AAS
配列作った時に何個作ったのか記録されてる数見ないと、
作った数とintが一致する訳ないよね
理解出来ないじゃなくて、配列を理解してないんだよ
764: 2017/08/23(水)01:41 ID:atYfWrEx(1) AAS
ちゃんとnumButtonと命名してるのに自動で入れてくれないUnityが悪い
765: 2017/08/23(水)02:20 ID:iWkNM0se(1) AAS
ウディタに移行しようかな
766: 2017/08/23(水)02:51 ID:61qz+tvb(1) AAS
高級言語が無理なら諦めるのも手
767(4): 2017/08/23(水)06:33 ID:9IfN6Xrm(1) AAS
>>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になりました。
配列の大きさを決める表現が間違っていたら元も子もないですが、
それにしてもなぜ関係ない変数が干渉してくるのか理解できません。
768: 2017/08/23(水)07:49 ID:TuNmkY+t(1/2) AAS
>>767
デバッガで追っても再現しないし、何言ってんだか意味が分からない
貴方の環境固有の問題としか言い様がない
769(2): 2017/08/23(水)12:17 ID:0fyfcMVA(2/4) AAS
>>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の値はプログラムのどこにも使用されておらずこれも無意味で必要ありません(結果に影響していません)
770: 2017/08/23(水)12:17 ID:ouhFnsS+(1/2) AAS
そもそもnumButtonsというpublic変数の存在意図がわからん
どこで値を入れてるの?
エディタ画面で手で直接いれてるの?
numButtonsをforループでしか使ってないならnumButtons自体不要だな
手で毎回ボタン数入れてるならその手間もなくなる
771: 769 2017/08/23(水)12:29 ID:0fyfcMVA(3/4) AAS
>>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行の命令が何をしているのか、そして動きの変化を丁寧に見ている事が大切になりますよ。
参考にしてみてください。
772: 769 2017/08/23(水)12:30 ID:0fyfcMVA(4/4) AAS
訂正:
?の結果は"24"ではなく"25"です。
773: 2017/08/23(水)12:45 ID:ouhFnsS+(2/2) AAS
numButtonsはボタン大量に並べるときにも使ってるのかな
buttonタグのついたボタンの個数とnumButtonsの数が一致してるならいまいち原因がわからん
FindGamesObjectWithTagで取得された要素数がbuttonタグのついた要素数と一致してないのか?
774: 2017/08/23(水)12:52 ID:TuNmkY+t(2/2) AAS
画像リンク
デバッガでアタッチすればプロセスの中身全部見れる訳で
第一確保したメモリを他の領域が侵食して勝手に書き換えてたら、
そりゃ唯のバッファオーバーフローじゃん
出来てるやれてる解ってるって、勝手な予想や思い込みを捨てて
メモリの中身がどうなってるか逐一確認しなきゃ分かる訳ないよ
そこが可笑しい
775: 2017/08/23(水)13:09 ID:MTXdrtmX(1) AAS
C#の絵本でも読んどけ
776: 名無し@キムチ 2017/08/23(水)18:33 ID:CUIL1+3U(1) AAS
>>742
※ キムチに餌をやらないでください
当方にとって最大の餌といえば、やはりUnityそのものですね。
あと、BlenderやMakeHumanも非常に大きな餌であり、MakeClothesもちょっぴりの餌です。
またこのスレでの餌といえば、困った時に質問して有効な回答が得られることでしょうね。
その餌をやらないでくれ、ということは当方が有効な回答を得た場合何か困ることがあるのですか?
もしかして>>742は当方が知ってるヒトだったりしますか?
777: 2017/08/23(水)23:05 ID:t1wRCclf(1) AAS
アセットを買えばいいと思いますよ
無理にスクリプトを扱う必要はありません
778(1): 2017/08/24(木)00:00 ID:zcnJsAO1(1/2) AAS
おすすめの解説サイトか書籍を教えてください。
Unityは初めてで、プログラミングの経験はある程度あります。
779(1): 2017/08/24(木)00:35 ID:OjzkpEBe(1) AAS
オススメはUnreal Engineです
Unityなど速攻アンインストールしましょう
780: ダーク王鍬大使 ◆SoVpkB15jY 2017/08/24(木)00:47 ID:2Q8VoCoW(1) AAS
そういえばツクール2000のYADOTポジションのホームページってまだないんでふね(^^
あってもいい気がしまふが(^^
781: 2017/08/24(木)01:59 ID:zcnJsAO1(2/2) AAS
>>779
どうしてですか?unityだめなんですか?
782(3): 2017/08/24(木)07:41 ID:ruQ5JhDH(1/3) AAS
>>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にはどこかしら不具合があるはずなんだと思いますが、何を考えるべきだとおもいますか?
783: 2017/08/24(木)12:18 ID:XR5K+uMT(1/2) AAS
>>782
シーン2にbuttonタグのオブジェクトを配置していないから0になるのだと思いますが。
シーン2にbuttonタグのオブジェクトが配置してあるのに取得できないのですか?
それとも
シーン1にあるボタンをシーン2のスクリプトから取得したいという事ですか?
784: 2017/08/24(木)13:05 ID:lkGi/EQe(1) AAS
よくわからんけど
this.buttons = GameObject.FindGameObjectsWithTag ("button");
この記述は正しいの?
エラーの原因な気がするが
785: 2017/08/24(木)13:12 ID:r02jaxxe(1) AAS
あちこちに、デバッグ文を書いて、
どの関数が呼ばれたか・呼ばれていないのか、を確認すれば?
究極を言えば、1行ずつ、デバッグして確かめるべき
786: 2017/08/24(木)14:03 ID:t7fwZzND(1/2) AAS
>>782
アセットの購入を考えるべきでしょう
787: 2017/08/24(木)14:33 ID:zGenWhTO(1) AAS
Unity以前にC#以前にVSのdebugのチュートリアルやったほうがいいんじゃね
まあそれ以前にIT専門学校か大学へ行ったほうがいいかw
788: 2017/08/24(木)15:14 ID:1qVyt99v(1) AAS
糞コテと躓いてる所が同じだし、所詮アスペの残念な頭では
その程度の理解を示すくらいが精一杯なんだろう
789(4): 2017/08/24(木)16:08 ID:zZj4TYYg(1) AAS
いきなりの書き込みで失礼します。
Unityを触ったことがないのですがインストールするUnityのバージョンはなんでもいいのでしょうか?とても初歩的な質問なのですがとても悩んでおり相談できる相手もいないのでここに書きこませていただきました。
どうかよければ回答お願いしますm(__)m
上下前次1-新書関写板覧索設栞歴
あと 213 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.021s