[過去ログ] 【3Dゲームエンジン】Unity質問スレッド33 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
115: 2017/12/26(火)19:19 ID:yq5adPSI(4/4) AAS
 公式どころか個人がやってる初心者講座サイトの1つでもやってれば普通に分かっていておかしくない内容だよな。 
 どんだけ何もやってない怠けものだよコイツって感じ 
116: 名無し@キムチ 2017/12/26(火)19:58 ID:5fo0vrRf(1/2) AAS
 ごく初歩的な質問ですが、何もさわってないのに、たまにシーン内でのオブジェクトの位置が変わっていることがあるのですが、それは何故でしょうか? 
 同じく何もしないのに、コンポーネントが外れていたり、インスペクターの値が変わっていることもあります。 
 これは非常に困るので、位置や値が自分で変えるまでは絶対に変わらない対処法をご教示おねがいいたします!!! 
117: 名無し@キムチ 2017/12/26(火)20:03 ID:5fo0vrRf(2/2) AAS
 なお>>113は当方ではないですよ。当方、無意味なコテ外しはしませんw 
118(3): 2017/12/26(火)20:26 ID:O9PscLer(1) AAS
 シーン遷移時に引き継ぎたい変数をどの手段から選べばいいか迷ってるんですけど、 
  
 1 static変数として持つ 
 2 ScriptableObjectを作ってそこに一時保管しておく 
 3 dontdestroyで変数の入ったスクリプトがアタッチされているオブジェクトを壊さず持っていく 
 4 外部のdb等に一時保管しておく 
  
 辺りで迷ってるのですが、ケースバイケースだとは思うのですがどれがいいのかアドバイスお願いします。 
 1 なるべくstatic使わない方が初心者には良い とたまに聞きます。 
   似た名前のローカル変数を複数使っているので混乱する可能性もあるかなと 
  
 2 基本的に変動しない小さいマスターデータをdb代わりに使う事が多い と見ました 
   こういった使い方には適さないのかもと迷いました 
  
 3 普通のゲームと同じくいくつかのシーンをループして進めていくのでオブジェクトが被らないようにシングルトンにする手間や 
   処理は一切入れず変数入れとしてこの処理をするならScriotbleObjectでいいのかな?と思ったり 
  
 4 形式にもよるのでしょうが一時的な変数をイチイチ外部に書き出すのはどうなのかと 
119: 2017/12/26(火)21:20 ID:ef3cEapS(6/11) AAS
 当方、キムチでも、113でも、117でもありませんがw 
120: 2017/12/26(火)21:27 ID:ef3cEapS(7/11) AAS
 >>111 
  
 ボタンは引数なしで呼び出すだけだから簡単だけど、 
 スライダーは引数をどうやって受け取るかがわからなかったのでした 
  
 少なくとも公式のオンラインマニュアルからは探せず・・・ 
 UIのインスペクターのリストをよーく見たら、 
 引数ありのメソッドと同名の、引く数なしのメソッドが上の方に見つかって解決したけど 
  
 >>99 
  
 やっぱり、リスト最上段のDynamic floatの直下にあるところをみると、 
 コレ(?)がUnity側で用意した機能なんでしょうね・・・ 
121(2): 2017/12/26(火)21:32 ID:ycBgqB9O(1) AAS
 >>118 
 何が消えてOKで、何が消えたら不味いのか、切り分けが分からない 
 例えば、セーブ/ロード付けるなら、シーン移動時にセーブとロード 
 するから結局同じ事じゃないの? 
122(1): 2017/12/26(火)21:36 ID:ef3cEapS(8/11) AAS
 >>118 
  
 個人的には「3」を使ってます! 
  
 最初のLoad用のシーン0でフラグ管理用のオブジェクトを「DontDestroy」設定して、 
 その後はシーン1へ遷移して、以降はシーン0へは戻りません 
 (戻ると、「DontDestroy」設定を繰り返してしまうので・・・) 
  
 フラグ管理用のオブジェクトに載せたスクリプト内では、Start()内で、 
 ゲームを通してシーン間で共有する変数を全て「public」で宣言して初期値設定しています 
  
 そして、他のシーンの他のオブジェクトから、適宜呼び出して参照や代入して共有してますね 
123: 2017/12/26(火)21:40 ID:ef3cEapS(9/11) AAS
 >>121の言うように、 
 セーブありのRPGみたいな感じであれば、シーン変更前にセーブして、 
 シーン変更後にロードでも良い気がしますね 
  
 ゲーム終了後も保持したいなら、やはり外部保存だと思います 
  
 自分のは基本パスワード式のACTなので、 
 セーブシステムがないので、ゲーム内でのみ保持しています 
  
 パスワードの入力によって、フラグの初期値を変更して、 
 その後にゲーム開始となるようにしていますね 
 (まっすぐゲームスタートした場合は、全フラグを初期値で開始) 
