[過去ログ]
【ゲームエンジン】Unity初心者質問スレBuild2 (1002レス)
【ゲームエンジン】Unity初心者質問スレBuild2 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
1: ageteoff [ageteoff] 2019/05/08(水) 14:35:37.58 ID:VDHuk8YT ゲームエンジンUnityを楽しむ初心者による初心者の為のスレ その為「アセットを購入しましょう」「チュートリアルやれ」「ググレカス」等禁止 初心者が親身になって初心者に教える。 又ググレの場合、何のキーワードでググるのか書いてね ●リンク ・Unity(日本公式サイト) http://unity3d.com/jp ・マニュアル http://docs.unity3d.com/ja/current/Manual/index.html ・チュートリアル http://unity3d.com/jp/learn/tutorials ・スクリプトリファレンス http://docs.unity3d.com/ja/current/ScriptReference/index.html ・FAQ http://unity3d.com/jp/unity/faq ・MSDN http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/1
922: 名前は開発中のものです。 [sage] 2020/01/06(月) 12:26:51.42 ID:MVMM0EnC 課金ボタンだけ反応しねえ! http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/922
923: 名前は開発中のものです。 [sage] 2020/01/07(火) 16:39:17.47 ID:N6ynwaTL 反応したと思ったら失敗表示しか出ねえ! http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/923
924: 名前は開発中のものです。 [sage] 2020/01/07(火) 18:44:04.37 ID:oElcyruO >>919 ありがとう。PostProcess は試したんだけど、モバイルでは激重で使えなかったんだ。 >>920 クライアントに30fpsは死守せよと命じられたからね。まあクライアントも開発者も自分だけど… プロファイラみたら、結構スクリプトで処理食ってるんで UniRX で Update() と FixedUpdate() を 置き換えた。Start() に UpdateAsObservable とかで全部書くやつ。 結果、あんまり変わんない、自分の使い方が悪いのか… http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/924
925: 名前は開発中のものです。 [sage] 2020/01/07(火) 18:46:42.17 ID:zmI8ipko インスペクターにセットしないで他のクラスを使うスクリプトの記述方法ってあるのでしょうか? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/925
926: 名前は開発中のものです。 [sage] 2020/01/07(火) 18:53:21.15 ID:N6ynwaTL クラス継承じゃなくて? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/926
927: 名前は開発中のものです。 [sage] 2020/01/07(火) 19:11:47.36 ID:zmI8ipko >>926 なるほど!早速試してみます! 継承というのは: MonoBehaviorの部分を好きなクラス名に変えれば良いんですよね? 継承するクラスは一つしか選べないのでしょうか? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/927
928: 名前は開発中のものです。 [sage] 2020/01/07(火) 19:15:14.41 ID:zmI8ipko C# 継承 複数で検索したら一応解決しました! 調べればすぐ分かることを聞いてしまってごめんなさい。 ありがとうございました! http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/928
929: 名前は開発中のものです。 [] 2020/01/07(火) 19:34:51.14 ID:mTxkaJC9 聞く方もわかっていなければ、答える方も分かっていない典型だな http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/929
930: 名前は開発中のものです。 [sage] 2020/01/07(火) 20:11:34.92 ID:uM5ClZyr 質問失礼します 3人などの複数人で開発する場合に自分のみが有料アセットを所有しておりそれを使いたい場合のプロジェクトの管理方法はどうするのが一般的ですか? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/930
931: 名前は開発中のものです。 [sage] 2020/01/07(火) 20:25:27.78 ID:d7S3IRng >>924 Updateの呼び出しじゃなくて中身が重たいんだと思われ deep profile すれば具体的なメソッド名まで追えるから、まずはそれで負荷の高い処理を特定しましょう http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/931
932: 名前は開発中のものです。 [sage] 2020/01/07(火) 21:31:22.74 ID:oElcyruO >>931 アドバイスありがとう。 詳細プロファイルみたら、どうやら処理の中身で gameObject.name.Contains("Hoge") とか 多用してるとこが処理コストが高いっぽい。 地道にプロファイラ見て、重そうな箇所をつぶしていくしかなさそうだね。 自分の使い方がこなれてないので、UniRX 自体は良さそうだと思った。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/932
933: 名前は開発中のものです。 [sage] 2020/01/07(火) 22:21:07.64 ID:zmI8ipko >>929 確かにわかっていないので今まで通りpublicかシリアライズでインスペクターに表示して他のクラスを貼り付けたオブジェクトを入れています。 なにかこの作業を省略出来る方法はあるのでしょうか? 継承について聞けて調べた事は今後活かせる事もありそうなので感謝しています! http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/933
934: 名前は開発中のものです。 [sage] 2020/01/08(水) 00:37:03.99 ID:Hvk3XDsR Updateの中でFindはさすがにStartでやってキャッシュしないとそりゃそうなるな…… http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/934
935: 名前は開発中のものです。 [] 2020/01/08(水) 04:02:14.62 ID:yDUxVkXo Unityを触り始めた時、プレイヤーやエネミーなど、画面に表示するキャラクターは、GameObjectを継承した子クラスとして作るのかと思っていたのですが、そうではないですよね。 この様なプログラムに初めて触れるので今でも違和感があるのですが、何故この様な仕様になっているのでしょうか? また、この様な実装方法は、デザインパターンで言うと、何パターンになるのでしょうか? ご存知の方、いらっしゃいましたら、教えて頂けると嬉しいです。 お願い致します。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/935
936: 名前は開発中のものです。 [] 2020/01/08(水) 04:34:56.94 ID:7cplqCOI >>933 ゲットコンポーネントすればわざわざインスペクタで指定しなくていい 基本他のクラスファイルはそのまま使える またネームスペース指定してるならusingで指定すれば使えるよ >>935 ユニティはすべてコンポーネントからの継承 強いて言うならコンポーネントデザインだよ それが分かった所でプログラム出来るようにはならないから無駄な質問はやめようね http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/936
937: 名前は開発中のものです。 [sage] 2020/01/08(水) 07:12:01.63 ID:STEsEzVT 継承が嫌ならインターフェース定義すればいいじゃない http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/937
938: 名前は開発中のものです。 [sage] 2020/01/08(水) 21:12:40.84 ID:c/TDM3Pm >>935 MonoBehaviour を継承して、Update() とか FixedUpdate() とか様々なフックハンドラを実装してく作法だよ。 しいて言えば、GoFのObserver パターンに近いんじゃない。Unity 内部の実装は違うらしけど。 GameObject を継承するんじゃなくて、GameObject に上記の MonoBehaviour 継承クラスを紐づけて動作をさせる。 この仕様だと、GameObject が "複数"の MonoBehaviour 継承クラスの動作を行うことが出来る。 C# は多重継承出来ないでしょ、Unity よく考えられてるシステムだよね。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/938
939: 名前は開発中のものです。 [sage] 2020/01/08(水) 21:25:51.83 ID:c/TDM3Pm 自分も最初 Unity のスクリプトに違和感というか、なんだろうこれは? と思った。 Unity 以外の他言語経験者というか、自分も職業プログラマの端くれなんで、 Player クラスとか、Enemy クラスを定義するんだよな。とか勝手に思って最初そのように書こうとしてた。 でも、Unity には GameObject という規定クラスがあり、それらに対する作用を MonoBehaviour 継承クラスに 記述して GameObject にアタッチ(紐づけ)するという仕組みを理解してからは、腑に落ちたというか納得出来た。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/939
940: 名前は開発中のものです。 [sage] 2020/01/08(水) 21:42:58.57 ID:c/TDM3Pm 書いてて思ったけど、GameObject に拡張メソッド書けば良くね? と思って調べたら、やっぱりそうしてる人いた。 処理コストとか気になるけど、静的 Utuil クラスとか書くより、 拡張メソッド書いたらスマートに記述出来る箇所が山ほどある。 >>935 サンキュー めちゃめちゃ良い気づきを頂いたわ。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/940
941: 名前は開発中のものです。 [sage] 2020/01/08(水) 22:04:58.83 ID:c/TDM3Pm なるほど。GameObject に MonoBehaviour 継承クラス"型" の変数を自由に設定出来ると。 その "型" を "Component" と言いますと。そして、GameObject.GetComponent<型> で自由に変数を取得出来ますと。 最初からそう教えてくれればいいのに。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/941
942: 名前は開発中のものです。 [sage] 2020/01/08(水) 22:07:01.56 ID:c/TDM3Pm Unity 良いね。ほんと好きになったわ。 元々 C# が超強力な言語なんで、とにかくプログラミングが楽しい。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/942
943: 名前は開発中のものです。 [sage] 2020/01/08(水) 22:18:19.80 ID:HHbGzUHS ここはお前の日記帳ちゃうで http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/943
944: 名前は開発中のものです。 [sage] 2020/01/08(水) 23:36:42.85 ID:Le5pG30A >>942 まあ、みんな一度はそう思うんだけど、ゲームを作ってる以上、次はC#はもちろんUnityならではボトルネックの最適化でつまずくんだよなー http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/944
945: 名前は開発中のものです。 [sage] 2020/01/09(木) 01:04:08.75 ID:9Vcb+knu そこでJobSystem,Burst,ECSですよ http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/945
946: 名前は開発中のものです。 [sage] 2020/01/09(木) 02:30:18.61 ID:mwK+f391 DOTSはまだ早い http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/946
947: 名前は開発中のものです。 [sage] 2020/01/09(木) 10:09:19.78 ID:kIaaP1cE JOBSYSREMとかビジネス啓蒙系のサイトっぽい名前 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/947
948: 名前は開発中のものです。 [sage] 2020/01/09(木) 10:23:49.72 ID:65C13n6s boolの配列で中身の全てがtrueなら○○するという処理はどうやって書けばスマートですか? 今は配列の要素数が3しかないのでifを使った分岐で力技で動かせて居ますが数が増えたときの事を想像すると頭が痛いです。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/948
949: 名前は開発中のものです。 [sage] 2020/01/09(木) 10:47:15.13 ID:9CjsCJlx if文を3つ書いてるということならforeach使おう http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/949
950: 名前は開発中のものです。 [sage] 2020/01/09(木) 11:16:55.09 ID:bvBlalIf 配列数が固定ならFlags付けたenumでビットフラグ使う 動的に増減するなら設計がおかしいんだがLINQのAllを使えば簡単に書ける http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/950
951: 名前は開発中のものです。 [sage] 2020/01/09(木) 11:32:20.48 ID:65C13n6s for(int count = 0; count <= 2; count++) { if(配列[count]== true) { 変数++; } } if(変数 == 3) { 処理 } にしてみたのですが微妙ですか? foreachとlinqはまだ使い方がわからないのですが調べてみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/951
952: 名前は開発中のものです。 [] 2020/01/09(木) 12:00:30.94 ID:AbIkBBD9 1つでもfalseならリターンすればいい そうすりゃ無駄な変数いらんよ あとfor で回す場合、<変数.lengthが使えるから増えても問題なし http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/952
953: 名前は開発中のものです。 [sage] 2020/01/09(木) 12:12:40.81 ID:65C13n6s >>952 count <= 2 の 2の部分を変数.lengthにするという事でしょうか?思いつきませんでした! もし宜しければ 一つでもfalseなら〜の書き方を教えて頂けませんか? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/953
954: 名前は開発中のものです。 [sage] 2020/01/09(木) 12:23:32.35 ID:sMXCo4Ih とりあえず動けばいいって感じ? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/954
955: 名前は開発中のものです。 [sage] 2020/01/09(木) 12:47:54.85 ID:8Z9bXpy1 >>953 https://i.gyazo.com/6f42dd3fc1e186cf49a71820a2aea731.png http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/955
956: 名前は開発中のものです。 [sage] 2020/01/09(木) 13:17:02.96 ID:AbIkBBD9 あとList型に入れると簡単にあるかないか取れるけど、どうなんだろね https://i.gyazo.com/b64c1ec457ab732b3122b3b40da4ccd2.png http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/956
957: 名前は開発中のものです。 [sage] 2020/01/09(木) 13:17:06.70 ID:h4Av5g/u false、trueを入れるときに、変数にして+1、-1しとけばいいやん。0以下なら全部true。 不安なら、たまに時間の許す処理の時にチェックサム。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/957
958: 名前は開発中のものです。 [sage] 2020/01/09(木) 13:17:26.76 ID:65C13n6s >>955 ありがとうございます! この短いコードの中に何故forとifの間に{が必要ないのか、(!b[i])が既にboolを表している等、普通に勉強してたら気付かない事ばかりで尊敬します。。 いつかこういうスマートで格好いいコードが書ける様に頑張ります! http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/958
959: 名前は開発中のものです。 [sage] 2020/01/09(木) 15:42:48.73 ID:ZRX+0Tcv そこ省略すれば偉いってもんでもないから気をつけてな コード長くなってくるとこういうとこはすっきり書いたほうが読みやすくはなるけど http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/959
960: 名前は開発中のものです。 [sage] 2020/01/09(木) 18:15:25.24 ID:IB4d3PvK containsで行けるような bool[] src = {true, true, false, true}; var list = new List<bool>(); list.AddRange(src); bool item = false; if (list.Contains(item)) { /////////////////////////////////////←これ System.Console.WriteLine("{0}が見つかりました", item); } else { System.Console.WriteLine("{0}は見つかりませんでした", item); } http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/960
961: 名前は開発中のものです。 [sage] 2020/01/09(木) 21:40:32.44 ID:L8tG5HPm >>950 ゲームでLinqは悪手 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/961
962: 名前は開発中のものです。 [sage] 2020/01/09(木) 23:26:31.33 ID:2OZqFXaj >>945, 946 サンキュー、そういうの教えてもらえるのは、本当に有意義だわ。 自分にはまだ早いので、しばらくベタで悪戦苦闘して経験値つんでからトライするわ。 現在、物理ゲームパッドで遊んでもらう想定で作ってるけど、一応スマホ画面操作に対応しようと思い、 新しい InputSystem で、Canvas の UI ボタンを使ってスマホ画面操作用のコントローラ作ったけど、 一つもコード書かずに物理ゲームパッド想定のゲームにマッピング出来た。InputSystem 凄い。 でもスマホ画面操作でBダッシュジャンプって超絶むずいね、物理コントローラーなら楽勝でBダッシュジャンプ出来るのに… http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/962
963: 名前は開発中のものです。 [] 2020/01/10(金) 11:30:27.01 ID:08GLxpkh >>961 よければこれの根拠教えてください 次のhp ではfor reach と大差ないとあるけど、何か他の要因? https://qiita.com/nskydiving/items/c9c47c1e48ea365f8995 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/963
964: 名前は開発中のものです。 [sage] 2020/01/10(金) 12:14:16.98 ID:6FaPVqIC >>963 LINQのメソッドに渡すデリゲートは取り扱いを間違えるとGC対象になるし それに関してググって出てくる記事がほぼ全て検証も解釈も間違ってるから使うなというのは分かる http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/964
965: 名前は開発中のものです。 [] 2020/01/10(金) 12:38:04.63 ID:08GLxpkh そう言うことですか ガベージ関連だと初心者が考えなくても まぁ、このスレ的には問題なさそうですね http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/965
966: 名前は開発中のものです。 [] 2020/01/10(金) 12:42:10.82 ID:08GLxpkh だとすると「RINQ がゲームで悪手」というよりデリケート関連が全てのプログラムで悪手であって、メモリー関連の改善待ちとなるのかな? c#のバージョンによる改善待ちになるのか まぁ将来的な課題でしょうかね http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/966
967: 名前は開発中のものです。 [sage] 2020/01/10(金) 12:57:56.83 ID:5Sf2RA1L デリゲートがってよりも、Linqで色々繋げると色々コピーがされるしIEnum経由して列挙してくのがアレって話じゃないか? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/967
968: 名前は開発中のものです。 [sage] 2020/01/10(金) 14:23:25.79 ID:6FaPVqIC >>967 IEnumerableは一つずつ取り出して処理する為の機能だから、 複製はされないしチェーンの数だけループ発生したりもしないよ もちろんToArray()で新規配列は生成されるしOrderBy()でも内部で別のループが生まれてしまうがそれはそういう関数だからな http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/968
969: 名前は開発中のものです。 [sage] 2020/01/10(金) 15:40:25.16 ID:5Sf2RA1L >>968 いやもし5段階に組まれてたら下から見るとMoveNext5回呼ばれる事でやっと元のコレクションなりにたどり着くやん あれインタフェースになってて1番下でのMoveNextでもとのに辿り着くっけ? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/969
970: 名前は開発中のものです。 [sage] 2020/01/10(金) 18:42:11.72 ID:6FaPVqIC >>969 例えばこんなLINQがあるとするだろ var seq = list.Where(A).Where(B).Where(C); foreach(var n in seq) Console.WriteLine(n); 内部的にはこの処理と同じ var tmp = list.GetEnumerator(); while(tmp.MoveNext()){ var n = tmp.Current; if(!A(n)) continue; if(!B(n)) continue; if(!C(n)) continue; Console.WriteLine(n); } 取り出した要素をチェーンに繋いである関数に順番に渡してるだけ 要素一つにMoveNextを何回も呼んでるわけじゃない http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/970
971: 名前は開発中のものです。 [sage] 2020/01/10(金) 19:15:11.60 ID:7KV1Qvxy Linqを許可しておくとRDBMSみたいに組むやついるからな ゲームでそんな使い方されたら激重だから、使わないで統一するのが正解かと http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/971
972: 名前は開発中のものです。 [sage] 2020/01/10(金) 19:55:49.34 ID:Pn9TT9VK linqの冒険… http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/972
973: 名前は開発中のものです。 [] 2020/01/10(金) 21:28:36.70 ID:08GLxpkh >>957 これってプログラムするとどんなコードになるのかな? いまいち浮かばないんだが http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/973
974: 名前は開発中のものです。 [] 2020/01/10(金) 22:12:46.10 ID:lJeo0zER 3dでPlatform does not support compute shadersこんなエラーが出たんだがよくわかんないんだけどどういうこと? ユニティちゃんが原因みたいだけどそれ以上はわからなかった http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/974
975: 名前は開発中のものです。 [sage] 2020/01/10(金) 22:17:28.65 ID:Fenu7wQ/ そのシェーダーを積んでないから描画できないぞゴルァ、かと。 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/975
976: 名前は開発中のものです。 [sage] 2020/01/10(金) 22:52:24.52 ID:L/Emtw4P >>970 そだっけ?その例だとWhereの第一引数に対してMoveNextすることでさらにその上のWhereが返すIEnumにアクセスってなるんじゃ? Linqのコンパイラでそんな最適化しないでしょ http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/976
977: 名前は開発中のものです。 [sage] 2020/01/10(金) 23:26:02.35 ID:XdY5fR78 >>976 遅延評価というものがあるし、そもそもWhereが返すのはIEnumでなく値そのものだからそこのところを誤解してる http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/977
978: 名前は開発中のものです。 [] 2020/01/10(金) 23:40:30.02 ID:lJeo0zER >>974 ダメだわこれ、unityちゃんの配布物全部がshaderエラーになるわ どうなってるんだ急に http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/978
979: 名前は開発中のものです。 [sage] 2020/01/11(土) 00:03:09.69 ID:L2PVl/EJ Platformがなんちゃらっつってんだからそのへんじゃないの http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/979
980: 名前は開発中のものです。 [sage] 2020/01/11(土) 00:19:49.48 ID:MByoB+15 ビルドターゲットをWebGL辺りに変えたんだろ あれはCompute Shaderが使えないからそんな感じのエラーが出る http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/980
981: 名前は開発中のものです。 [sage] 2020/01/11(土) 01:41:24.01 ID:1/8GPuaw >>977 ごめん何言ってるのかよく分からん https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.where http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/981
982: 名前は開発中のものです。 [sage] 2020/01/11(土) 01:45:41.87 ID:1/8GPuaw WhereがIEnum返さなかったら次の人どうやって列挙するの http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/982
983: 名前は開発中のものです。 [sage] 2020/01/11(土) 01:49:41.69 ID:1/8GPuaw >>977 ついでに言うと遅延評価ってのはまさに後からMoveNextした時に評価されることを指すと思うぞこの場合 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/983
984: 名前は開発中のものです。 [sage] 2020/01/11(土) 02:03:49.82 ID:eNMw2FnY >>981-983 実行時の話な var seq = list.Where(...)が返すのはIEnumだが、 実際にforeach(var n in seq)で遅延評価されるときには一つずつの値を返してるし、それが次のWhereに送られてる ループの位置を見てみろ、配列は一回しか回ってないだろ? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/984
985: 名前は開発中のものです。 [sage] 2020/01/11(土) 02:17:15.69 ID:1/8GPuaw >>984 いやだからその展開式みたいに実行時コードがなるって話あったっけ? こんぱいられべるでLINQ特化で最適化しないとそうはできないと思うけど、いや俺が知らないだけかもなのでこう最適化されるよーってソースあるなら教えてくれ http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/985
986: 名前は開発中のものです。 [sage] 2020/01/11(土) 02:34:07.57 ID:eNMw2FnY >>985 yieldのごく普通の振る舞いなんだからイテレーター使ったことあるなら分かるだろ? ちなみに具体的なソースはこれな https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Where.cs http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/986
987: 名前は開発中のものです。 [sage] 2020/01/11(土) 03:28:33.54 ID:MfNXfEnO コルーチンについて質問させてください。 void Start() { StartCoroutine(A()); } void Update() { Debug.Log("update"); } IEnumerator A() { Debug.Log("A start"); for (int i = 0; i < 10; i++) { Debug.Log("A:"+i); yield return null; } } とやって動かすと、ログが A Start A:0 start end update update A:1 になるんですが、最初のUpdateのあとにコルーチンが実行されないのはどうしてですか? http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/987
988: 名前は開発中のものです。 [sage] 2020/01/11(土) 03:42:34.65 ID:eNMw2FnY とりあえず>>969と>>976から読み取ると、LINQで繋がれたメソッドは全部独立したIEnumerableを返してるような誤解をしてるんだと思う 実際は宣言時にチェーンの最後にあるメソッドが一つのIEnumerableを返すだけだし、間にある他のメソッドは最後のメソッドがデリゲートとして一括で実行する だからMoveNextは一つの要素に一回ずつしか基本的に呼ばれず、従ってループも一回だけ これで納得出来ないならもう5個チェーン繋げたら5回ループされてると思っても良いよ、別にそれでも実害は一切無い http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/988
989: 名前は開発中のものです。 [sage] 2020/01/11(土) 11:12:22.12 ID:1/8GPuaw >>988 いやごめん、むしろお前がなんでそんな理解してるのか分からん。 それはイテレーターを書くためのシンタックスシュガーであって、結局はEnumeから列挙するためにMoveMextやら何やら呼ぶことになると思うが。 そもそもお前が言ってるようなループなんてコード上は展開されないだろ あくまでもEnumeのMoveNextやらなんやらで列挙されてくだけで。つか自分があげたWhereのどこ見りゃ途中のものも全部前のが返すEnumeを第一引数として受け取りEnumeを返すってのが明らかだと思うが。 その上でWhereを続けた時などにC#上もしくはコンパイラ生成時に最適化がなされる事はあり得るかも?とは思うけどそう言うこと言いたいんじゃないよね http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/989
990: 名前は開発中のものです。 [sage] 2020/01/11(土) 11:45:27.42 ID:GoAReVTm >>987 >最初のUpdateのあとにコルーチンが実行されないのは 最初のUpdateはスタート直後に動くんだけど、Updateの間隔は不定なので、最初のスタートのオーバーヘッドがUpdateを遅延させてしまい2回ログが出力されたのかと思う これを修正するには Update を FixedUpdate にし yield return null を yield return new WaitForFixedUpdate() にする事で解決は出来る UpdateとFixedUpdate の動作の違いによる処理の仕様なのかな、一言で言うと http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/990
991: 名前は開発中のものです。 [sage] 2020/01/11(土) 12:19:43.31 ID:eNMw2FnY >>989 率直に言ってお前は何を主張したいの? まずそれ教えてくれ そのレスを読むだけだとわざわざ実装のURLまで見せたのにソースも読めない子なんだぁとしか思えん http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/991
992: 名前は開発中のものです。 [sage] 2020/01/11(土) 12:28:16.42 ID:SODcWRcR オーケー、乳首相撲で決めよう 二人とも乳首出して http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/992
993: 名前は開発中のものです。 [sage] 2020/01/11(土) 12:34:46.58 ID:1/8GPuaw >>991 最初はなんか最適化かなんか俺の知らないのあるの?って感じだったけど、今はなんか勘違いしてる人に諭してあげようかなと思ったけど無駄っぽいからもうどうでもいいかな 最後に言っとくけど、おまいのあげたイテレーターのソース、foreachが一つしか展開されないとか言ってるけど思いっっっっっきり勘違いしてると思うよ Whereのイテレータ内で展開してるforeachはソースのイナミュレーターを回してるけどそれは前のWhereが返すイナミュラブルを回してて、それはまた別にforeach x展開してるイテレーターによるものだよ。 と言ってそれはシンタックスシュガーによるものだからforeachが何重になってると言うのともまた違う http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/993
994: 名前は開発中のものです。 [sage] 2020/01/11(土) 12:40:12.52 ID:Y9mLoGJE 初心者スレでイキんなやハゲ http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/994
995: 名前は開発中のものです。 [sage] 2020/01/11(土) 12:46:12.11 ID:wPvGtAaQ 敵に攻撃するとダメージが数字でポップアップされるという処理を var pos = 対象の敵オブジェクト.GetComponent<Transform>()して、 ダメージのテキストをプレハブ化した物をInstantiate(プレハブ, pos)で生成したのですが ダメージのプレハブが敵オブジェクトの子になっているので、敵オブジェクトのHPが0になってDestroyされた瞬間に一緒に消えてしまいます 生成するプレハブの位置を任意のゲームオブジェクトのtransformに重ねるが、子にはしないみたいな事はどうすれば出来るのでしょうか? transformから位置(座標?)だけを取得する方法がわかれば応用が色々出来そうなのですが http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/995
996: 名前は開発中のものです。 [sage] 2020/01/11(土) 13:01:07.21 ID:eNMw2FnY >>993 だろ、やっぱり入れ子になってると勘違いしてるよな? サンプルソース書いてあげたから見てみな IL_009aのループ一度しか無いし中身の取り出しも一回だけ その後でLINQメソッドに渡されたデリゲートを適用してそのままループ内の処理に進んでる https://imgur.com/a/E99qR2O http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/996
997: 名前は開発中のものです。 [sage] 2020/01/11(土) 13:08:04.10 ID:ftB0znZP >>995 ダメージテキストのオブジェクトに、新しいスクリプトをつける。 そのスクリプトのstartに、親を放棄させるメソッドを入れる。 ググリワード transform.parent http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/997
998: 名前は開発中のものです。 [sage] 2020/01/11(土) 13:13:14.92 ID:GoAReVTm >>995 Instantiateする際に GameObject obj =Instantiate(プレハブ, pos) これでGameObject取得できるので、その後すぐに親を外す obj.transform.paerent =null これで敵の子として生成した後に独立する http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/998
999: 名前は開発中のものです。 [sage] 2020/01/11(土) 13:13:52.35 ID:1/8GPuaw >>996 マジで大丈夫? そりゃそこのforeachがループにされてるだけでそこにループがネストするなんて話はこれっぽっちもしてないんだが >>993でもそう説明してるけど分からん?マジでシンタックスシュガーによるイテレーターの実装理解できてないだろお前 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/999
1000: 名前は開発中のものです。 [] 2020/01/11(土) 13:17:05.48 ID:eNMw2FnY 頭悪い子だな http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/1000
1001: 1001 [] ID:Thread このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 247日 22時間 41分 28秒 http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/1001
1002: 1002 [] ID:Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ https://premium.5ch.net/ ▼ 浪人ログインはこちら ▼ https://login.5ch.net/login.php http://mevius.5ch.net/test/read.cgi/gamedev/1557293737/1002
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.107s*