ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A

5
Unity Inspectorでトグルボタンを作成するにはどうすればよいですか?
私はUnityのTerrainツールに似たツールを作成したいと思います。このツールにはインスペクターにいくつかの素敵なトグルボタンがあります: これに似たデザインを実現するにはどうすればよいですか?インスペクターで通常のボタンやその他のUIコンポーネントを作成する方法は知っていますが、ボタンを切り替えるための十分な情報が見つかりません。 これまで、チェックボックスを生成する通常のトグルを使用しました。 var tmp = EditorGUILayout.Toggle( SetAmountFieldContent, _setValue ); if ( tmp != _setValue ) { _setValue = tmp; if ( _setValue ) _smoothValue = false; } tmp = EditorGUILayout.Toggle( SmoothValueFieldContent, _smoothValue ); if ( tmp != _smoothValue ) { _smoothValue = tmp; if ( _smoothValue ) _setValue = …
13 unity 

1
ビューポートの伸縮を防ぐにはどうすればよいですか?
基本的に、ビューポート/ウィンドウのサイズが変更されたときに、レンダリングされたイメージの歪みやストレッチを削除する方法を知りたいです。 次の画像は、私が話している歪み/伸縮の例です。 元の画像(正方形ウィンドウ) 歪んだ/引き伸ばされた画像(長方形のウィンドウ) 理想的には、2番目の画像は水平方向に引き伸ばさずに球体を表示し、より大きなウィンドウサイズを考慮してより多くのシーンをユーザーに公開する必要があります。 これをどのように行うことができますか? 私はOpenGLと連携して画像をレンダリングし、呼び出しを介して透視投影を利用しています。 glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, window.width/window.height, 0.01f, 100.0f) アスペクト比width/heightは、私が出くわしたすべての文書/チュートリアルに従っているので、間違っているとは思わない。しかし、私の疑いは、ストレッチングの問題に影響しているということです。 結果論 正直に言って、この問題についてもっと考えてみると、解答には、フォービィ(y方向の視野)角度とアスペクト比との正比例関係が関係していると信じられていました。 上記の画像を参照として使用すると、幅が拡大する場合(水平方向のストレッチが発生する場合)、レンダリングされた画像の比例性を「固定」する垂直方向のストレッチを引き起こすためにfovy角度を大きくする必要がありそうです。 同様に、幅を小さくするには、フォビ角を小さくする必要があります。 更新: したがって、これをさらに調査した後、次のように視錐台の設定方法を変更することにしました。 gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f) そして、私の期待は正しかったので、比例の問題は解決しました。ただし、希望する結果が得られません。ウィンドウの幅が大きくなると、レンダリングされるイメージは小さくなります(ただし、球体は実際には円形です)。代わりに、球体のサイズをまったく変更しないでください。表示されるシーンの量のみを変更する必要があります。

5
グローバル座標空間からローカル空間に変換するにはどうすればよいですか?
という名前のエンティティが与えられた場合、EntityAローカル座標空間を定義します。ここで、の位置EntityAは原点、その見出しベクトルはX軸、見出しベクトルの法線はY軸です。 グローバル座標が与えられている場合、EntityAのローカル空間で別のエンティティの位置を見つけるにはどうすればよいですか? 例:EntityAのグローバルポジションは(50,50)であり、それEntityBは(80,90)です。では、のローカル空間EntityBでEntityAの位置は何ですか? 編集:数学で簡単に行ってください。

4
今日、ハードウェアレンダリングではなくソフトウェアレンダリングを使用するのはなぜですか?
CPUやソフトウェアのレンダリングとは対照的に、私は想定していますか? 一般に、現在のレンダリングはすべて、GPUベースではなく、OpenGLまたはDirect Xを使用しているように見えますか? 誰かが私にここでいくつかの情報を教えてもらえますか、適切な答えが見つかりませんか?