124(1): 2017/12/26(火)23:19 ID:V8TVTato(1) AAS
 >>118 
 言うまでもないが可能不可能で言えばどれでも出来る 
 と言うか、シーンロードでDestroyされないヒエラルキーに依存しないものならなんでも保持は可能 
  
 適不適で言うなら 
 1.staticである必要性はない。staticにすることによる弊害の方が多いため不適 
 2.ScriptableObjectは実行時はReadOnlyなデータのバリエーションを扱うもの。使い方が間違っているため当然不適 
 3.揮発性の情報ならこれが最適※ 
 4.不揮発性の情報ならこれこれが最適※ 
  
 ※揮発性情報は意図せずプロセスが死亡した場合に消えても良いもの、不揮発性情報はプロセスが死亡しても残るべきものとする 
125: 2017/12/26(火)23:39 ID:ef3cEapS(10/11) AAS
 staticにする必要性ってどこにあるんだろう?? 
  
 FCやSFCで言うところの、RAMじゃなくてROM的な機能か? 
126: 2017/12/26(火)23:51 ID:ed3wWG+q(1) AAS
 えっ 
127: 2017/12/26(火)23:58 ID:ef3cEapS(11/11) AAS
 ゲーム内で使いまわす、汎用関数を定義するとか? 
128: 2017/12/27(水)00:01 ID:iZzjfAdD(1) AAS
 ?コンソメ 
 ?コンスト 
 ?コンビニ 
129: 2017/12/27(水)00:48 ID:4kYoBCMG(1/10) AAS
 >>121-122 
 >>124 
  
 回答ありがとうざいました。 
 3でやってみようと思います。 
130: 2017/12/27(水)01:16 ID:2+M/n1Lm(1/4) AAS
 ROM的な機能は、ScriptableObjectの方だったか 
  
 全オブジェクトからアクセスできる関数(メソッド)作成はStaticが良いかもしれない 
  
 どのスクリプトからでも 
 ?RGB→HSL変換できるメソッド:RGBto.HSL(R, G, B, out H, out S, out L) 
 ?RGB→HSV変換できるメソッド:RGBto.HSV(R, G, B, out H, out S, out V) 
 を作ってみた 
131: 2017/12/27(水)01:19 ID:2+M/n1Lm(2/4) AAS
 public static class RGBto { 
  public static void HSL(int R, int G, int B, out int H, out int S, out int L){ 
   int Max = Mathf.Max (R, G, B); 
   int Min = Mathf.Min (R, G, B); 
  if (Max == Min) { 
   H = 360; 
  } else if (G == Max) { 
   H = 60 * (B - R) / (Max - Min) + 120;      
  } else if (B == Max) { 
   H = 60 * (R - G) / (Max - Min) + 240; 
  } else { 
   H = 60 * (G - B) / (Max - Min); 
   if (H < 0) H = H + 360; 
  } 
  if (Max == 0 || Min == 255){ 
   S = 0; 
  } else { 
   S = 255 * (Max - Min) / (255 - Mathf.Abs(Max + Min - 255)); 
  } 
   L = (Max + Min)/2; 
  } 
132: 2017/12/27(水)01:19 ID:2+M/n1Lm(3/4) AAS
  public static void HSV(int R, int G, int B, out int H, out int S, out int V){ 
   int Max = Mathf.Max (R, G, B); 
   int Min = Mathf.Min (R, G, B); 
  if (Max == Min) { 
   H = 360; 
  } else if (G == Max) { 
   H = 60 * (B - R) / (Max - Min) + 120;      
  } else if (B == Max) { 
   H = 60 * (R - G) / (Max - Min) + 240; 
  } else { 
   H = 60 * (G - B) / (Max - Min); 
   if (H < 0) H = H + 360; 
  } 
  if (Max == 0){ 
   S = 0; 
  } else { 
   S = 255 * (Max - Min) / Max; 
  } 
   V = Max; 
  } 
 } 
  
 Hを求めるところはもっとまとめられるかも・・・ 
 Hのみ0〜360(360で色相未定義) 
 RGB,SLVは0〜255 
133: 2017/12/27(水)01:47 ID:+i3zpKSn(1/2) AAS
 Stackoverflowみたいでいい感じじゃないの 
134(3): 2017/12/27(水)03:01 ID:4kYoBCMG(2/10) AAS
 また質問なんですけど、 
 シーン遷移した後って前シーンからdontdestroyで持ってきたオブジェのスクリプト内で 
 getcomponentってできないですか? 
 gameobject.findで指定したオブジェクトを見つけるまでは大丈夫なのですが 
 ゲットコンポーネントするとNullReferenceExceptionが帰ってきます 
 同じシーン内に作ったなんらかからならちゃんと動くのですが 
