[過去ログ] 【3Dゲームエンジン】Unity質問スレッド30 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
746: 2017/08/21(月)22:53 ID:nm8udV86(1) AAS
 キムチはすっこんでろ 
747: 2017/08/21(月)23:05 ID:o61p1nup(1) AAS
 立派なのはおっぱいがいいと思うわ 
 画像リンク
 
 
748: 2017/08/21(月)23:42 ID:hzjzep7X(2/2) AAS
 >>734 
 レスサンクス、結局5.6.3p3?とかにしといたわ 
749(1): 2017/08/22(火)05:55 ID:3zzEjDfW(1/2) AAS
 もしかしてUnityって厨御用達ツール? 
750: ダーク王鍬大使 ◆SoVpkB15jY  2017/08/22(火)08:03 ID:JvQsi3LE(1) AAS
 厨とか久々に見まひた(^^ 
 ここは10年前のインターネッツでふね(^^ 
751: 2017/08/22(火)11:22 ID:3zzEjDfW(2/2) AAS
 もしかしてウディタ使いより年齢層低いのかなこのツール 
752: 2017/08/22(火)11:22 ID:SOrK8lS9(1/2) AAS
 >>749 
 人それぞれ解釈は違うと思うけど俺はそのようには思ってない。 
 知識が浅い人でもある程度の物が作れる優れたツールで 
 逆に言えば知識がある人が使えば今までメーカーでしか作れなかったような物が 
 個人で作れる優れたツールだと思ってる。 
 OSがMS-DOSがWindows95になって玄人以外もPC触れるようになった感じに似てると思ってる。 
  
 ちなみにUnity触る前は俺もちょっと見下していた。 
 「Unityとか邪道。あんなの初心者用だろ? 
  やっぱネイティブにゼロからプログラム打ち込んでいってこそなんぼでしょ!」 
 こんな感じに。 
 でも半年触ってる今は 
 「こりゃスゲーわ…。なんでもっと早くにこれやってなかったんだろう俺 
  昔の俺の考えは馬鹿だったな…反省」 
 となってるよ。 
753: 2017/08/22(火)11:27 ID:SOrK8lS9(2/2) AAS
 物理エンジンと優れたアセット(無料パッケージ)がある関係で 
 プログラミングが苦手なデザイン系の人が触るようなツールに感じがちだが 
 しっかりした物を作るとなるとかなりプログラミングスキルが必要になってくるから 
 頑固プログラマ気質な人にも全然オススメできるよ。 
 VCやEclipseとかでSDK導入しAPI叩きまくるのとだいぶ似てる。 
754(1): 2017/08/22(火)13:59 ID:HwsyuWNo(1/2) AAS
 Unityがウディタより敷居高いのは間違いない。でも最近は名前が知られてきたから試しに触ってみようって人はかなり多いはず 
 実際はシンプルなゲームでもプログラミング必須で基礎がない人は公式のチュートリアルですら躓くんだよなぁ 
755: 2017/08/22(火)14:02 ID:vSbVnt7C(1) AAS
 レッテル貼り=思考停止と言う事がよく分かるな 
756(1): 2017/08/22(火)15:01 ID:yLOjxir+(1) AAS
 >>754 
 アセットを買えばシンプルなゲームは簡単にできますよ 
757: 2017/08/22(火)18:35 ID:HwsyuWNo(2/2) AAS
 >>756 
 お、アセットおじさん保守ボランティアご苦労様です! 
758(2): 2017/08/22(火)23:41 ID:ZYqSKZvD(1) AAS
 質問です。 
  
 using System.Collections; 
 using System.Collections.Generic; 
 using UnityEngine; 
  
 public class NewBehaviourScript : MonoBehaviour { 
  GameObject[] button; 
  public int numButtons; 
  // Use this for initialization 
  void Start () { 
   button = GameObject.FindGameObjectsWithTag ("button"); 
   for (int i = 0; i < numButtons; i++) { 
    Debug.Log (button [i]); 
   } 
  } 
 } 
  
 これでindexoutofrangeexceptionが出るのですが、配列で宣言してるので理解できません。 
 ほかのシーンではこれとほとんど同じスクリプトが動いてます。 
759: 2017/08/22(火)23:46 ID:TRTD1zzi(1) AAS
 理解出来ないならそれで終了だよ 
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#の絵本でも読んどけ 
上下前次1-新書関写板覧索設栞歴
あと 227 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.011s