ゲーム開発

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

1
複数の長方形をより少ない数の長方形に「修復」するためのアルゴリズム?
さまざまな形と色の長方形のグリッドがあり、同じ色のレイアウトを表す長方形の数を減らしたい(最適に近いほど良い、最適である必要はない)とします。 上の画像は非常に単純化されたケースであり、長方形間の空白は視覚化のみを目的としています-実際には密に詰め込まれています。 これを行うのに役立つアプローチまたはアルゴリズム名(Googleに満足)とは何ですか?

2
Input.GetAxis(“ Mouse X / Y”)を使用してカメラを回転させる方法は?
マウスで回転する一人称カメラを作りたい。 私が見Input.GetAxisスクリプトAPIのページで、私は私のポストの下部に含まれているサンプルコードを、発見しました。試してみると、基本的な機能は同じだと思いましたが、特にマウスを円で動かすと、カメラがxz平面に平行に保たれないことに気付きました。しばらくすると、カメラが奇妙な角度になり、プレーヤーは完全に乱暴になります! どういうわけかカメラの動きを制限するこのコードのクイックフィックスはありますか、またはカメラを回転させるより良い方法はありますか? using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public float horizontalSpeed = 2.0F; public float verticalSpeed = 2.0F; void Update() { float h = horizontalSpeed * Input.GetAxis("Mouse X"); float v = verticalSpeed * Input.GetAxis("Mouse Y"); transform.Rotate(v, h, 0); } }
13 unity  camera 

1
オブジェクトごとに異なるシェーダーDirectX 11
私はを学習Direct3D 11しています。シェーダーの作成で見つけたすべての基本的なチュートリアルでは、VertexシェーダーとPixelシェーダーが書かれているため、シーン全体を同じように変換できます。テクスチャ付きキューブのレンダリングのようなチュートリアル... しかし、どうやってオブジェクトを区別するのでしょうか。たとえば、あるオブジェクトの鏡面をシミュレートし、別のシェーダーを使用して残りのシーンをレンダリングしたい場合はどうでしょうか?ほとんどのゲームでは、さまざまな外観と変換を実現するために、多くの頂点シェーダーとピクセルシェーダーを使用する必要があると思います。 ありがとうございました。
13 c++  directx11 


1
UnityでAndroidのアダプティブアイコンを使用するにはどうすればよいですか?
API 26現在、Androidはアダプティブアイコンと呼ばれるものを使用しています。 API 25以前をターゲットにすると、アプリのアイコンは正常に見えます。 ただし、API 26以降をターゲットにすると、次のように白い円で表示されます。 Androidのアダプティブアイコンを利用しながらAPI 26+をターゲットにするにはどうすればよいですか? API 26+をターゲットにしたいが、Androidのアダプティブアイコンを使用したくない場合はどうすればよいですか?
12 unity  android 

