ゲーム開発

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

1
2DスプライトのMipマップにより、上の黒い線が発生します。どうしてこれなの?
Unityは初めてです。私はそれを試し、コード優先のアプローチにFutileを使用していますが、Unityシステムを使用してテクスチャをインポートしています。 私が抱えている問題は、ミップマップを使用して、大きなスプライトをギザギザのエッジなしで小さいサイズに縮小すると、スプライトの上に黒い線のアーティファクトが発生することです。 少し見にくいですが、そこにあります。解像度を下げると、はっきりと見えます。 これらは私のテクスチャ設定です: 私の質問は、なぜこれらの黒い線がここにあるのですか?私が犯した間違いですか?それは単なる一般的な副作用ですか?どうすればこれらを減らすことができますか?また、これが間違ったアプローチである場合、ゲームでスムーズスプライトを使用して、スムーズにスケールアップできるようにする方法を教えてください。 ありがとう!

2
たくさんの木を描くための最良の方法は何ですか
木が植えられたランダムな島をレンダリングするアプリを書いています。木は現在2つのクワッドであり、十字で交差し、テクスチャで描かれています。ヤシの木、オーク、草など、さまざまな種類の植物を形成するより複雑なメッシュを使用する予定です。 私が直面する問題は、テクスチャが透明であるため、後ろから前に描画する必要があるということです。Plan-bは、fragシェーダーで破棄を使用することを呼び出しますが、zオーダーの方がより良い結果を提供します。 uniform float uTreeAlpha; uniform sampler2D uTexture; varying vec2 vTexCoordOut; void main (void) { vec4 colour = texture2D(uTexture, vTexCoordOut); if (colour.a < 0.1) { discard; } gl_FragColor = vec4(colour.rgb, colour.a * uTreeAlpha); } 2番目の問題は、カメラとルックアットによって順序が変わるためです。OpenGLで1回の呼び出しでそれらを描画する効率的な方法がわかりません。 現在、私のレンダリングコードは次の疑似コードのように見えます。 if cameraChangedFromLastTime() then sortTreesBackToFront(); end for i = 0 to trees.size() -1 drawTree() end …

3
JavaScriptゲームをiOSアプリストアにデプロイするにはどうすればよいですか?
残念ながらMacを持っていないので、iOS用に開発できません。 ブラウザでHTML5アプリが実行されることを理解していますが、HTML5アプリ(JavaScriptゲームなど)を作成して、Apple経由でアプリストアに展開する方法はありますか?パッケージ化して送信するにはどうすればよいですか?

