ゲーム開発

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

1
Unity:1つのレイヤーのみに画像効果を適用する
この単純なシーンを検討してください。 3つの異なるゲームオブジェクトで構成されています。1つの背景画像+ 1つの静的なキャラクター画像+ 1つの小さな部分(ペットと一緒に)アニメーションを実行するために実行時に変更されます。 背景は専用カメラを使用してレンダリングされます。キャラクター(静的+アニメーション)は、別の専用カメラを使用してレンダリングされます。両方のカメラは、異なるカリングマスクで深度のみに設定されています(各カメラはその部分のみをレンダリングします)。キャラクターを担当するカメラは、背景を担当するカメラよりも奥行きがあることに注意してください(つまり、キャラクターは背景の後にレンダリングされます)。 キャラクターカメラにのみ画像効果を適用する必要がありますが、この効果が背景に影響しないようにする方法を見つけることができません。 キャラクターカメラの渦エフェクトの例。 あなたはそのようなトリックをどのように行いますか?

1
OpenGL:フレームが部分的に前後にジャンプする[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 私はSDLとOpenGLでプロジェクトに取り組んでいます。このゲームは、Windows、Linux、OS X、iOSでうまく動作します。ただし、Android版は特に私の電話で問題を示しています。私は別のデバイスをテストしましたが、そこでもうまく機能します。 私が直面している問題は視覚的な不具合です。これはバーストで発生します。たとえば、90フレームは問題なく、40フレームはグリッチです。グリッチ自体は説明するのが難しいですが、私は試してみます。画面が部分的に正しく更新され(携帯電話の上部から約半分まで)、部分的にちらつきます。ちらつき効果は、ある種の前後のジャンプです。ダブルバッファリングに関係していると思います。画面に表示されるのは、フレームごとに前後にジャンプするためです。画面の半分が時間的に1フレーム、次のフレームが2フレーム遅れているようです。エヒタナハの行列のように、私はあなたが言うことができると思います。チャートを下っていくときに時間が経過するチャートにプロットすると、 left half | right half (phone is in landscape) ------------------------ time 1 | 1 1 time 2 | 2 2 time 3 | 3 1 time 4 | 4 4 time 5 | 5 3 time 6 | 6 6 time 7 | …

2
六角形グリッドの範囲内のセルを見つける
最初に-私はここで超高密度になっていることを知っています。 これで、このアルゴリズムのC#実装を記述しようとしています。 var results = [] for each -N ≤ dx ≤ N: for each max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N): var dz = -dx-dy results.append(cube_add(center, Cube(dx, dy, dz))) 私はこの途方もないリソースからこれを取得しました。 私の問題は、これまでに試したすべての実装で、すばらしい結果が得られたことです。たとえば、以下に示すコードは現在、この結果になります。 この: 私のコードは現在次のようになっています: for (int x = this.CellPositionX - distance; x <= this.CellPositionX + distance; x++) { for (int …

1
C ++ / DirectX9で3人称カメラを実装する最も簡単な方法は何ですか
C ++とDirectX9は初めてなので、サードパーソンカメラを実装したいと思います。Quaternionベースのカメラについて読んだ後、私はそれを実装してみることにしました。しかし、それは本当に私の心を吹き飛ばすので、TPカメラを実装する最も簡単な方法は何ですか? カメラがすべきことは次のとおりです。 3DVector(x、y、z)に保存されている座標を追跡する オブジェクトを中心に回転(スムーズ) たぶんいくつかのタイプの「スプリング」=回転後、オブジェクトの後ろの通常の位置にゆっくりと戻ります 私の悪い英語をお詫び申し上げます:私はドイツ人で、まだ学校にいます! 前もって感謝します! 編集: いくつか試した後、私はそれを手に入れました。 私が検討した最大の問題は、ワールドマトリックスから「方向」ベクトルを正しく抽出することでした。 私の研究中に、私はほとんどこのようなものを見つけました: D3DXVECTOR3 direction; direction.x = worldMatrix->_13; direction.y = worldMatrix->_23; direction.z = worldMatrix->_33; D3DXVec3Normalize(&direction, &direction); それは私にはうまくいきません!代わりに私はこれをしました: D3DXVECTOR3 direction; direction.x = worldMatrix->_13; // Consider the .y after the .z! direction.z = worldMatrix->_23; direction.y = worldMatrix->_33; D3DXVec3Normalize(&direction, &direction); スケーリングの場合: // The tenfold …
8 c++  camera  directx9 

3
Unityでの惑星サイズの世界のフロート制限の克服
私の知る限り、Unityで世界の原点から100万ユニットを超えることは、浮動小数点の精度の問題のため、ほとんど不可能です。 半径が1M単位を超える世界を作成するにはdouble、座標にvarを使用するか、いくつかの空間分割手法を使用して、大規模なシーンを階層チャンクに分割する必要があります。最小のチャンクは約10000単位です。つまり、各ワールド空間の位置が表現されます。チャンク階層によって、オブジェクトのインとfloat、最後のチャンク内のローカル位置(および場合によっては回転とスケーリング)を表すvarの束。 どちらの方法でも、これを行うには完全に新しい座標系を実装する必要があるため、Unityでそれが可能かどうか、可能であれば、物理学などの既存のUnityシステムでそれをどのように機能させるかについて知りたいのです。 PS惑星の周りで同時に物事を進行させたいので、プレイヤーが移動するときに世界を原点に移動することはできません。 ありがとう!

2
3D衝突回避:更新された速度ベクトルを見つける(「衝突速度」コーンの外)
私は現在、静的障害物(すべて球の形状)を回避することに焦点を当てており、飛行運動(6自由度)の完全3D衝突回避(ステアリング動作)システムのメカニズムを理解して実装しようとしています。 ただし、移動するエージェントの新しい速度ベクトルを理解する方法はわかりません。次の図は、シーンを示しています。移動するエージェント(緑)は、3つの静的オブジェクト(青)を操縦する必要があります。赤い線は、初期の前方速度ベクトルを表します。 また、3つの白/半透明の円錐があることに注意してください。これらは、各障害物に関する「禁止速度ベクトル」を表します。これは、エージェントの新しい前方ベクトルとして使用された場合に、エージェントが1つ以上の障害物と衝突することになる速度ベクトルのセットです(各コーンの半径は、指定された障害物の半径と等しいことに注意してください)プラスエージェントの半径。これにより、プレイヤーが操作できるようにオフセットを設定できます)。 このような3D環境で移動エージェントの新しい先行ベクトルを見つけるために、3つの障害を考慮して、単純なアプローチは、このよく引用される記事で説明され、次の2D画像で例示される古典的なソリューションを3Dに移植することです。 そこでは、新しい速度(オレンジ色の矢印)は、元の速度と障害物の中心との間の最小距離(黒い矢印)を正規化し、そのような法線に障害物の半径と移動エージェント。次に、各障害物について計算された新しい速度の平均が、最終的な速度の合計になります。 多くの場合、それで十分です。ただし、以下のケースを確認してください(視覚化を容易にするために2Dで例示)。 それらすべてにおいて、ナイーブなアプローチは衝突を引き起こします。aとbでは、最終的な新しい速度は元の速度(赤い矢印)と一致し、移動中のエージェントは部分的または完全にブロックされているにもかかわらず前進します。c)とd)では、新しい速度(オレンジ色の矢印)でも同じ結果になります。 だから、私の質問です:衝突を回避する方法で3つの障害を考慮して、そのような3D環境で移動エージェントの新しい前方ベクトルを見つける最も計算効率の良い方法は何ですか?または、言い換えると、次のような新しい先行ベクトル: 1)コーンの内部にない。 2)は、元の前方ベクトルに最も近い(図の赤い線)。 PS:できれば、私は図書館を探しているのではなく、その方法を学びたいと思っています。