6
タイルセットの境界の効率的なアルゴリズム
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 地図を形成する既知の有限サイズのタイルのグリッドがあります。マップ内の一部のタイルは、テリトリーと呼ばれるセットに配置されます。この領域はつながっていますが、その形状については何もわかっていません。ほとんどの場合、それはかなり規則的なブロブになりますが、一方向に非常に長くなる可能性があり、潜在的に穴がある可能性もあります。領土の(外側の)境界を見つけることに興味があります。 つまり、テリトリー内に存在することなく、テリトリー内のタイルのいずれかに触れるすべてのタイルのリストが必要です。これを見つける効率的な方法は何ですか? 難易度を上げるために、タイルがヘックスであることが起こりますが、これはそれほど大きな違いをもたらさないと思われます。各タイルにはまだ整数のxおよびy座標がラベル付けされており、タイルがあれば、隣接するタイルを簡単に見つけることができます。以下にいくつかの例を示します。黒は領土、青は探したい境界線です。 これ自体は難しい問題ではありません。擬似Pythonのこのための簡単なアルゴリズムの1つは次のとおりです。 def find_border_of_territory(territory): border = [] for tile in territory: for neighbor in tile.neighbors(): if neighbor not in territory and neighbor not in border: border.add(neighbor) しかし、これは遅いので、もっと良いものが欲しいです。テリトリーでO(n)ループがあり、すべてのネイバーで別のループ(短いループですが、それでも)があります。次に、サイズがnである2つのリストのメンバーシップをチェックする必要があります。それはO(n ^ 2)のひどいスケーリングを与えます。ボーダーとテリトリーのリストの代わりにセットを使用して、メンバーシップをすばやくチェックできるようにすることで、それをO(n)に減らすことができますが、それでも素晴らしいことではありません。テリトリーは大きいが、単純な面積対線のスケーリングのために境界が小さい多くの場合があると予想しています。たとえば、領土が半径5のヘクスの場合、サイズは91ですが、境界線のサイズは36のみです。 誰かがもっと良いものを提案できますか? 編集: 以下の質問のいくつかに答えるため。領域のサイズは、約20〜100程度です。テリトリーを形成するタイルのセットはオブジェクトの属性であり、すべてのボーダータイルのセットを必要とするのはこのオブジェクトです。 最初、テリトリーはブロックとして作成され、その後、ほとんどの場合タイルが1つずつ増えます。この場合、最速の方法は、境界線のセットを保持し、取得したタイル上でのみ更新することです。領土に大きな変更が発生する場合があります-そのため、完全に再計算する必要があります。 私は、単純な境界検出アルゴリズムを実行することが最善の解決策であると考えています。これにより発生する唯一の追加の複雑性は、境界線が必要になるたびに再計算されるようにすることですが、それ以上ではありません。私は現在のフレームワークでこれを確実に行うことができると確信しています。 タイミングに関しては、現在のコードには、領土のすべてのタイルをチェックする必要があるいくつかのルーチンがあります。毎ターンではありませんが、作成時とその後は時々です。完全なプログラムのごく一部であるにもかかわらず、テストコードの私のスーツの実行時間の50%以上がかかります。したがって、繰り返しを最小限に抑えることに熱心でした。ただし、テストコードには、プログラムの通常の実行(当然)よりも多くのオブジェクトの作成が含まれるので、これはあまり重要ではないことがわかります。

4
OpenGLの「バッファ」と「配列」の違いは?
webGLまたはOpenGLでドキュメントを読むと、関数とオブジェクトの名前の使用方法にいくつかのパターンが見られます。しかし、バッファオブジェクトと配列の違いを理解できません。 「頂点バッファオブジェクト」、「頂点配列オブジェクト」、さらにある種の「バッファ配列」または「配列バッファ」があります。 OpenGLコンテキストでは、何かが「配列」であり、代わりに「バッファ」と呼ばれるべきときは?
12 opengl  webgl 

3
プレーヤーのエンゲージメントを計算する方法は?
特定の人々がゲームについてどのように考え、どの程度気に入っているかを知るために、どのような指標を使用できますか?プレイヤーが自分で評価する必要のないパラメーターを好むでしょう。1つの座席で何時間もプレイすることは、プレイヤーがゲームにどれだけ時間を費やしたいかを示す良いパラメーターでしょうか?

4
グラウンドチェックの問題を解決するには?
Unityのサードパーソンコントローラーのグラウンドチェックに問題があることに気付きました。 グラウンドチェックは、プレーヤーが地面に立っているかどうかを検出する必要があります。これは、プレイヤーの下に光線を送信することにより行われます。 ただし、プレイヤーが2つのボックスの真上に立ち、これらのボックスの間にスペースがある場合、レイは隙間に飛び込み、プレイヤーは自分が地面に接触していないと考えます。これは次のようになります。 動けません。光線が隙間にあるため、プレイヤーアニメーターの空中ブレンドツリーがアクティブになっていることがはっきりとわかります。 この問題を解決する最良の方法は何ですか? 同じ原点から異なる角度で複数の光線を照射することを考えていました。そしてOnGround、これらの光線のX%が「地面」に当たった場合にのみ、真になるはずです。または、より良い方法はありますか?

1
メモリが正しく処理されていないかどうかをどのように知ることができますか?
私の(2D)ゲームのメモリフットプリントは、テクスチャをロードするたびに増加するようです。たとえば、ゲームを開始するとき、30 MBのプライベートRAMを使用します。 54 MBのプライベートRAM。 同じことは、同じ距離を移動した後、2つのポイント間を繰り返し往復した後に発生します。 しかし、私の読み出しは、プログラムがテクスチャが画面から消えてから約1秒後にglDeleteTexturesを正しく呼び出していることを示しています。valgrindはリークを検出していません。 これについて心配する必要があるかどうか、またはOSがメモリをページングする方法の単なる癖であるかどうかを知るにはどうすればよいですか?
12 opengl  memory 

