1read 100read
2013年01月ゲ製作技術46: C# C# C♯ でゲームを作ろう Part2 (359)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
テトリスを作る (756)
不思議なダンジョンオンライン (207)
アクションゲームツクール総合■9 (804)
ゲームプログラマーの技術レベルは高い。 (670)
汎用ゲームエディター『Multimedia Fusion2』 11 (350)
Kazukiの同人3DRPG制作【第三話】 (729)
C# C# C♯ でゲームを作ろう Part2
- 1 :2010/11/21 〜 最終レス :2013/01/06
- C#でゲームを作ろうと思う人が情報を交換するためのスレです。
テーマはアクション、パズル、RPG等なんでもOK
C#ゲーム製作@wiki
http://www21.atwiki.jp/csharpgamedev/
前スレ
C# C# C♯ でゲームを作ろう Part1
http://hibari.2ch.net/test/read.cgi/gamedev/1212989813/
- 2 :
- [C#解説サイト]
連載 改訂版 C#入門
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html
C# によるプログラミング入門
http://ufcpp.net/study/csharp/
[書籍]
プログラミングC# 第5版
http://www.oreilly.co.jp/books/9784873113968/
ゲームプログラマになる前に覚えておきたい技術 ※C#で書かれてないので注意※
http://www.shuwasystem.co.jp/gpro-sp/index.html
Microsoft XNA Unleashed グラフィックスとゲーム開発
http://www.borndigital.co.jp/book/detail.php?id=66
Microsoft XNA ガイドブック XNA ゲームプログラミングの基礎
http://www.borndigital.co.jp/book/detail.php?id=67
XNA Game Studioではじめるゲームプログラミング
http://www.o-kagen.gr.jp/release.html
[関連スレ]
【Xbox360】 XNA Game Studio その6 【C#】
http://pc11.2ch.net/test/read.cgi/gamedev/1210637248/
- 3 :
- >>1乙
- 4 :
- 乙
- 5 :
- WPFでゲーム作成だ
- 6 :
- 盛り上がらんなー
- 7 :
- 実際のところ、同人ゲーム製作やゲーム製作のための補助ツール製作にC#使ってる人は割りといるっぽいんだけどなー。Twitterとか見てても。
- 8 :
- C#はゲームそのものを作るよりも
ゲーム作成ツールを作るほうがいいわけか
- 9 :
- C#の大きな利点であるはずのGCが
ゲームにおいては邪魔になるんだよなぁ
それでGCが起こらないようにとメモリの管理に手を出すと
あれ?こんなんするならC++でよくね?
ってなっちゃう
- 10 :
- GC機能を無しにできたらC#がスタンダードになるのになぁ
- 11 :
- 構造体使えばいいじゃん
- 12 :
- >>9 >>10
参考までに教えてほしいんだけど、例えばどんなときに邪魔になるの?
自分は邪魔になったことないので、興味がある。
- 13 :
- Gamefest Japan 2008 Demo
でぐぐる
ちょっと改造して、噴飯物の杞憂に過ぎない事を確認する
以上
- 14 :
- フレームレベルで処理を行ってるゲームで
わりと負荷のかかるGCが働くとコマ落ちやラグがおきやすい
特にシューティングやアクションなんかのリアルタイム性が重要なゲームだと邪魔になる。
RPGやノベルゲームなら多少コマ落ちしても気にならないだろうし
ちゃんとGCの動作まで考えてプログラミングすれば邪魔にはならないとは思うけど、
自分はそこまでするならC++でいいやってなった。
- 15 :
- >>14
なるほど、回答さんくす。
ゲーム製作でC#が使われないのは、個人的には環境依存度が
C++と比較して大きいからだと思う。
.NET必須、かつXNAやSlimDX等でランタイムが必要で、
配布方法や対象者に制限が付くとなると嫌がる人も多いのでは。
- 16 :
- 思いっきりアホなことして、毎フレームGC発生させたけど
うちじゃ3msぐらいで収まってるな
余所の環境だと違うだろうけど、ちょっとこれで試してみ
ttp://99hagelo.net46.net/up/img/low392.zip
ソリューションロードして、F5押して、画面が表示されたらEnterキーを一回
要PS1.1
- 17 :
- >.NET必須
- 18 :
- GCってそんなに働き者だっけ?
メモリが足りなくなったときしか働かないイメージがw
- 19 :
- 2chてさ、適当な事書いとけば
オタ豚が真っ赤な顔して正しいことを調べ廻ってくれるから
スゲー 便利www
- 20 :
- 実力が身に付くのは調べまわった豚
- 21 :
- 調べまわった人より効率よく知識が入るという・・・
まぁそれはそれとして、GCの頻度は割とこまめ。
STGで大量に玉をnewで飛ばし続けてタスクマネージャで使用目盛り見たら、予想に反して増える気配がなかったのでかなりこまめにGCしてると思われる。
- 22 :
- GCの話ししてるのにモニタリングの仕方すら知らないとか
円周率=3ぐらい痛々しい
- 23 :
- C#でできるアプリは大雑把にわけて4種類。
コンソールアプリ
コマンドプロンプトで、文字ベースのアプリケーション
Windows Formsアプリ
一般的なGUI。Windows95からの「Windowsっぽいアプリケーション」
XNAアプリ
ゲーム用のアプリ。グラフィックの表示、ゲーム用コントローラーからの入力、サウンドなどをサポート
WPFアプリ
GUI。Windows Formより高性能だが、処理が重い。
- 24 :
- .NET CLRのメモリ管理に関する最低限の基礎知識(Xbox360上のXNAとは異なる)
・.NET CLRのGCは効率的な世代別GCを採用している
・CLRはメモリをG0/G1/G2(G=Generation)/LOH(Large Object Heap)の4つの領域で管理する
・〜.NET3.5:同時実行GC .NET4/Silverlight4:バックグラウンドGC
・同時実行GC:Full GCの実行中にG0/G1のGCが実行できない。
新たな割り当てができなくなった段階で、Full GCの終了まで中断される。
・バックグラウンドGC:Full GCが実行中でもG0/G1のGCが実行できる。
中断される回数が大幅に減少し、中断された場合でも中断時間が短くなる。
.NET4でコンパイルするか、App.configで.NET4対応にするだけで改善が期待できる。
>>19-22
掲示板に書ききれない話が行間に山ほど含まれてるので、一度調べてみるといいよ。MSDNマガジンの関連記事読むだけで全然違う。
>タスクマネージャで使用目盛り見た
せめて、管理ツールのモニタツール使ってパフォーマンス カウンタ見てくれ…。もっと踏み込むならメモリ プロファイラ使いたい。
>>23
Silverlightも入れてよ。次期リリースの5はもっと凄くなるよ。
Immediate Mode Graphics SupportでGPUを活用できるようになって3D(光源、テクスチャマッピング、アルファブレンディング)がサポートされる。
- 25 :
- >>16はG0で済ましているから負荷が軽い
- 26 :
- なんや知らんが、秒間60回のフレームループの中で
newをやっちゃダメだよ。
- 27 :
- なんか落とし穴とかわかりにくい
foreachとか駄目なんでしょ?
- 28 :
- >>27
何がどうダメなのか具体的に
- 29 :
- 動かすターゲットによって目標とする最適化の程度は異なる。
.NET CLR:世代別GC(.NET Framework/Silverlight)
.NET CF CLR:マーク&スイープGC(Xbox360/Zune)
.NET CF CLRはGCのコストが桁違いに大きいため、徹底的にGCを排除すると大きくパフォーマンスが上がる。
.NET CLRでは>>16>>25の言うようにG0/G1のGCのコストが小さいので、全部最適化するだけの労力に見合った効果が得られない。
.NET CLRはG2の発生が抑制されていてG0の発生頻度が1フレームより長ければ問題ない。
この状態を保てている範囲なら1フレーム未満の寿命しかないインスタンスを作り捨ててもいい。
もっと長い寿命を持つインスタンスの生成は、G2ヒープ/LOHにどのくらいのペースで積まれるかによって上限が決まるので、
プロファイルをとってヒープに積まれたインスタンスの生成元を調べて、最適化の効果が大きく簡単に改善できる個所から手を入れましょう。
これ以上の最適化は手段と目的が逆転するが大丈夫か?
- 30 :
- SwapArrayやRingBufferを使えばforeachできない
これはIEnumeratorを吐く関数を作ればいい
- 31 :
- みんなすげえよく知ってるな。どうしても速度がほしくなったらここら辺のレスを元に掘り下げることができそうだ。サンクス
- 32 :
- Winではとりあえず毎フレームGen0GC入れとけば劇的に安定するよね
- 33 :
- ちがうよ ぜんぜんちがうよ
- 34 :
- XNAのロボットゲームが非会員でも落とせる
ようになっとる
結構ぬるぬる動く
- 35 :
- C#でhtml文をパネルにしてくれるようなクラスってない?
- 36 :
- IEコンポーネントでHTMLをホストしたいならWebBrowser使う。
IE以外だと
GeckoにはActiveX版があってC#からも呼んで使える。でも↓の方が便利。
GeckoFX(ActiveXを使わず直接使ってる。あと開発者のアンドリューさんは日本語ちょっと話せるらしいw)
完成したらWebkit.NETも有望そう。
マークアップ ランゲージ(ML)でUI定義したいならWPFのXAMLがまさにそれ
WinForms用ならWFML(http://windowsclient.net/articles/wfml.aspx)あたりだろうか?これは使ったことない。
>>34
なにそれkwsk
- 37 :
- >>36
どれが使えるかわからんから、いろいろ調べてみるよ
ありがとう
- 38 :
- >>36
XNAの有料チュートリアルだった
補完のあるボーンアニメーションやパーティクル
木構造のデータ管理、AIなどが一通りそろっている
割と平易
XNAやC#以外でも使えると思われ
なにより軽い
- 39 :
- ttp://www9.uploda.tv/v/uptv0001083.png
C#を使っているために処理が重いのは
このグラフの左端のたった平均2msの部分
↑の人達はこの処理が重いからC#はダメだ(笑)
とか宣っていたんだから
今どんな気持ち?
宦Q__宦@
♪ | ノ ⌒ ⌒ヽハッ
/ (●) (●)
| ( _●_) ミ
___ 彡 |忿 ミ
ヽ___ ヽノ、`\
/ /ヽ <
/
- 40 :
- >39
そのPCのスペックは?
- 41 :
- 何故自分の環境で動かさないのか?
宗教的理由でC#のソースをコンパイルすると死ぬんですね
わかります
P4 2.80
メモリ 1G
- 42 :
- ていうか、それをC++で実装した場合との比較はないの?
- 43 :
- C++の方が速い
あたり前だ
なんで実装してまで調べる必要があるんだ?
頭の中のお花畑ぐあいをちょっと聞かせ
てくれないか?
- 44 :
- ちょっと落ち着けw
C#自体の速度は最適化してないC++並みって知らない人は置いとくとして
意図しないタイミングでのGCは避けるべきだけど、(PCでは)極端に忌避する必要はないって話に落ち着いてたでしょ
>>38
ロボットゲームってまんまRobot Gameなのかw
試してみるthx
- 45 :
- GCについてどうC++と比較するつもりなんだ?
- 46 :
- newはC++より一桁速い。それは何故か
ってとこからC#のメモリ管理について延々と語れるけど、それをやるには掲示板は狭すぎる。
世代別GCは一般に思われているより高速。
(何倍も時間かけて)C++で作ればC++の方が早い。
どの言語で作っても結局は描画にかかる時間が大半を占める。
- 47 :
- DirectXの情報がどうもないと思ったらXNAってもんがあるのかw
C#+DirectXで作っちゃった・・・
でも、苦労はあんまり変わらないような・・・
- 48 :
- と思ったら結構臭いな>XNA
C#は混沌としてるな
- 49 :
- 薄いwrapperが欲しいならSlimDX
- 50 :
- 2011年になろうかと言うときに
Managed Xとか…
釣りやなw
C++/CLIでツール作成ならまだ疑う余地
もあったけど
- 51 :
- あげておくか
- 52 :
- いや、だから、タイミングや状態もわきまえずnewする時点で、
言語がなんであろうと以下略。
- 53 :
- そうでもない
インタプリタが遅くてnew自体のコストなんか誤差になるような言語処理系は
スクリプト言語ではわりとある
- 54 :
- いや、だから、タイミングや状態もわきまえずnewしていいなんてどこに書いてあるよ?
やっちゃダメ>>26と、管理されていればやってもいい は全然違う。
それだけの開発コストを投入するに値する根拠ってあるの?
C#はインタプリタでもスクリプト言語でもない。
newのコストは誤差(C++より速い)の範囲内。動作速度はJITされるため一度動き出せば最適化していないC++並み。
で、GCのコストをどう見積もってどこまで対策するのかって話なんだが…
- 55 :
- 開発コストを投入するに値する根拠?
知ってると思うが、new ってのは mallocなんだぞ。
メモリの消費状況によっては、そこでスワッピングなどの
ディスクアクセスが発生する恐れもあるんだからさ。
で、ガベージが作動すりゃ、freeなわけだから、
そこでまたディスク沙汰に、なりかねないわけだ。
ソノヘンがわかってりゃ、例えば敵の弾の発生時にnewなんて
恐ろしくて恐ろしくて・・・
描画時のnew Color とかnew Fontなんてのにも注意しないと。
だから new は、ループに入る前とか、別のスレッドでやるとかがセオリー。
- 56 :
- C#の絶対性能がC++より低いなら、その低い性能で足りる範囲でゲームデザインすりゃ済む話だろう。
見積もりを検討するなら、プロトタイプ組んで実測すりゃ済む話だろ。
全部アセンブリで書くならまだしも、C#やらC++で書いたゲームのソースコードだけ見て、事前に精密な見積出せるわけない。
そんなもん、言語仕様以前のレベルの話だ。
なのに、事前に脳内で結果が分かって当然って前提を置こうとしている時点で、>>54は全くゲームのコード書いたことが無い、脳内クリエイターかなんかなんだろうよ。
どうせ、C#の方が簡単そうだけど絶対性能で負けるなら何となく格好悪いから使いたくない、とかその程度の発想でウダウダ食い下がってるだけだと思うぞ。
- 57 :
- >>55
G0/G1ヒープがスワップアウトってどんな環境だw
敵の玉やFontなんて真っ先に
>最適化の効果が大きく簡単に改善できる個所
として槍玉にあがるとこじゃん。
プロファイルに基づかない最適化は害でしかない。
まぁ、終わりのない自己満足の最適化ゲームやりたいなら止めないけど
>>56
>事前に脳内で結果が分かって当然
主張しているのは真逆の事。誤読乙
- 58 :
- 昔のJavaスレをみるようだ歴史は繰り返すなw
- 59 :
- まあ、要するに、newの使いどころをわきまえてりゃ、
ガベージがドーノコーノなんて話が出てくる必要もないわけで。
変なタイミングでnewするから、変なタイミングでガベージが動くんだぞ。
最初に書いたように、フレームループの中でnewしないように注意なんてのは、
プロファイルとやらがドーコー言う以前の、技術の基礎だからな。
- 60 :
- 上のRobotGameでもふつうにnewしてGCしてる
クラス設計 特に継承を使った設計が
頭の中にないと なんでnew禁止が辛いのか
理解できないので
会話にならない
- 61 :
- 俺がゲーム開発のノウハウ教えてやんよ
と、息巻いてる奴に限って
英語コンテンツは一切目をとうさず
シェーダーも使えない
悲しい現実
- 62 :
- >>61
あんなすごい技術を使ってても可愛い女の子の1人も出てこない向こうのゲームってなんなんだろうな?
って俺はいつも思うんだ
- 63 :
- >>59
newの使いどころをわきまえる為に、.NET CLRのGCの特性を理解して使いましょうって話をしてるんだよ。
必死に無駄な最適化をしている君は実に馬鹿だなぁ
無駄な努力をするのは別にいいけど、誤った知識を広めて人に迷惑かけんなよ。
- 64 :
- >>62
脳が腐ってる気もするけど、同意。なんだろう、ロリコンって少ないのか?他の国じゃ。
- 65 :
- new と同様に注意しなきゃならんのは、Listで定義した配列のAddとRemoveだな。
多くの場合、Addの直前にnewしてるんだろうけど。
フレームループの中で有効件数が変わるような配列(敵の弾とか)は、
最大値を設けてあらかじめその数だけ取っとくなりしないと。
- 66 :
- newのコストとかGCのコストなんてゲーム作ってくうちにネックに成ったら考えれば良い話。
簡単なパズルゲー、ノベルゲーなら多少フレーム落ちてもたいして問題ないし。
- 67 :
- >>65
List<T>の内部配列のサイズはオーバーするたびに2倍になる。Removeされても縮小は行われない。
なので、そのせいでフレームレートが落ちるようなことは100%ありえない。
- 68 :
- 縮小は行われなくても、インデックスの更新などがあるからねぇ。
まあ、パズルやノベルなら、確かにさほど気にせんでもいいが。
おれが今作ってるのは音楽ゲー系(Javaだけど)だから、
タイミングにはイロイロとシビアでねぇ。
- 69 :
- 指数関数的に内部配列を拡張していって縮小はしないのはC++のvectorやJavaのArrayListなんかでも見られる
ごく一般的な動的配列の実装なんだけどな
上でもnew ColorがGCに影響するとかnewがmallocとか見当違いのこと言ってるし
- 70 :
- CPUの進化ってすごいんだねぇ。
ここの連中のおれへの反論を見ると、
そう思っちまうねぇ。
- 71 :
- もうその話題は終わったよ
- 72 :
- 音ゲにNPC AIもステージ設計も無いもんな
むしろ事前初期化ぐらいしかやる事なさそ
- 73 :
- おれの場合、MIDIを使って、既存のデータで遊べるようにしてるから、
そのMIDI関連の調査には、チョットばかし苦労したねぇ。
最近はソノヘンの資料が少なくてねぇ。
何とかならんのかねぇ、あの叩いてから音が出るまでの遅延。
マックならそれほどひどくもないんだが・・・
- 74 :
- JavaのGCって.NETのと比べてストップザワールドを起こしやすいし
値型を定義できないしジェネリックも飾りでボックス化が発生しまくるからゴミも多発しやすい
インデックスの更新ってほんとにそんなものがボトルネックになったことあるのか?
知りもしない調べもしない測りもしない
- 75 :
- そんなものがボトルネックになったことあるのかって?
そういうリスクを未然に防ぐ作り方を心がけてるから、
知りもしないでいいし調べもしないでいいし測りもしないでいい。
おれがおれのやりかた。
- 76 :
- 本人がキチガイ認めて完結
- 77 :
- なんだ、やっぱりキチガイが妄想を根拠にした俺理論で騒いでたのか。
通りで理詰めで説明しても通じないわけだ。
>必死に無駄な最適化をしている君は実に馬鹿だなぁ
>無駄な努力をするのは別にいいけど、誤った知識を広めて人に迷惑かけんなよ。
- 78 :
- 調べも測りもしない上に使ってる言語はJava
思慮に値しない戯言だったって事だな
- 79 :
- それぞれを比較できる幾つかの数値的な根拠なりなんなりを出していない時点でどっちもどっち。
- 80 :
- ID違うけどお前さん◆4xAJeG.COMの捨て台詞みたいな事言ってるな。
まぁ、実際に問題なくゲーム(Robot Game)が動くのが何よりの証拠。お前の目は節穴か。
- 81 :
- このスレはゲ製板を象徴するようなスレだな。ダウトだらけ。本当にコンスタントにゲーム作ってる人いるんかね。
- 82 :
- ここまでほとんどゲーム関係ないじゃん
純粋に.NETの知識としては特定の人以外はそんなに間違ってはいない
- 83 :
- ゲーム関係ないw。いらないなこんなスレ
- 84 :
- C#の話題ならム板で事足りる。
最近の流れはヲチとしては面白い。
- 85 :
- >>84
何の話しする?
どうして いきなり興奮してるの?
教えて 84
- 86 :
- 俺より難しいことを知ってる奴はゲームなんか作ってない
はい これ繰り返し言ってみなさい
ね、 落ち着いたでしょ
- 87 :
- C#で作ることのメリットデメリットは実行速度・ライブラリと組みやすさってのはわかってるし、特に言語にまつわるできるできないもそんなにないし。
SlimDXやXNAの話題は専用スレもあるし、
このスレの価値はこれらのライブラリを比較することと、C++に根本的にない文法で実装した方法紹介ぐらいしかないような気がする。
- 88 :
- yield return
Reflection.Assembly.LoadFrom
シリアライズ
効果
相手は死ぬ
- 89 :
- 何でイテレータがそこに入ってるの?
配列へのforeach(最速)に比べりゃ遅いが
コンパイラが生成するクラスと動作を知ってれば大したコストはないと分かりそうなもんだが
>>84>>87
こういう最適化絡みの取るに足らない罵り合いはム板じゃできんよ。
あっちでやったら"誤差の範囲"と一蹴されて終わってしまう。
- 90 :
- まあ前はXNAのModelMeshCollectionなどの列挙子がクラスとして実装されてて
foreachでガベージが発生してパフォーマンスが落ちるとか騒がれてたくらいだからな
yieldも構造体じゃなくてクラスなのでwindowsではまず問題にならないけど360では問題になるのかも
- 91 :
- vs2010だとC++でも文字列処理の塊みたいなプログラムだと
Debugで実行するとReleaseの1000倍以上遅くなった
Debugで実行すると30分たっても終わらないのに
Releaseで実行すると5秒もしないうちに終わったりする
C#も似たような面がある
Debugで実行すると不安になるぐらいおっそいの
でもReleaseで実行すると問題ないぐらい早く動くの
debugで実行して遅い遅いいってない?(って開発の妨げになることはなるけど)
- 92 :
- 文字列処理ならそうだろうけど、DirectX使ってるときはあまり感じないな
描画がボトルネックになってるとほとんど関係ない気が
- 93 :
- >>89,90
マイクロスレッド yield return
でぐぐるとよい
良かったね 知らない事がひとつ減って
>>91
音ゲーくんのことはもういいよ
音ゲーってそんなもんだ
- 94 :
- 最近のゲームって、このように基礎知識がなってない連中が作ってるのか。
まあガベージコレクション自体、ソノヘンが欠けた技術者?の為の機能だからな。
- 95 :
- 痛々しいな
ツッコミが怖くて技意味のある発言ができなくなっとる
まぁ 嘘臭いからツッコまれるのだがw
- 96 :
- GC自体否定&ゲームに使ってる言語もJava
なのになぜC#スレにくるのか…
- 97 :
- なにしろ今、開発に忙しいからね。
技術味のある発言なんて始めからしてないし。
new に関する話なんて基礎の基礎だから、
技術味なんてご大層なレベルじゃないもん。
- 98 :
- 俺より強い奴はみんなハメ
俺より強い奴はみんなチート
俺よりゲーム開発詳しい奴はみんなゲーム作ってない new
- 99 :
- 開発に忙しいなら尚更こなければ良いのに。
- 100read 1read
- 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
ZUN (266)
学歴低いですがゲーム作れるようになりたいです (333)
【25周年】ロックRレクションを作ろう (206)
汎用ゲームエディター『Multimedia Fusion2』 11 (350)
【同人】作ったゲームを金にする その4 (326)
無料で俺がRPGを作れるようにするスレ (472)
--log9.info------------------
【関西】C.Q.B FIELD BUDDY (804)
みるすぺに関する雑談所Part2 (469)
【2980円】ミニ電動ガンのスッドレ2【値段相応】 (755)
【自信】エアガンにかなり詳しいフリをするスレ【満々】 (920)
【AK47】AKを語るスレ38【AK12】 (770)
#エアタンク総合スレッド【3気圧目】# (477)
【G36C】UMAREX総合スレ【UMP】 (453)
金属パーツ総合スレVol.24 (815)
********* タナカのリボルバー 24 弾目 ********* (229)
【基地害が】 Rに横恋慕 【旦那に嫌がらせ】 (433)
【旧】装備品総合相談part.2【装備品相談part.6】 (382)
マルイの次世代M4ってどうよ? (526)
L96AWSタンにチュッチュするスレ 3チュッチュ目 (719)
大阪泉南大阪グリーキャニオンOGCどうよ (664)
片貝まつり 浅原神社秋季例大祭奉納大煙火5 (799)
花火の火薬から (883)
--log55.com------------------
★2ch.scは何故失敗したのか
★クロール批判要望スレ
★削ジェンヌに文句ある人集合
★迷惑行為報告担当 - 小さな親切募集中 2
★2ch.scへの要望スレ Part3
★かっこう観測所
★スレ立て人キャップ
★2ch.scニュース系板観測所
20140901202409 ■
USA
-