4
インデックス描画は非インデックス描画よりも高速です
6つの頂点(2つの三角形)からなる多数のポリゴンを描画する必要があります。 テクスチャ座標、法線などがない場合、どちらのアプローチでも72バイトになります。将来的には、テクスチャ座標と法線も間違いなく必要になります。これにより、インデックスの描画で消費されるメモリが少なくなります。それほど多くはありません。 だから私の質問は:頂点の重なりが少ないVAOの場合、どちらのアプローチがより速いですか?インデックス以外の描画で消費される余分なメモリは気にせず、速度のみを気にします。 編集:明確にするために。 非索引アプローチ: float[18] vertices = { //Triangle 1 1,1,0, 1,0,0, 0,0,0, //Triangle 2 1,0,0, 0,1,0, 0,0,0, }; インデックスアプローチ: float[12] vertices = { 1,1,0, 1,0,0, 0,0,0, 0,1,0, }; int[6] indices = { //Triangle 1 0,1,2, //Triangle 2 0,3,2 };
8 opengl  rendering  vbo  vao 

2
障害物にスナップするドラッグ可能なオブジェクトを作成するにはどうすればよいですか?
私はまだマウスでドラッグして別の質問(私はC#でUnityを使用しています)を持ちますが、それほど一般的ではない詳細:ドラッグが発生する経路の途中に障害物が存在する(2Dではなく3Dスペース) 。 説明させてください。"obj"と呼ばれる立方体をドラッグしたい平面があるとします。それは簡単です。これが私の簡単な実装です: void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit, 1000000)) obj.transform.position = new Vector3(hit.point.x,0.25F,hit.point.z); } できます。ただし、平面上に障害物である他のいくつかの立方体もあるとします。明らかに、プレイヤーが平面上で「obj」を動かすとき、そのような動きは障害物によってブロックされるべきです。そして、障害物と衝突している間、「obj」はその障害物の側面にのみ移動して移動する必要があります。マウスを動かして "obj"が障害物との衝突をやめると、自由なドラッグスタイルの動きが再開されます。 課題をより困難にするために、障害物でRigidBodyコンポーネントを使用せずにそれを達成するために懸命に努力しています(ドラッグされたオブジェクトはそれを持つことができます)。それを達成するための最も効率的な方法は何ですか?どうもありがとう! 編集:コメンテーターは私の注意を喚起しました、私はスナップするときにオブジェクトが回転することを許可されていることを言及すべきです。 編集2:元の定式化の難しさを考慮して、ドラッグされたオブジェクトでのリジッドボディコンポーネントの使用を許可する質問を変更しました。ソリューションでは、障害物でリジッドボディコンポーネントを使用できません。

2
C#Unityのポインター
ちょっと最近ポインタについて学んだばかりで、c#でそれらをどのように使用できるのか疑問に思っています(c ++でそれらについて学んだばかりです)。でもいくつか質問があります。 ポインターは低レベルのプログラミングを使用してコンピューター上のさまざまな値の位置を見つけます。つまり、任意のスクリプトから変数の値にアクセスできるということですか。 もしそうなら、ロケーションコードだけで変数のロケーションを呼び出すにはどうすればよいですか? C#とC ++のポインターの間に、私が知っておくべき識別可能な違いはありますか? Unityの変数タイプ(Vector3s、Transforms、GameObjectsなど)でポインターを使用するにはどうすればよいですか? さらに多くの質問があるので、追加の情報やソースがあるかどうかを確認します。

0
OpenFLを使用したSceneManagerの実装
OpenFLとHaxeを使用して基本的なSceneManagerを実装しようとしています。OpenFLとHaxeの使用経験はあまりないので、いくつか問題があります。 以下は、SceneManagerクラスの設計方法です。 package; import openfl.display.Sprite; import openfl.Lib; class SceneManager extends Sprite { private var currentScene: ...; public function new(rootScene: ...) { super(); currentScene = rootScene; Lib.current.addChild(currentScene); } public function changeScene(newScene: ...): Void { Lib.current.removeChild(currentScene); currentScene = newScene; Lib.current.addChild(SceneTwo); } } 「...」は、どのシーンでも保持できる一般的な「クラス」タイプに置き換える必要があります。 誰かがこれを解決するのを手伝ってくれるなら、私は本当に感謝するでしょう。

1
シンプルなRPGゲームサーバーを作成するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 4年前休業。 私はSprite Kitゲームに取り組んでいます。私はそれを真のマルチプレイヤーゲームにしたいと思います。つまり、ゲームに参加する各人が自分のカメラを持っているということです。プレイヤーが同じゲーム画面を共有するマルチプレイヤーゲームのチュートリアルを見てきましたが、それは私が望んでいることではありません。 プレイヤーが接続するサーバーが必要であることを理解しています。つまり、プレイヤーが接続する「世界」はサーバー上で実行されている必要があります。これは正しいです? このゲームの「ワールド」を実行しているサーバーをどのようにして使用しますか?特定のタイプのサーバーである必要がありますか、それともNode.jsやその他の必要なものを使用できますか?

3
ゲームのナレーションを録音する
私が作成しているRPGゲームのナレーターです。2つの質問があります。 1)品質:私はマイクと一緒に私の声と共に多くの静的な背景を拾っているように見えるので、全体的な品質はひどい音に聞こえます。ゲームのナレーションに使用する必要がある特定の種類のマイクはありますか? 2)パフォーマンス:ナレーションの品質はゲームにとって重要ですが、オーディオファイルは多数存在します。ファイルを圧縮しながら高品質のオーディオファイルを配信する方法はありますか?ナレーションなので、音声はきちんとしていてクリアである必要があります。
8 rpg  audio 