1
XNA 4.0ゲームへの水のエフェクト(スプラッシュ)の実装[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 6年前休業。 私は2D XNAゲームを作成していて、XNAゲームにウォーターエフェクト(スプラッシュ)を追加するチュートリアルに出会いましたが、それをゲームに実装した後、縮小することができません。現在、画面全体を占めています。 Waterクラスは次のようになります class Water { struct WaterColumn { public float TargetHeight; public float Height; public float Speed; public void Update(float dampening, float tension) { float x = TargetHeight - Height; Speed += tension * x - Speed * dampening; Height += Speed; } } PrimitiveBatch …
8 xna  c#  2d  xna-4.0  water 

2
UnityはC#をスクリプト言語としてどのように使用しますか?
私の知る限り、これまでのところ、C#はコンパイルされた言語であり、常にコンパイルされた言語であると思っていました。私は最近Unity3dの研究を始めましたが、APIを介してスクリプトを作成し、ゲームオブジェクトとやり取りするためのオプションとしてC#を提供していることに気付きました(JavaScriptといくつかの他の選択肢とともに)。 これはどのように行われますか?C#は実際に実行されていますか、それとも、抽象化されて、別のスクリプト言語に変換されていますか?この機能については、ある種の解釈が行われているようです。
8 c#  scripting  mono 

2
ジンバルロックを回避する方法
オブジェクトを回転させるコードを記述しようとしています。 私はそれを次のように実装しました: X軸を中心とした回転は、マウスのy座標の変化量によって与えられ、Y軸を中心とした回転は、マウスのx座標の変化量によって与えられます。 この方法は単純で、軸がZ軸と一致するまで、つまりジンバルロックが発生するまでうまく機能します。 ジンバルロックを回避するためにZ軸周りの回転をどのように利用できますか?

3
AABBを使用した衝突検出の問題
メインゲームスプライトとさまざまなプラットフォームの間にAABBを使用して、単純な衝突検出ルーチンを実装しました(以下のコードを参照してください)。それは素晴らしい働きをしますが、私は今、私のキャラクターを倒すために重力を導入しています、そしてそれは私のCDルーチンでいくつかの問題を示しています。 問題の核心は、私のCDルーチンがスプライトを他のスプライトにほとんど浸透していない軸に沿って戻すことです。したがって、XよりY軸の方が大きい場合は、X軸に沿って移動します。 しかし、今私の(ヒーロー)スプライトはフレームあたり30ピクセルの速度で落ちています(それは1504の高画面です-「通常の」重力をシミュレートしたいので、これだけ速く落ちる必要があります。 )これらの問題が発生しています。私は何が起こっているのか(そして私がそれを引き起こしていると考えていること-よくわかりません)をいくつかの写真で示します(写真の下のコード)。 この問題を回避する方法についていくつかの提案をいただければ幸いです。 明確にするために、上の右の図で、位置が「誤って」修正されていると言うと、少し誤解を招く可能性があります。コード自体は、それがどのように書かれているのか、つまり別の言い方をすると、アルゴリズム自体が正しく機能します。期待どおりに動作する場合はアルゴリズム自体ですが、この問題の発生を防ぐために動作を変更する必要があります。画像内のコメントを明確にしてください。 私のコード public boolean heroWithPlatforms(){ //Set Hero center for this frame heroCenterX = hero.xScreen+(hero.quadWidth/2); heroCenterY = hero.yScreen+(hero.quadHeight/2); //Iterate through all platforms to check for collisions for(x=0;x<platformCoords.length;x+=2){ //Set platform Center for this iteration platformCenterX = platformCoords[x]+(platforms.quadWidth/2); platformCenterY = platformCoords[x+1]+(platforms.quadHeight/2); // the Dif variables are the difference …

2
ボクセルを削除するとグループが分割されるかどうかの判断
私は次の状況にあります:ボクセルの3Dグリッドがあります(オン/オフ、最大サイズはおそらく128x128x128です)。グリッド内では、オンになっているすべてのボクセルが相互接続され、単一のグループを形成していることを事前に知っています。 次に、ボクセルを削除する(オフにする)と、グループを分割するかどうかを判断する必要があります。 私の最初のアイデアは、削除されたボクセルの近傍を見て、それらが他のボクセルを通じて相互接続されているかどうかを判断することでした(他の質問を参照してください:2つのボクセルが相互接続されているかどうかを確認するアルゴリズム)。しかし、これを行うにはより良い/他の方法があるかもしれません。 では、ボクセルを削除すると、そのボクセルが属していたグループが分割されるかどうかを判断するための良い方法は何でしょうか。

4
Unity3D Mobileでのスレッドとコルーチンの混合
Unity3Dにコルーチンがあり、サーバーからzipをダウンロードして永続データパスに抽出し、その内容をメモリにロードしました。フローは次のようになります。 IEnumerator LongCoroutine() { yield return StartCoroutine(DownloadZip()); ExtractZip(); yield return StartCoroutine(LoadZipContent()); } しかし、このExtractZip()方法(DotNetZipライブラリを使用)は同期的であり、時間がかかりすぎて、プロセス中に処理する場所がありません。 これにより、大きなzipを抽出しようとすると(モバイルデバイスで)アプリケーションが強制終了されました。これは、メインスレッドが長時間応答しなくなったことが原因と考えられます。 これはモバイルOSが行うことが知られていることですか(フレームに時間がかかりすぎる場合はアプリを終了します)? したがって、別のスレッドでzipを抽出すると問題が解決する可能性があると想定しましたが、うまくいったようです。私はこのクラスを作成しました: public class ThreadedAction { public ThreadedAction(Action action) { var thread = new Thread(() => { if(action != null) action(); _isDone = true; }); thread.Start(); } public IEnumerator WaitForComplete() { while (!_isDone) yield return null; …

4
Box2Dボールを一定の高さにバウンドさせる
Doodle Jumpのようなゲームを作りたいです。私はlibgdxとBox2dを使用しています。ボールを常に同じ高さでバウンドさせる方法についてアドバイスが必要です。 ボールのボディ復元を1に設定して、常にジャンプできるようにしましたが、ブロックでジャンプすると、「インパルス」が小さくなります。また、衝突を検出してインパルスを加えようとしましたが、うまくいきませんでした。 毎回同じ高さにボールをバウンドさせるにはどうすればよいですか?
8 physics  box2d  libgdx 

1
Box2Dでは、特定のボディの圧縮力を取得するにはどうすればよいですか?
Box2Dを使用しています。ご覧のとおり、互いに接続された3つの動的ボディがあります(正面から見ると、テーブルと考えてください)。LEG1とLEG2は静的ボディに接続されています(これは接地ボディです)。別の動的ボディがテーブルに落ちています。 LEG1とLEG2で別々に圧縮を取得する必要があります。 ジョイントにはGetReactionForce()を返す関数がありb2Vec、これはLength()とLengthSqd()関数を持っています。これにより、取得した関節の力の合計が得られます。しかし、私が必要としているのは、関節とつながっている個々の体の力です。単一のジョイントで複数のボディを接続すると、役に立たない力の合計が再び表示されます。これが私が話しているケースです:

2
購入したUnity3Dライセンス(クラックされたアプリではない)でゲームが開発されたかどうかを確認する場所と方法は?
私たちは東部の国から外部チームを雇いました。彼らはUnity3dを使用してモバイルゲームアプリを構築しました。私たちは購入したライセンスのあるソフトウェアのみを使用するように依頼しましたが、クラックされたものは使用しないでください。 これで、公式ストアにアプリを公開する準備が整いました。Unity3dのメンバーは、アプリが購入済みのライセンスによるものか、クラックされたソフトウェアによるものかを常に確認できることをネットで読みました。彼らがそれがクラックされたソフトウェアで作られたことを発見した場合、彼らはそのアプリを禁止し、おそらく私たちを起訴するでしょう。 私たちのソフトウェアが実際に100%ライセンスされたunity3dソフトウェアによって作成されたことを確認するためのそのようなツールはどこにありますか?
8 android  3d  unity  ios 

1
オートマッチ/キューイングプレイヤー
Node.jsとRedisを使用しています。プレイヤーをオートマッチする信頼できる方法を考え出そうとしています。一致するサーバーがあり、複数のゲームサーバーがセットアップされています。 以下は私が起こらなければならないことです: プレーヤーはゲームの種類(小/中など)で参加リクエストを送信します マッチングサーバーは、プレーヤーを待っている現在のゲームタイプにプレーヤーを追加します ゲームサーバーはプレイヤーにゲームIDを送信します 現在、私はこれを次のように実装しています: マッチングサーバーはBRPOPを使用してgame:queue:smallをリッスンします game:queue:small:id = idが存在するかどうかを確認します game:id:usersの長さが<= 6(最大プレーヤー)かどうかを確認します プレーヤーをgame:id:usersリストに追加します ゲームの長さが6になったら、game:queue:small:idを削除します 一致するサーバーがgame:queue:small:idがないことを検出すると、次のようになります。 INCRゲーム:nextGameId game:queue:small:idを以前に生成されたIDに設定します ゲームIDをgame:queue:waitingに追加します ゲームサーバーは、BRPOPを使用して新しいゲームを待ちます。ユーザーが1人になると、ゲームのユーザーが2人以上になるまで待ってから、タイマーを開始します。それらがその時間内に満たされない場合、それらは持っているユーザーから始まり、その後game:queue:small:idを削除します(したがって、マッチメーカーに新しいゲームを要求するよう強制します)。 私の方法が機能している間、私はそれが生産でうまく機能すると確信していません、そしてそれは非常に入り組んでいるようです。次の問題の可能性を確認できます。 待機リストからゲームIDを受け入れるとゲームサーバーがクラッシュし、ユーザーはgame:id:usersに追加されますが、何も起こりません(クラッシュ自体は問題ではありませんが、ユーザーがゲームキューに追加され続けると、 ) ユーザーが切断してゲームが開始されていない場合、ゲームサーバーはユーザーをgame:id:usersリストから削除します。それを行っている間、マッチメイキングサーバーはユーザーをリストに追加して、ゲームがいっぱいであると考え、キューから削除することができます。 私の最初の考えは、1つのゲームタイプを待っているユーザーの単一のキューに変更することでした。ただし、これにはさらに問題があります。 ユーザーが接続するサーバーがクラッシュした場合、ユーザーをキューから削除しないため、ユーザーが存在しない場合でも、そのユーザーはゲームに参加できます。ソートされたセットを使用してリクエストの時間を保存し、ゲームIDが返されるまでクライアントにポーリングさせることができますが、これは、そのクライアントがどれだけ待機したかわからないため、ゲームを開始するかどうかわからないことを意味しますユーザー数が少ない。 ユーザーをゲームに参加させないと、ユーザーが参加しているものを確認したり、待機しているユーザーとチャットしたりできません(ゲームIDが必要になるため)。 私がこれを設定した方法はどれも正しくないので、誰かがいくつかのより良い提案を提供できるかもしれないと思っていました。ゲームサーバーとマッチメイキングサーバーを別々にしておく必要がありますが、必要に応じて拡張するためです。

3
YおよびX-私はそれを間違っていますか?
JavaScriptプロジェクトを実行しているときに、小さな問題が発生することがあります。これは、JavaScriptのほとんどの組み込み関数が、位置が必要な場合にX、Yを実行するためです。(この順序で)。 しかし、2D配列を作成するときは、Yから始めて、X軸を水平に実行する方が理にかなっています。説明が苦手な場合は、以下に説明します。 だから私のループは次のようになります: for(var y = 0; y < 10; y++){ for(var x = 0; x < 10; x++){ console.log("Doh!"); } } これは非常識ですか?ゲームを構築する時間をより簡単にし、常にスイッチャー操作を行う必要がないように、通常の方法に切り替えたいと思います。 では、なぜYの前にXがあるのでしょうか。 編集:これは別の例であり、おそらく私の混乱の主な理由です。私の本ではXは水平で、Yは垂直です。 [ [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], ]

2
2D移動(マウスから)を3D軸に沿った変位に変換するにはどうすればよいですか?
小さな3Dシーンエディターを作成しています(オブジェクトの位置の変更のみが可能です)。 各オブジェクトは、3D X / Y / Z軸で描画されます。 仕組み:ユーザーは軸(X、Y、Z)を左クリックして選択し、左クリックを押したままマウスを移動します(オブジェクトを軸方向に移動します)。選択はすでに問題ありhow muchませんが、2Dマウスの動きに応じて、選択した軸に対してオブジェクトを移動する必要があることを知りたいのですが。 例として、この図では、X軸を選択してマウスを左右に動かすと、上下に動かすよりも大きな変位が得られます(この場合はほぼゼロ)。 それは本当にシンプルでなければならないが、私はそれを理解することができません。 入力は、最初の左クリックからのマウスの変位(2Dベクトル)、選択された軸ベクトル(3dベクトル)、モデルビュー/投影行列です。 出力:量(floatまたはdouble)
8 3d  mouse  picking  axis 

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