3
小さく高速なオブジェクトの衝突:トンネリングの回避
編集/更新:私の今の最大の質問は、ステップ3の「t = ...」式が良いアイデアか、それを行うより良い方法かということです。他のほとんどの問題は部分的または完全に対処されていますが、この問題に関するコメントや回答はありません。繰り返しになりますが、分析ソリューションがおそらく必要であり、速度と距離が大きすぎ、オブジェクトが小さすぎるため、私が考えることができる反復/再帰ソリューション(コメントで以下にいくつかを提案します)この種の状況をうまく処理する特別な反復/再帰ソリューションであれば、私は間違いなくそれを受け入れます)。これまでのご協力に感謝します。皆さんはすばらしく、あなたの考えと助けに本当に感謝しています! 小さい高速オブジェクト間の衝突を検出しようとしています。これは、比較的低速であっても、トンネリングが非常に簡単に発生する可能性がある状況です。 レイキャスティングは機能しません。これは、1つのオブジェクトと静止した壁の間ではなく、2つの高速オブジェクト間の衝突を検出しているためです。(レイキャスティングを誤解していない限り?)パフォーマンスは非常に重要です。可能な限り、パフォーマンスの大幅な低下を避けたいと思います。機能的で非常に効果的なクアッドツリー(http://en.wikipedia.org/wiki/Quadtree)を既に実装しているので、以下に説明するように変更して使用します。 編集:時間間隔を短くしても機能しません。このソリューションには速度が高すぎます。つまり、トンネリング衝突の大部分を逃しながら、パフォーマンスヒットが大きすぎるということです。(たとえば、時間間隔ごとに数百万単位で測定される速度で移動する約1単位のサイズのオブジェクトがあるかもしれません...) 提案された解決策: ステップ1: 各オブジェクトの動きを囲むボックスを作成し、それらのボックスを四分木に入力して、衝突の可能性のある初期リストを生成します。次の画像を参照してください(この画像は、ある位置から別の位置に移動する円形オブジェクトと、四角形を生成する動きを示しています。四角形は四分木に供給されます)。 ステップ2:(このステップをスキップしたいですか?) 四分木によって生成される可能性のある衝突のリストを調べます。起こりうる各衝突で長方形が交差するかどうかを確認します。その場合は、手順3に進みます。 編集:以下、ショーン・ミドルディッチは、掃引ボリューム/カプセルの交差点の使用を提案しました(オブジェクトが円の場合)。次の3つのオプションがあります。1)ステップ2を完全にスキップします。2)自分のやり方でステップ2を行います。3)ショーンのやり方でやる。ショーンの方法は私のボックスのアイデアよりも計算コストが高くなりますが、私の方法よりも多くの誤検知を排除し、最終ステップに到達できないようにします。 これらの3つの選択肢のうち、どれが最良であるかについて、経験からだれでも話すことができますか?(この物理エンジンをいくつかの異なる目的に使用するつもりなので、どのソリューションを簡単に測定できる特定のテストケースだけでなく、さまざまな状況で最速で動作する「一般的に最高の」ソリューションを探しています最速です)。 ステップ3: 判別式(つまり、平方根の下の部分)が負または0、衝突なし、正の場合、t =式を使用し、衝突の時間としてt値を使用します(その後、それに応じて位置を簡単に調整できます)。 ..衝突後も両方のオブジェクトが存在し続ける場合)。方程式: t =(-1/2 sqrt((2 a w-2 a x + 2 b y-2 b z-2 c w + 2 c x-2 d y + 2 dz)^ 2-4(w ^ 2- 2 w x + x ^ …

4
forward = downマウスの向きが一般に「反転」と呼ばれるのはなぜですか?
マウスを使用してカメラを制御できる3Dゲーム、特に1人称および3人称シューティングゲームスタイルのゲームを見ると、通常2つの具体的な詳細が見つかります。 デフォルトでは、マウスを前に押すとカメラが上に、後ろに引くと下になります。 これを逆にするオプション(forward = down)は、「Y軸の反転」または同様のものと呼ばれます。 私はそれを理解したことは一度もありませんし、デフォルト設定がオンになっているゲームでかなり混乱してしまうほど、常に後ろ向きに思えます。マウス(または、さらに言えば、首の上に座っている頭のように見えるサムスティック)が遠近法のキャラクターの頭をモデリングしていることは直感的に明らかです。左に移動すると、左に見えます。右に移動すると、右に見えます。、邁進前方頭のプッシュを、あなたが見下ろす...右? 実際、この方向は、フライトシミュレーター、MechWarrior 2などの初期の3Dゲームの多くでデフォルトでした。しかし、ある時点で変更され、人々は直感的な方向を「反転」し、デフォルトで無効にしました。 このデフォルトのカメラコントロールの向きの反転の背後に歴史的な理由はありますか?おそらく、変更の背後にある理論的根拠に関する記事や、それが望ましい変更である理由を示す研究はありますか?

1
エンティティ/コンポーネントシステムでマテリアルを処理する方法
私のE / C実装は、エンティティが単なるIDであり、コンポーネントがデータであり、システムがデータに基づいて動作する基本的な実装です。現在、私はオブジェクトのマテリアルとレンダリング全般に問題を抱えています。単純なオブジェクトの場合、ModelComponentに関連付けられているRenderSystemにModelComponentは、レンダリングシステムが使用する頂点バッファーIDがあります。シンプルMaterialComponentはおそらく色や鏡面強度などを持っているでしょうが、複数のレンダーパスとの単純な変数ほど簡単ではない一般的な「効果」を可能にするのに十分な柔軟性が必要でしたMaterialComponent。 これらの問題を解決しようとして、2つの解決策を思いつきました。 1-超汎用材料コンポーネント このようなもの: struct Material : public Component { ShaderData* shader; std::vector<std::pair<std::string, boost::any>> uniforms; [...] }; レンダリングシステムでは、ユニフォームをループしてシェーダーに渡します。これは遅いと思いますが、私の目的には十分な速さです。 2-別の抽象化レイヤー、MaterialData 特定のマテリアルをラップするクラスを持ち、それは特殊なマテリアルに継承できますが、基本クラスは次のようなものになりますvoid set_shader_constants(ShaderData* d)が、実装は各クラスにMaterialComponent依存し、MaterialDataオブジェクトへのポインターを持ちます。 私がどちらのアプローチを好むかはわかりませんが、これらはどちらも複数のパスや他の複雑なレンダリング技術の主題には触れません。 これを達成する方法についてのアイデアはありますか?

4
2Dゲームで任意の大きな画像を処理する方法は?
質問 本当に大きな画像(ハードウェアがサポートできるサイズよりも大きい)を使用する2Dゲームがある場合、どうしますか?たぶん、私にはこれまでになかったこの問題に対する興味深い解決策があるかもしれません。 私は基本的に、一種のグラフィックアドベンチャーゲームメーカーに取り組んでいます。私のターゲットオーディエンスは、ゲーム開発(およびプログラミング)の経験がほとんどない人です。このようなアプリケーションで作業している場合、「画像を分割する」ように指示するよりも、内部で問題を処理する方が好みではないでしょうか? 環境 グラフィックカードは、使用できるテクスチャのサイズに一連の制限を課していることはよく知られています。たとえば、XNAを使用する場合、選択するプロファイルに応じて、2048または4096ピクセルの最大テクスチャサイズに制限されます。 通常、2Dゲームではほとんどの場合、小さな個別のピース(タイルや変形したスプライトなど)から構築できるレベルがあるため、それほど問題にはなりません。 しかし、古典的なpoint'n'clickグラフィックアドベンチャーゲーム(Monkey Islandなど)について考えてみてください。グラフィックアドベンチャーゲームの部屋は通常、全体的に設計されており、風景に取り組んでいる画家のように、再現可能なセクションがほとんどまたはまったくありません。または、大規模な事前レンダリングされた背景を使用するFinal Fantasy 7のようなゲーム。 これらの部屋のいくつかはかなり大きくなることがあり、頻繁に3画面以上の幅に広がります。現在、これらの背景を最新の高解像度ゲームのコンテキストで考慮すると、サポートされる最大テクスチャサイズを簡単に超えてしまいます。 これに対する明白な解決策は、背景を要件内に収まる小さなセクションに分割し、それらを並べて描画することです。しかし、あなた(またはあなたのアーティスト)はあなたのテクスチャのすべてを分割する人でなければなりませんか? 高レベルAPIを使用している場合、この状況に対処し、内部で(XNAのコンテンツパイプラインなどの前処理として、または実行時に)テクスチャの分割とアセンブルを行う準備をしてはいけませんか? 編集 XNA実装の観点から、私が考えていたものを以下に示します。 私の2Dエンジンは、Texture2Dの機能の非常に小さなサブセットのみを必要とします。実際にこのインターフェイスに減らすことができます: public interface ITexture { int Height { get; } int Width { get; } void Draw(SpriteBatch spriteBatch, Vector2 position, Rectangle? source, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth); } …
13 xna  c#  2d  graphics  textures 

3
リアルタイムマルチプレイヤープラットフォーマーゲームの作成には何が関係しますか?
ネットワーク/インターネットを介して作業したい「協力」機能を備えたプラットフォーマーゲームを作成しています。 今、私はすべてのプログラマーがゲームネットワーキングについて知っておくべきことなどの記事を含むネットワークゲームプログラミングを読み上げたので、ピアツーピアロックステップとサーバークライアント予測アーキテクチャのようなテクニックの違いを理解しています: インターネット上でプレイされるリアルタイムゲームでは、ピアツーピアロックステップは単にオプションではないと結論付けました。 また、プラットフォーマーにとっても、単純なクライアントサーバーアーキテクチャ(何らかのクライアント予測のない)でも、サーバーへのラウンドトリップによって引き起こされるアクションとリアクションの間の遅延により、ゲームプレイが低下することを心配しています。(私は中央サーバーの必要性を排除したいと言ったので、プレーヤーの1人、クライアントだけが実際にこの遅れを経験します)。 これはクライアントの予測を残しますが、プラットフォーマーのような単純なゲームでさえ、これはまだかなり複雑に聞こえます。 マルチプレイヤープラットフォーマーゲーム用の有効なクライアント予測システムを作成するにはどうすればよいですか?

4
プールゲームを正しくシミュレートできる物理エンジンの推奨事項 [閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 6年前に閉鎖されました。 私はゲームのようなプールゲームを作っています。このゲームには、正しい(または非常に正確な)反射反射が必要です。Box2DとBullet Physicsを試しましたが、どちらにもこの問題があります。 この画像の上に壁がある場合、プールゲームで実際のボールの赤い線が予想されます。しかし、エンジンはしばしばグリーンラインのコースを示します。特に、 これは、ゆっくりと動くボールが壁に当たった後に起こります。 急速に動くボールが突然遅くなることがあります。 私は、これらの問題なしで可能な限り正確にプールゲームをシミュレートできる物理エンジンを見つけています。いくつかの推奨事項を入手できますか?今、Newton Game Dynamicsを掘り下げていますが、エンジンが望むものを表示するかどうかはわかりません。次の試行としてPhysXエンジンを検討しており、何も機能しない場合は独自に作成する必要があります。しかし、それは非常に長い時間がかかることは明らかなので、私はそれをしないことを望みます。私の時間を節約していただければ幸いです。そしてもちろん、Box2D / Bullet Physicsによるソリューションも歓迎します。 iOSでC / C ++ / Objective + Cを使用しています。 Box2Dで構成を添付します。 壁 静的ボックス形状 線形/角度減衰= 0.1 反発= 1.0 摩擦= 100 密度= 10 bullet = false 固定回転= false 慣性スケール= 1.0 ボール 動的な球形 線形/角度減衰= 0.1 反発= …
13 physics 

3
Openglの光を理解しようとしている、現実的な太陽光をシミュレートする方法は?
何か間違ったことをしているのか、何かを逃しているのかはわかりませんが、晴れた日のように太陽光をシミュレートしたいです。 オブジェクトが指向性ライトに面している場合、オブジェクトは十分に明るく、問題はありません。オブジェクトを回って戻ってきたところを見ると、暗いです。使用しGL_AMBIENTているので暗すぎませんが、晴れた日には暗すぎます。値を大きくしても、オブジェクトの光に面する側が明るすぎるため、見た目が良くなりません。 また、アンビエントライトにはもう1つの厄介な問題があります。オブジェクトの背面を見ると、形が見えず、無地の色しか見えません。説明が難しい、ここにいくつかの写真があります: オブジェクト前面:http : //i.stack.imgur.com/YW53X.png オブジェクト背面:http : //i.stack.imgur.com/Qufha.png 簡単に見ることができるように、正面が見栄えが良く、その赤いものの形を見ることができます。裏面では、それはプレーンで、同じ形を見ることができません。 今、私はオブジェクトの後ろを見ていること、そして光の方向を見ていることを知っています、そしてそれは正面より暗いはずです。しかし、このように単純に見えるべきではありません。それは、あるオブジェクトを見て太陽光に逆らったときに見えるものではなく、オブジェクトが何らかの形を形成していることがわかります。 OpenGLで同じ(または同様の)効果を得るにはどうすればよいですか? 私の光は現在このように定義されています: float posLight0[4] = {-1.0f, 1.0f, 1.0f, 0.0f}; float ambLight0[4] = {0.5f, 0.5f, 0.5f, 0.5f}; glLightfv(GL_LIGHT0, GL_POSITION, posLight0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambLight0);
13 opengl  lighting 

2
オブジェクトがターゲットを導くために敵の位置を予測する
2Dゲームには、敵に向かって自動的に発砲することでプレイヤーを支援するAIタレットがあります。敵の現在位置をターゲットにするのではなく、インテリジェントに発砲させてターゲットをリードさせたいと思います。したがって、敵と砲塔の発射体の両方の(常に一定の)速度と位置ベクトルが与えられた場合、発射体が敵と交差(およびヒット)するために砲台が目標とする実際の位置を表すベクトルを見つけるにはどうすればよいですか? 数学、アルゴリズムなどを説明する記事へのリンクはありがたいです!
13 algorithm  ai  aiming 



3
Tilemapからすべてのタイルを取得する方法は?
TileMapUnity の新しいシステムを少し試しましたが、リストまたは2D配列としてタイルにアクセスする方法を探していましたが、GetTile(Vector3Int vector)1つのタイルのみを返すもの以外は見つかりません...方法はありますか?これをする ?
13 unity  tilemap 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.