[過去ログ] 【3Dゲームエンジン】Unity質問スレッド29 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
460(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 20:01:31.70 ID:M/2QAqjI(5/5) AAS
 >>459459(2): 名前は開発中のものです。 [sage] 2017/06/18(日) 19:51:28.51 ID:Ga9T3hxB(5/9) AAS
 >>456 
 いやランタイム時の参照をどう持つかのお話なので 
 Unityエディタ上でコンポーネントのプロパティの設定(と無い場合はAddComponent)を 
 自動化してるか手動でやるかのあなた話は、議論している箇所が違うんですよね… 
 煽ってるわけではないので気を悪くしないでね  
話もブレてるし何を理想として思い描いたのかよく分からないな 
461: 名前は開発中のものです。 [sage] 2017/06/18(日) 20:03:54.39 ID:0/Ag2Y7d(1) AAS
 >>458コルーチンをビジュアルに書いたの見せてくれ 
462(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 20:13:48.96 ID:q1X0lAjX(5/5) AAS
 >>459 
 最初の問い(>>389389(3): 名前は開発中のものです。 [sage] 2017/06/16(金) 22:00:19.70 ID:OyCZvXKK(1) AAS
 あらかじめインスペクタでアタッチするのと、AwakeとかでFind&GetCommentのとではどっちが効率いいんだろう  
)はランタイム時の効率についての話しだが、それについてはFindのほうがオーバーヘッドが大きいよねと概ねコンセンサスは出来てるだろう 
 (直接、Find系とインスペクタ参照で速度比較したデータが示されていないけど) 
  
 で、>>424424(3): 名前は開発中のものです。 [sage] 2017/06/18(日) 10:23:18.25 ID:XAVbtWpl(1/3) AAS
 >>418 
 ケースバイケース君と俺は別人だが俺が書いた>>379から派生してグダッてるみたいなので基本方針を示しておく 
  
 1. Findは基本的に使用禁止 
 文字列引数による検索は実行時エラーの温床となるので避けるべき、インスペクタ上でオブジェクトの名前を変えられただけでコケるとか怖すぎる 
 またヒエラルキーツリーを全部舐める様な処理を多用するのはパフォーマンス的にも好ましくない 
  
 2.インスペクタ上で参照がセットされていることを前提にした構造は可能な限り避ける 
 シーンファイルを誤って変更された時に、インスペクタ上で探して修正するのは面倒。特にシーン内のオブジェクトが複雑に絡み合った参照関係を持つなどは論外 
 もしどうしてもこれが避けられない場合はオブジェクトをプレハブ化してプレハブ内での参照に限定することで問題のスコープを小さく保つ 
  
 上記ルールに沿って作れないならそれは設計が悪いので設計を見直す、疎結合を徹底するべし 
 必要ならCamera.mainなどの様なstatic経由での参照の受け渡しや、シングルトンなマネージャークラスの導入を検討する 
 ※多用は厳禁、後者はScript Execution Orderを正しく設定すること 
  
 ヒエラルキーツリーやインスペクタでの変更に弱いコードはメンテナンス性が低く、こうした変更による問題が発生した場合の問題箇所の検出が非常に困難になるので避ける様にするといい  
でランタイム時の効率だけでなくメンテナンス性にも話題が広がったので、複雑な参照関係はエディタ拡張スクリプトで自動化しておくと効率面でもメンテナンス面でも有益なことが多いよね、となった 
  
 なんかおかしいかな? 
463: 名前は開発中のものです。 [sage] 2017/06/18(日) 20:19:07.23 ID:Ga9T3hxB(6/9) AAS
 >>460 
 俺の話は徹頭徹尾、ランタイム時の参照をAwakeでFindしないかつインスペクタでポチポチしない方法です 
 >>439の書き込みにこの話の求道者である>>441441(4): 名前は開発中のものです。 [sage] 2017/06/18(日) 14:46:23.45 ID:XAVbtWpl(3/3) AAS
 >>432 
 全面的に同意、求道的すぎるのは認める 
 ここ初心者多いから>>426みたいなクソ開発者になるなという意味を込めて厳しめに書いた 
 リスクを理解した上で使うならともかく、安易に便利だからで多用すると一気にコードが糞になるからなぁ 
 >>439 
 あるある、ついでにエディタ上で触らせる必要がなく親子関係が確定してるオブジェクトなんかはhideFlagsも立てたりする  
が賛同してたので勝手に期待しちゃっただけです 
 あなたのやっている自動化は私の求めるものとは違っていただけなのでどうぞ気になさらずに 
464(2): 名前は開発中のものです。 [] 2017/06/18(日) 20:19:26.05 ID:+mnWtDzw(2/3) AAS
 >>457これなんてやつ? 
465: 名前は開発中のものです。 [sage] 2017/06/18(日) 20:28:32.00 ID:3wXsUBad(4/4) AAS
 >>464 
 モグリかよ 
466(3): 名前は開発中のものです。 [sage] 2017/06/18(日) 20:31:46.17 ID:Ga9T3hxB(7/9) AAS
 >>462 
 そう、その「複雑な参照関係はエディタ拡張スクリプトで自動化しておく」方法を知りたいんです 
 自分の状況を書いておくと、 
 1. 最初はインスペクタでドラッグ&ドロップで参照設定していた 
 2. UIとか配置オブジェクトが1シーンに数十個とかになってくると、さすがにポチポチは面倒… 
 3. Awakeで命名規則に従ってFindで設定しちゃえ 
 4. ランタイムではパフォーマンスが悪いし、オブジェクトのリネームに弱いと気づき、泣く泣くポチポチへ戻る 
 で現在4の状態なので、それを自動化できるアセットなら欲しいと思ったわけです 
  
 この話をしてる流れの中でUnityエディタ上でリフレクションとか使って自動設定するのかなとか考えたけど 
 運用考えると破綻しそうなので、すでにバリバリ実用してそうな>>441とかに参考コードのおこぼれでももらおうと思ったわけです 
  
 やっぱりそんなものはないのか、ポチポチ業務へ戻りますかね… 
467(2): 名前は開発中のものです。 [sage] 2017/06/18(日) 20:34:34.58 ID:nmnJlvzm(5/9) AAS
 >>464 
 PlayMaker 
 UE4のブループリント風エディタ拡張 
  
 もはやゲームプログラマがコードを書く時代は終わった 
468: 名前は開発中のものです。 [sage] 2017/06/18(日) 20:37:22.40 ID:nmnJlvzm(6/9) AAS
 コルーチン、LINQ、ラムダ式を使わないならコードなんて書くな 
 もうお前がやろうとしている事は他の誰かがアセットにして公開しているのだから 
469(1): 名前は開発中のものです。 [] 2017/06/18(日) 20:41:11.49 ID:+mnWtDzw(3/3) AAS
 >>467 
 うわーこんな便利な物があるんですね 
 すぐに買います 
470(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 20:46:21.89 ID:nmnJlvzm(7/9) AAS
 今はもうC#プログラミングは関数をポータブルに持ち運ぶ世界だよ 
 クラスの概念さえ以前より希薄になろうとしている 
  
 遠く離れた、名前すら知りもしない世界の果てのクラスの関数をプレイヤークラスが実行できる 
 これがファーストクラス関数型の世界 
従来の手続き的なコーディングはレガシープログラマと言われる 
 Unityでコーディングする意味がない 
471: 名前は開発中のものです。 [sage] 2017/06/18(日) 20:48:36.20 ID:m9nbofGj(1) AAS
 >>469 
 まて、早まるな。 
 PlayMakerは確かに便利だけど、 
 結局プロパティとかメソッドの知識がないと組めないのは変わらんぞ。 
472: 名無し@キムチ [] 2017/06/18(日) 21:14:01.06 ID:UdS9CyS1(1) AAS
 T2VBuilderはUnityでつくられていると思いますが、 
 あのように自分の画面をキャプチャーしてAVIに録画する関数は、 
 Unityのスクリプトにあるのですか? 
 またそれは何という名前の関数ですか?使い方もお願いします。 
473: 名前は開発中のものです。 [sage] 2017/06/18(日) 21:37:15.68 ID:Fr4XIrmP(2/2) AAS
 >>470 
 そのうちリアクティブスパゲティ作りそうだな 
474(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 21:40:40.73 ID:WNEWBLm8(2/4) AAS
 >>466 
  
 単にこういうやつを求めてる? 
  
 using UnityEditor; 
 using UnityEngine; 
 using System.Collections.Generic; 
  
 public class attachSelectObjects 
 { 
  [MenuItem("Assets/autoAttach")] 
  
  static void autoAttach() 
  { 
   List<GameObject> l = GameObject.Find("GameManager") 
    .GetComponent<myScript> ().myList; //アタッチ先のリストを取得 
  
   foreach(GameObject go in Selection.gameObjects){ 
    //ヒエラルキーで選択しているゲームオブジェクトをリストに登録 
    l.Add (go); 
   } 
  } 
 } 
475: 名前は開発中のものです。 [sage] 2017/06/18(日) 22:01:39.46 ID:Ga9T3hxB(8/9) AAS
 >>474 
 うーん、せっかく貼っていただいたんだけど違うかな…? 
 それだとListの中をランタイム時にいちいち回して該当オブジェクトを検索しなくちゃいけないからさらに効率悪そう 
  
 他の人はどうやってるんだろ?って調べてみると、ZenjectってライブラリがやってるDIがイメージ通りっぽい 
 ただこれも結局はランタイム時に参照関係を解消するみたいなので処理効率という点ではFind系と変わらなそう? 
 …もう諦めてしばらくはドラッグ&ドロップでやっていきますわ 
476(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 22:08:44.71 ID:WNEWBLm8(3/4) AAS
 ああ、uiはuiの参照先にアタッチ、playerはplayerにみたいなことをやりたいってこと? 
477: 名前は開発中のものです。 [sage] 2017/06/18(日) 22:12:26.43 ID:Ga9T3hxB(9/9) AAS
 >>476 
 そそ。インスペクターにドラック&ドロップでポチポチ設定するのも数が少なけりゃいいけど 
 大量になってくると面倒かつアタッチ先ミスったりアタッチ漏れとかあるから 
 それで自動化って話が出てたから期待しちゃっただけ 
478(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 22:14:14.28 ID:mYx0Ucs7(1) AAS
 初心者です。 
 ボタンを押したらidleからjumpステートにbool値で移ってまたidleにすぐ戻るスクリプトを書きたいのですが。 
         if (Input.GetButtonDown("Bbutton")) 
         { 
             if (currentBaseState.nameHash == idleState)anim.SetBool("e", true); 
         } 
         if (currentBaseState.nameHash != idleState)anim.SetBool("e", false); 
 と書いてみたらなぜかうまくいきました。 
         if (Input.GetButtonDown("Bbutton")) 
         { 
             if (currentBaseState.nameHash == idleState)anim.SetBool("e", true); 
         } 
         if (currentBaseState.nameHash == jumpState)anim.SetBool("e", false); 
 でもこれだと一度押したら永遠とjumpし続けるようになってしまって。 
 ステートがjumpに移ったらフラグが消えるようにと思って書いたのですが、なぜこんな挙動になるのか理解できないので教えてください。 
479: 名前は開発中のものです。 [sage] 2017/06/18(日) 22:17:14.91 ID:nmnJlvzm(8/9) AAS
 コルーチンを使えば解決しますよ 
480: 名前は開発中のものです。 [sage] 2017/06/18(日) 22:25:34.41 ID:nmnJlvzm(9/9) AAS
 そらフラグ立てた直後にステート取得したってアイドルのままだよなぁ?? 
  
 やっぱり必要なのはコルーチンじゃないか 
481(1): 名前は開発中のものです。 [sage] 2017/06/18(日) 23:29:22.76 ID:WNEWBLm8(4/4) AAS
 >>478 
 jumpStateに正しいHash値が設定されてないとか 
  
 たとえば 
 static int JumpState = Animator.StringToHash("歩いてるどー"); 
 みたいなコードになってるとすると 
 永久に==JumpStateは満たせないからジャンプし続けそうだね 
482: 名前は開発中のものです。 [sage] 2017/06/19(月) 01:29:13.74 ID:6qJGZiJQ(1) AAS
 まさかのコルーチンおじさん登場 
483: 名前は開発中のものです。 [sage] 2017/06/19(月) 01:51:55.80 ID:7YbLLl2h(1/2) AAS
 >>466 
 これ説明しだすときりがないんよなぁ 
  
 >3. Awakeで命名規則に従ってFindで設定しちゃえ 
  
 これでうまく動いていたなら、そのコードを微調整してメソッドに切り出して、ContextMenu属性つけて、Resetから叩くようにするだけでもいいかも? 
 Resetはスクリプトをアタッチした時に参照を掴む処理を呼ぶため、ContextMenu属性は任意のタイミングで参照を再設定するために使う感じ 
484: 名前は開発中のものです。 [sage] 2017/06/19(月) 02:40:14.82 ID:7YbLLl2h(2/2) AAS
 >>466 
 ちょっとネタっぽい作りにするならこんな感じとか? 
 エディタ上にしか存在しないオブジェクトを作ってそいつに参照抱えさせて、受け手にばら撒くスタイル 
 ビルド後は撒き手側クラスすら存在しないので、ダメな子であるFindObjectsOfTypeを使っても実行時のパフォーマンスには影響しない 
  
 外部リンク:docs.google.com 
  
 まあこれはあくまでもこんな事もできるというお遊びでしかないので、本気でこれを実用しようとか考えないようにな 
 真面目に作るならEditorWindow使う 
上下前次1-新書関写板覧索設栞歴
あと 518 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.017s