135: 2017/12/27(水)03:07 ID:4kYoBCMG(3/10) AAS
 もしかするとfindも失敗してるのかもしれませんが、 
 sceneをパスに指定するようなことが必要になるのでしょうか? 
 dontrestroyしたオブジェクトはdontdestroyの子みたいな表示になりますし 
 共通シーン内でしか受け渡しできないとかなのでしょうか? 
136(1): 2017/12/27(水)12:43 ID:YC5nHwtt(1) AAS
 全部自作した奴が偉い君は 
 ガワだけ張り替えて大当たりするようなソシャゲが 
 天下取ってる現状に発狂してそう 
137: 2017/12/27(水)12:54 ID:WZqeNEin(1/6) AAS
 >>103 
  
 UnityのUIのボタンのフォーカスとフォーカス対象の設定 
 外部リンク:gametukurikata.com 
 >あらかじめボタン1つがフォーカスされていないと他のボタンの選択が出来ません 
 >EventSystemに最初に選択するボタンの設定は出来ます 
>>89 >>91 
  
 [UI] スライダーで変更した値を取得できない現象に対処した [Unity]  
 外部リンク[html]:negilab-unity.com 
 >スライダーの変更値を float として取得するのではなく、Slider.value 変数として取得するように書き換えたところ、問題なく取得できました 
 >スライダーのインスペクタで、引数にスライダーのオブジェクトを指定 
  
 uGUIのSliderの値をスクリプト側で受け取る方法  
 外部リンク[html]:unitymemo.blog.jp 
 >SliderをGetComponentしてvalueを参照することでスライド値を参照できます 
 >OnValueChangedに定義したメソッドでスライド値を受け取る方法 
 >メソッドを選択する際、一番上のほうの「redSlider」を選択する事 
 >下のほうにも「redSlider(float)」がありますが、こちらを選んでも正しく値を渡すことは出来ません 
138: 2017/12/27(水)12:57 ID:WZqeNEin(2/6) AAS
 >>102 
  
 Unity : 3Dシーン内のCanvasが邪魔  
 外部リンク:indie-du.com 
 >UnityがCanvasの1ピクセルを1unitとして計算して表示 
 >1unitは1メートルなので、100ピクセルのUIは100メートルで描画 
 >Canvasの左下が原点(0, 0, 0)に合っている 
139: 2017/12/27(水)14:56 ID:+i3zpKSn(2/2) AAS
 見ての通り、質問せずに最初から自分でググってれば数分で解決している問題が多いな。 
 自分でググらないといけない事を人にググってもらってるだけなんだから。 
140(1): 2017/12/27(水)17:26 ID:u5IVM9F6(1) AAS
 カンバス、そんなに邪魔? 
 消しちゃえばいいやん。必要な時にtrueにしてさ。 
141: 2017/12/27(水)18:22 ID:WZqeNEin(3/6) AAS
 >>140 
 そうだよね 
 GUIの表示だけoffにすれば済む話だよね 
142(1): 2017/12/27(水)18:41 ID:WZqeNEin(4/6) AAS
 >>134 
 何をGetcomponentしたいの? 
 Sceneを指定したりはしないはず 
  
 ObjectはFindされているんでしょ? 
 obj内にObjectが入っている状態で、スクリプトをGetcomponentしたいなら、 
 スクリプト名 s = obj.GetComponent<スクリプト名>(); 
  
 そのスクリプト内の変数をゲットしたいなら 
 s.変数名 
  
 変数は引用元のスクリプトの最初にpublicで宣言しておいて 
143(1): 2017/12/27(水)18:54 ID:fBJY1RTE(1/6) AAS
 やってみたがFindもGetComponentも普通に出来るよな 
  
 検索範囲は明示がないけどHierarchyウインドに表示されてる物は 
 全捜索するようで、シーンが分かれていようが全く関係がない 
 (Updateで使うなってのは、毎回Hierarchy全捜索されたら洒落にならん) 
144(2): 2017/12/27(水)18:56 ID:WZqeNEin(5/6) AAS
 >>134 
 dontrestroyしたObjectに付いているスクリプト内で、 
 別のシーンにある他のObjectのコンポーネントを取得してみたけど、普通に受け取れたよ? 
  
 Scene0で、共有Objectをdontrestroyして、Scene1へ遷移 
 Scene1で、共有Objectのスクリプトから、 
 Scene1の別のObjectのtransfomを取得したら、普通に見れた 
  
 FindだとHierarchyにない別のSceneのObjectは検索できないはず 
 Objectを検索できたのに、GetComponentできないなら、 
 そのObjectには取得しようとしているコンポーネントがないか、 
 他のObjectから取得できないように保護されている(変数ならprivate宣言)かでは? 
上下前次1-新書関写板覧索設栞歴
あと 858 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.017s