ゲーム開発

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

2
Unityのビルトインフィジックスを使用して、リジッドボディが互いに移動しないようにするにはどうすればよいですか?
オブジェクトをドラッグできるゲームを作ろうとしていますが、物理に問題があります。質量が類似しているリジッドボディを使用すると、ドラッグ時に互いに突き抜けて、不要な動きが発生することがあります。こちらがデモです。 Unity 3Dの組み込みの物理演算のみを使用してこれを実行したいと思います。 デモでは、マウスを使用してオブジェクトをクリックしてドラッグできます。円柱はすべてボックスコライダーと質量10000です。また、向きに応じてさまざまな制約があります(どれも回転できず、すべてxまたはyで制約されます)。球体の質量は1、球体コライダー、およびz拘束です。 球と円柱はうまく相互作用します。ただし、円柱を互いにドラッグすると、交差が発生します。これいらない! 円柱の補間は「補間」に設定され、衝突検出は「連続」に設定されています。'DontGoThroughThings'スクリプトをすべてのシリンダーにスローしましたが、何も実行しないようです。リジッドボディの速度の設定に関しては、以下の両方のラインを使用して、基本的に同じ結果が得られました。 rb.AddForce(speed * diff * Time.deltaTime - rb.velocity, ForceMode.VelocityChange); //rb.velocity = speed * diff * Time.deltaTime; 独自の衝突検出コードを書かなければ、アイデアはありません。簡単な設定や見逃したものはありますか? コンテキストが説明されたので、より正確な質問を次に示します。「デモのシリンダーが互いに移動しないようにするにはどうすればよいですか?」

3
2人のレーシングプレーヤーの同期を保つにはどうすればよいですか?
私は、テンプルランのマルチプレイヤーバージョンのように、Unityモバイルゲームに取り組んでいます。モバイルプラットフォームが原因で、ネットワークのレイテンシが変動している(通常は200〜500ミリ秒)ように見えます。 2人のプレイヤーキャラクターは同じパスに沿って走っているように示され、障害物を通過するために単純なアクション(ジャンプ、スライド、パワーアップなど)を実行する必要があります。 メッセージが遅れると、ゲームはリモートプレイヤーが障害物を通過したと見なします。これは通常はうまく機能しますが、プレイヤーが障害物によって殺された場合、リモートプレイヤーがローカルプレイヤーと同じ障害物/位置で死んでいるように見せたいです。レイテンシが原因で、リモートプレーヤーは、死を告げるメッセージが届く前に障害物を越えたように見えます。 プレーヤーの同期を維持するにはどうすればよいですか? 死のメッセージが届いたらすぐにリモートプレーヤーをローカルプレーヤーの死の位置に戻してみました。視覚的に不自然に見え、他の同期の問題が発生する可能性があります。