3
3Dモデルの予算。より重要な三角形または頂点の数
3Dゲームのモデルを作成するとき、予算のポリゴン(三角形)または頂点で何を測定する必要がありますか?2つのセット40000キューブで実験を行いました。1つは8つの頂点と12の三角形、もう1つは24の頂点と12の三角形です。すべてUnityで行われ、両方とも手続き的に生成されました。驚いたことに、両方のセットのパフォーマンスはほぼ同じで、両者の違いはわずかでした。 頂点の数を気にせず、三角形の数だけを見る必要があるということですか? 編集:19602の三角形と10000の頂点を持つ平面を作成し、同じ量のティラングルが39204の頂点を持つ別の実験を作成しました。私は両方の4000を生成しました。頂点の数が14 fpsから19 fpsになりました。だから、一般的には少ないほうが良いと思うが、大きな違いがあるだけだ。

1
ユーザーエンゲージメントの予想数
クリーチャーを収集し、ボタンをクリックするだけで簡単にEXPを獲得できる無料のオンラインゲームを実行しています。アイデアは他の人のためにこれを行うことであり、彼らは好意を返し、あなたがあなた自身の進歩を遂げるのを助けるでしょう。 最初のチュートリアルでは、目標を達成するために、自分のデバイスに任せる前に6人の完全なパーティーを獲得するまで、基本的なアイデアを説明します。 チュートリアルを通過したプレイヤーはゲームに非常に熱中する傾向があることに気付きましたが、次の数値もわかりました。 25%のユーザーが参加しますが、チュートリアルの最初のステップを完了することはありません。つまり、最初のEggをhatch化することはありません。 さらに25%のユーザーがチュートリアルを終了する前にゲームから脱落したため、1〜5個の卵しかhatch化できませんでした。 登録ユーザーの50%が実際にチュートリアルを完了しています。 問題は、これまでこの種のゲームを実行したことがないということです。これは私の最初の実際のプロジェクトですが、数年前から行われています。予想される数値のベースラインはありません。 進歩を遂げるためには、他の人が進歩を遂げ、好意を取り戻すことを願う必要があるという人々にとって非常に不愉快であるなどの理由が今のところ想像できます。 そのため、チュートリアルが完了する前に、約半数のユーザーが離脱します。このようなことは普通ですか?私はこれについて心配しすぎていますか?

2
ミュージシャンを雇うときに音楽のすべての権利を要求するのは合理的ですか?
ゲームを作成しましたが、実際のサウンドと音楽を追加する必要があります。初めて、ゲーム用の音楽を作るためにミュージシャンを雇うことにしました。トラックのサウンドパックとライセンスを購入する前に。 価格は私には高すぎたので、交渉はうまくいきませんでしたし、アーティストは私に音楽を売るという考えを好まなかったので、私にそれをライセンスするだけでしたかったのです。 間違いを犯したのか、それとも不合理だったのかを知りたい。 具体的には、それぞれ90秒の長さの6つのトラックについて話しています。音楽は1人のミュージシャンによってチップチューンされます(オーケストラを雇うと1人だけを雇うよりも費用がかかることを理解しているので重要です)。 私が望んでいたのは、作者の権利以外のすべての権利でトラックを取得することでした-自分の名前をクレジットに入れます。 私は誰もこれをやらないと言われました、そしてミュージシャンは常にOSTなどを後で売る権利を保持します。そして、すべての権利が欲しいならば、1つのトラックは私に500ドルかかりました。そして、1タイトルのライセンスを取得するだけでも200ドルかかります。 それが標準的な市場価格であるかどうかはわかりませんが、私にとっては高いようです。 価格はリーズナブルですか? 音楽をすべての権利で要求するのは理不尽ですか?
12 sound  music  hiring 


3
ゲームエンジンのアセットを識別しますか?
ロードされたアセットを特定したいのですが、どちらを選択すべきかわかりません。2つのオプションがあります。 名前(文字列) これはunordered_map(O(1))を使用すると最も簡単で高速ですが、整数を使用する場合よりもずっと遅くなります。 コードで簡単に理解できます。 整数 最速。 コードでは理解できません。 文字列はそれほど安全でも高速でもないことを知っていますが、それはそれほど悪いのでしょうか、それともAAAタイトルで悪いとみなされるだけですか?整数を使用するために列挙を作成できましたが、実行時にファイルからシーン、アセットなどをロードすると、列挙を使用できません。実行時に生成されたこれらの整数を読みやすくする方法はありますか? この問題にはインターネット全体にいくつかのスレッドがあることは知っていますが、どの場合にこれが重要であるかはわかりませんでした。

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