2
モバイルでの経路探索と衝突回避
現在、モバイルプラットフォーム(iphone5 +)用のDiabloのようなゲームを開発しています。 単純なA *検索でパスが見つかりますが、衝突回避を考慮する必要があります。 同時に約50体のモンスターが活躍するので、パフォーマンスは非常に重要です。 私はうまくいくかもしれないいくつかの方法を見つけました。 NavMesh + RVO リキャスト/迂回ライブラリが上うまく機能pathfinding部分が、その群衆シミュレーションは、迅速(30の物質については5ms以上)の限界に達します。 別のライブラリRVO2は問題ないようです(50エージェントで2ミリ秒未満)。ただし、ライブラリにはライセンスの問題があります。 フローフィールド +物理エンジン 多くのRTSゲームはこの方法を使用していますが、衝突を解決するには物理エンジンが必要なようです。多くのエージェントが共通の目標を共有していない場合、この方法は従来のA *パスファインディングよりもコストがかかる可能性があります。 ステアリング動作 +物理エンジン ステアリング動作には多くの概念が含まれていますが、機能するsimple avoidance behavior可能性はあると思います(正面に何かがある場合は左/右に曲がるだけです)が、この方法でも物理エンジンが連携する必要があります。 どちらを使用するかはまだわかりません。おそらく他のパスファインディングと衝突回避の方法が存在します。 PS Halo:Spartan StrikeはHavok AI(RVOベース?)を使用しますが、そのゲームには多くの敵がいなかったので、最初の方法(NavMesh + RVO)がモバイルプラットフォームでうまく機能するかどうか疑問に思います。


3
回路または電源システム(Minecraftのレッドストーンなど)を実装する方法
Minecraftにレッドストーンシステムのような電源システムを実装したい。 n個の電源とm個のケーブルがあります。電源またはケーブルを外すと、回路がオフになります。 サークルを回避するにはどうすればよいですか?ステータスが「オン」の各ケーブルが近くのケーブルに電力を供給している場合、電源が含まれていない無限の円を作成できます(画像を参照)。プラスのサイトはT = mで実行されるということです すべての電源から開始してグラフを介してパワーバーストを送信でき、各更新コールですべてのケーブルをオフにしました。問題は、T = n * mで実行されることです。 ベストプラクティスはありますか?Minecraftではレッドストーンシステムが非常に遅いため、見落としがあったと思います。 編集:システムは、距離ベースの減衰なしで動作するはずです。

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