1
RK4、デリバティブ、ゲーム物理の理解
Gafferon Gamesには、物理​​シミュレーションを構築するためのRK4統合に関する優れた記事があり、ここにあります:統合の基本 個人的には、私の数学と物理学の知識で改善を利用できます。私はベクトル数学、トリガー、いくつかの統計(ソフトウェアに線形回帰式を使用する必要がありました)などの領域と、基本的に高校レベルから大学1年生までのほとんどの領域で快適です。 質問に答えて、私はこの記事を読み、関連するソースをダウンロードし、1行ずつデバッグして、何が起こっているのかを理解しようとしましたが、それでも私が見ているものを明確に取得していないように感じています。私はインターネットを検索して「For Dummies」バージョンを見つけようとしましたが、正直言って少し違った方法で学習し、暗記に重点を置いて数式をじっと見つめていると、何が起こっているのかを理解する必要があるので、それを削減するつもりはありません。柔軟に適用できます。 これが私がこれまでに理解したことだと思いますが、他の誰かが私を明確にしたり完全に修正したりできることを願っています。RK4はオイラーステップを使用し、それを基に時間を進めて、より基本的にいくつかのオイラーステップ(?)を計算し、加重和を使用して次のフレームの最適な位置と速度を決定しますか? さらに、その加速方法(AS3に変換): private function acceleration(state:State, time:Number):Number { const k:int = 10; const b:int = 1; return - k*state.x - b*state.v; } 一定の質量(10)と力(1)をとりますか?そして、奇妙な計算を返します。なぜかわかりません...-質量*位置-力*速度?何? 次に、私の最後の混乱のために、(AS3)のような評価メソッドで: private function evaluateD(initial:State, time:Number, dtime:Number, d:Derivative):Derivative { var state:State = new State(); state.x = initial.x + d.dx*dtime; state.v = initial.v + d.dv*dtime; …

4
2Dゲームアセットの作成は通常の2Dアートとどう違うのですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 私は過去にデジタルペインティングやコンセプトスケッチをいくつか行ったことがあり、それらのスキルをゲームの制作に活用することを考えていました。 アーティストの観点から、彼のアートワークを「ゲーム準備」または「ゲームフレンドリー」にするために、彼は別の方法/追加で何をしなければなりませんか? Unityで2Dを使用することに主に関心があります。おそらくアイソメトリックビュー(いわゆる2.5D)を使用します。
8 2d  unity  art  assets  pipeline 

2
2D AABBと複数の衝突の解決
わかりました、これは私がかなり長い間理解しようとしてきた問題です。Mineは2Dプラットフォーマーゲームで、ワールドは(通常)不動のタイルとモバイルスプライトで構成され、どちらもAABBを使用してヒットボックスを表します。このゲームは、タイルのレイヤーの移動に伴う複雑さのため、グリッドベースではありません。 衝突を検出し、衝突の深さを簡単に把握できます。「最短軸メソッド」を使用して、スプライトとタイルの間の衝突を解決する方法を決定します。スプライトが垂直よりも水平に深い場合、解決する方向は上または下になります。スプライトが水平よりも垂直に深い場合、解決する方向は左または右です。 これは非常に単純で、かなりうまくいきます。つまり、スプライトが複数のタイルと衝突するまでです。その性質上、各衝突は個別にチェックする必要があるため、衝突が異なると解決する方向も異なる場合があります。たとえば、スプライトがタイルの行を横切って移動しようとしている場合、1つのフレームで次のタイルと交差します。水平深度が垂直深度よりも短いこと。衝突が「左に解決」と言っているので、それは押し戻され、コーナーにスタックします。 私はかなり長い間この問題を何度も何度も検討してきましたが、いくつかの解決策が思い付きましたが、すべてに欠陥があります。特定の側面を到達不能としてマークすることもできますが、グリッドベースのエンジンがないと、「到達不能」の判定は非常に複雑で、特にタイルのレイヤーの移動は常に可能です。 別の可能な方法は、衝突が発生する前に衝突を予測し、衝突のポイントまで移動を「ワークバック」することですが、私はその数学がどのように機能するのかわかりません。 特に80年代のゲームはすでにこの問題を解決しているので、私には信じられないほど明白なものが欠けているように感じます。

2
テキストベースのアドベンチャーゲームで部屋とそれに関連するアクションとインベントリを表すにはどうすればよいですか?
ゲームの作り方を学んでいます。ユーザーが部屋の間を歩き回り、各部屋のオブジェクトを操作できる単純なテキストベースのゲームを作成しました。しかし、私のアプローチが悪いスパゲッティコードの山につながったような気がします。このようなゲームを構築するための良い方法が何かはわかりません。 私のアプローチは、各部屋のメソッドを備えた1つのクラスと、その部屋で実行できるすべてのオブジェクトと相互作用を持つことでした。たとえば、これは調査の方法です。 public static void Study() { bool studyexited = false; while (!studyexited) { string usercommand = Console.ReadLine (); usercommand.ToLower (); switch (usercommand) { case "turn left": GameEventText.StudyLeft (); break; case "turn right": GameEventText.StudyRight (); break; case "go forward": Notes firstsetofclues = new Notes ("First Note"); GameEventText.StudyFront (); string firststudycommand …
8 c# 

1
PhysXを使用して、手続き型地形衝突形状を生成する必要がある場所を予測するにはどうすればよいですか?
この状況では、手順で生成した地形の高さの値があります。レンダリングでは、カメラの位置を使用して適切なサイズの高さマップを生成します。ただし、衝突の場合は、オブジェクトが交差する可能性のある領域に高さフィールドを生成する必要があります。 私の現在の潜在的な解決策は、素朴かもしれませんが、すべての「覚醒」物理アクターを反復処理し、それらの境界/範囲と速度を使用して、物理更新後にそれらが存在する球を生成し、クラスター化されたグループを含む範囲の高さ値を生成することです俳優の。ただし、そのデータの多くは、すでにPhysXによってすでに計算されている可能性があります。 地形の高さの値が必要になる場所を予測するために使用できるAPI、おそらくクエリのセット、または空間システムからのコールバックはありますか?

2
BlenderとMecanim間のアニメーションワークフロー
私は最近Unityの学習を始めました。Unityのアプリストアから入手した標準FBXにカスタムアニメーションを追加できないことは、本当に私を遅くしています。Blenderにインポートすると、アニメーションは表示されません。私は3D Studio Maxも購入しましたが、少しは良くなっていますが、それでもまだ学習曲線は急です。 Blenderまたは3D Studio Maxでアニメーションを作成して、既存のMecanimモデルに適用できますか? 基本モデルを手動で作成してリグし、インポートして、そのアニメーションを別のキャラクターに移動する必要がありますか、それとももっと簡単な方法はありますか?

5
保存したゲームの下位互換性を維持するにはどうすればよいですか?
セーブゲーム機能を追加したい複雑なシミュレーションゲームがあります。私はリリース後も継続的に新機能で更新します。 更新によって既存のセーブゲームが中断されないようにするにはどうすればよいですか?これを可能にするには、どのようなアーキテクチャに従う必要がありますか?

2
テクスチャ画像座標に基づいて球の内側に曲線メッシュを作成する
ブレンダーでは、内部にパノラマテクスチャを持つ球を作成しました。また、別のテクスチャを描画できる内壁に位置する平面メッシュ(球のサイズに一致するように湾曲した)を手動で作成しました。 これは素晴らしいですが、手作業を減らし、スクリプトでこの作業の一部を実行したいと思います。たとえば、パノラマ画像用の変数や、新しいものと置き換えたい写真の領域の座標を持っているようなものですメッシュ。 これを行う際の最も難しい部分は、球の内壁に配置できるコードで曲線メッシュを作成することです。 誰かが私を正しい方向に向けることができますか?

1
古いXPシステムでのDirectXエラー
私は視覚障害者向けのオーディオゲームに取り組んでいる視覚障害者プログラマーです。私はSlimDXを使用しており、XPからWin 8.1までの数十のシステムでテストされています。私のコードはほとんどのシステムで問題なく機能しますが、少数の古いXPシステムでは実行時に次のエラーが発生します。 vupgraderacer.wav SlimDX.DirectSound.DirectSoundException: DSERR_INVALIDCALL:この呼び出しは、このオブジェクトの現在の状態では無効です(-2005401550) at SlimDX.Result.Throw[T](Object dataKey, Object dataValue) at SlimDX.Result.Record[T](Int32 hr, Boolean failed, Object dataKey, Object dataValue) at SlimDX.DirectSound.SecondarySoundBuffer..ctor(DirectSound device, SoundBufferDescription description) at RR.Sound..ctor(String fileName) 同じエラーが、使用しようとするサウンドごとに繰り返されます。DSデバイスのセットアップに使用しているコードは次のとおりです。 dsDevice = New SlimDX.DirectSound.DirectSound dsDevice.SetCooperativeLevel(OGw.Handle、SlimDX.DirectSound.CooperativeLevel.Normal) 設定できるフラグは他にもあることは承知していますが、この基本的な設定は、これまでのところ、古いXPシステムを除いてうまく機能しています。これは私の最初の投稿なので、正しく入力してほしいと思います。そうでない場合は、お知らせください。フォーラムのスクリーンリーダーを使用している場所やスクリーンリーダーを使用している場所を特定するのが難しい場合があります。
8 directx  sound  slimdx 

1
カスタマイズ可能な2Dキャラクターのスプライト作成をどのように処理すればよいですか?
ブラウザベースのMMORPGのアバターアニメーション(スプライト)を作成したいのですが。プレイヤーはキャラクターをカスタマイズすることができ、コンテンツは頻繁に変更されます(新しい武器、鎧など)。すべてのスプライトシートの作成と更新を構造的に管理するにはどうすればよいですか? さまざまな組み合わせの量は、すべての順列を生成するだけでは機能しないほど十分に大きいです。 これはサーバーベースまたはクライアントベースにすることができますが、完全にクライアントで機能する場合は、HTML5 / CSS / Canvas / WebGLだけにしてください。

3
このライティングエフェクトを地形に再現するシェーダーを作成するにはどうすればよいですか?
各画像の主要な光源が地面で反射する方法に注目してください。光源と観察者の間の距離(?)の関数です。 これは(バンプされた)鏡面反射光マップですか?効果はWorld of Warcraftのいたるところに見られます。私は特にダン・モローの雪の上やダロウミア湖のほとりでそれを覚えています。太陽を直視する必要があります。この影響は、RLとCGの水面にもよく見られます。具体的には、光源に近い地表面ほど反射が強く、見る人に近づくにつれて落ちるような効果を作りたいと思います。

4
なぜ近くの三角形が消える傾向があるのですか?
裏面カリングを有効にしたところ、奇妙な動作に気づきました。三角形のすべての頂点がビューの外側にあり、そのうちの2つが背後にあると(私はそうです)、三角形が消えます。 それを見るには、ここにGIFがあります。 投影行列が2つの頂点の順序を逆にし、それらが私の後ろに落ちて、三角形の曲がり方を変えたのではないかと思います。 しかし、すべての頂点が見えない場合にのみ三角形が消える理由は不明です... 可能であれば、この問題を回避するにはどうすればよいですか? それが問題ならLinuxで開発します。 更新: 裏面カリングによるものではない可能性が指摘されています。無効にしたので、実際に再現できます。立方体は20×20で、垂直視野は90°です。垂直方向の見かけのサイズは、ウィンドウをほぼ埋めます。 更新2: では、コードの関連部分を投稿します。投影とビューマトリックスは、自分の関数を使用して設定されます。 void createViewMatrix( GLfloat matrix[16], const Vector3 *forward, const Vector3 *up, const Vector3 *pos ) { /* Setting up perpendicular axes */ Vector3 rright; Vector3 rup = *up; Vector3 rforward = *forward; vbonorm(&rright, &rup, &rforward); /* Orthonormalization (right is computed from …
8 opengl  3d  linux 

3
ボクセルデータの管理
私は今から約4か月間C ++で趣味としてプログラミングをしてきましたが、ボクセルを使ってものを作成するのが大好きでした。私はMinecraftのような世界をレンダリングする「ゲーム」(私は実際には地形のみを行い、ゲームプレイではないので、単なる個人的な挑戦の詳細)を書きましたが、最近、ゲーム/チャレンジ/などを書き込もうと考えていますマーチングキューブやデュアルコンターリングなどのアルゴリズムを使用し、ボクセルサイズを縮小します。Minecraftのようなプロジェクトを書いたとき、各チャンクのデータを符号なしshortの多次元配列に格納しました(したがって、最大65536の異なるブロックタイプが得られます)。さらに、レンダリングのために、1つのポイント(GLubyteとして)ともう1つのGLubyteだけを保存して、6つのポイントのうちどれが表されているポイントに面しているかを示しました。次に、ジオメトリシェーダーを使用して顔をレンダリングしました。 私が考えていた新しいプロジェクトで、頭を包むことができないのは、ボクセルが約1cmサイズのボクセルと比べて約5cmまたは10cmになるのに十分なボクセルデータをどのように保存できるかです。ブロックの704x704x704領域をレンダリングしたとき、私の古いプロジェクトは約670MBのRAMを使用していました。ボクセルサイズを10cmに縮小し、同じレンダリング距離を維持すると、ボクセルデータは約649GBになります(ボクセルごとに2バイトと7040 ^ 3ボクセルの領域を想定)。ボクセルデータをより効率的な方法で保存できる方法はありますか?
8 c++  voxels  data 

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