ゲーム開発

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

6
なぜ私はループで動けなくなるのですか
Unityは初めてです。私はコルーチンを学び、これを書いた。 private void Fire() { if(Input.GetButtonDown("Fire1")) { StartCoroutine(FireContinuously()); } if(Input.GetButtonUp("Fire1")) { StopAllCoroutines(); } } IEnumerator FireContinuously() { while(true) { GameObject laser = Instantiate(LaserPrefab, transform.position, Quaternion.identity) as GameObject; laser.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 10f); yield return new WaitForSeconds(firetime); } } ボタンが押されるとコルーチンが呼び出され、「while」ループに入ります。ボタンを離れると、コルーチンが停止します。それは無限ループなので、「while」ループに引っかかってはいけませんか?どうして?
8 unity  c#  coroutines 

3
ECSを使用する場合のユーザーフレンドリーなスクリプト?
私は現在、ゲーム開発に戻るために小さな趣味のプロジェクトを作成しており、ECS(エンティティコンポーネントシステム)を使用してエンティティを構造化することにしました。ECSのこの実装は、次のように構成されています。 エンティティ:私の場合int、コンポーネントのリストへのキーとして使用されるのは一意の識別子です。 コンポーネント:データのみを保持します。たとえば、Positionコンポーネントはxand y座標をMovement保持し、コンポーネントはspeedand direction変数を保持します。 システム:コンポーネントを処理します。たとえば、PositionおよびMovementコンポーネントを取得し、speedおよびdirectionを位置xとy座標に追加します。 これは問題なく動作しますが、今度はゲームにスクリプト言語の形式でスクリプトを実装したいと思います。以前のプロジェクトでは、ゲームオブジェクトのOOP実装を使用しました。つまり、スクリプトは非常に単純明快でした。たとえば、単純なスクリプトは次のようになります。 function start() local future = entity:moveTo(pos1) wait(future) local response = entity:showDialog(dialog1) if wait(response) == 1 then local itemStack = entity:getInventory():removeItemByName("apple", 1) world:getPlayer():getInventory():addItemStack(itemStack) else entity:setBehavior(world:getPlayer(), BEHAVIOR_HOSTILE) end end ただし、ECSを使用する場合、エンティティ自体にはmoveToorのような関数はありませんgetInventory。代わりに、ECSスタイルで記述された上記のスクリプトは次のようになります。 function start() local movement = world:getComponent(MOVEMENT, entity) movement:moveTo(pos1) local position = world:getComponent(POSITION, entity) local future …


3
優れた技術ツリーを作るものは何ですか?
戦略/シミュレーションゲームには、多くの場合、技術/研究ツリーがあり、プレイヤーは新しい能力/オプションを研究し、既存のオプションを改善し、悪影響を抑えることができます。 一部のゲームはitem 1 -> item 2 -> item 3、小さなstat変更を伴うabcアプローチに従っているようですが、他のすべてのロック解除オプションは、ゲームのバランスを変更できる新しいユニットをゲームに投入することにより、ゲームのプレイ方法を大幅に変更します。他の人がすべてを調査できるようにする一方で、一部の人はゲームの残りのために別の枝ブロックのロックを解除します。いくつかはあなたが複数のものを研究することを可能にし、他のものはそれが完了する前に研究を切り替えるためにあなたを罰するでしょう。その点で、技術ツリーは進歩的である可能性があります(時間をかけて専用の調査を行ってアイテムをアンロックします)一方で、即座にロックを解除するために十分なお金/ポイントを収集する必要があるものもあります。 ゲームでどの戦略を採用するかについての一般的なガイドラインは何ですか?どの種類のゲームが、ある技術ツリーの種類から他の種類のゲームに勝るメリットがあるのでしょうか?それはなぜですか?線形技術ツリーを分岐ツリーよりもいつ採用すべきですか? 編集する たとえば、主人公が秘密裏に組織と研究技術を構築し、他の人がそれらを見つけてシャットダウンしなければならないゲームでは、研究室が失われ、研究成果が減少します。より優れたテクノロジーのロックが解除され、研究室がアップグレードされるにつれて、ゲームが進むにつれて研究成果は指数関数的に増加するはずです。探索するのに非常に大きな技術ツリーがあり、いくつかのエンドゲーム技術のロックを解除するかすべてを失うまで、他のパーティーの施設を失うという絶え間ない危険があるでしょう。 これが重複しない理由 テックツリーのサイズに関する質問があるため、この質問を重複としてマークしている人もいます。この質問は、接続、コスト、およびテクノロジーオプション間の関係(サイズはすべてではなく、要素である)をさらに活用する必要があります。

2
オープンソースのマルチプレイヤーゲームの収益モデル
私はマルチプレイヤーゲームのアイデアを持っています。理想的には、それをオープンソースにしたいのですが。 しかし、私はそれから利益を上げて、より多くのゲームを作ったり、開発チームを作ったりすることもできるようにしたいと思っています。 オープンソースを維持して収益を上げることは可能ですか? 私が持っていた1つのアイデアは、オンラインマルチプレーヤーサービスに課金することですが、ユーザーは自分のサーバーにパッチを適用することで簡単に回避できます。 この種のゲームプロジェクトで機能する収益モデルはありますか?

1
グリッドベースのマップで2つ以上のポイントを区切る壁を手続き的に見つけるにはどうすればよいですか?
特定のポイントを他の特定のポイントから遮断する壁を生成しようとしています。添付画像は私が求めているものを示しています: 青が赤から分離されました。 赤と黄色から分離された青。 タイルの障害物で青が赤から分離されています。 複数の青が複数の赤から分離されています。 これを行う方法はありますか?

2
街づくりアルゴリズム
では、このRPG.SEポストいくつかのオンラインジェネレータと長い間行方不明のページが言及されています。 私は特に町の生成方法に興味があります。たとえば、次の画像を見てください。 グラフィックに関しては多くの改善が可能ですが、当時利用可能なツール(90年代半ばから後半)を考慮すると非常に良かったです。 道路のレイアウトはかなり自然に見えます(すべての道路が直交するように配置されている場合でも)。 すべての道路が必ずしも接続されているわけではありませんが、それは正しいと感じています。 建物は信じられないほどの場所に配置されます。 木も論理的な場所に置かれているようです。 自分で試してみるのも楽しいと思います。特に私の以前の 試みはあまりにも「ブロック状」でしたので: あなたは私がかなり測定不可能な形容詞で品質の多くを説明していることに気付くでしょう(と思われる、感じている、信じられるなど)を使用ため、それらを命令に、そして最終的にはアルゴリズムに変換するのに苦労しています。 町の生成のための実証済みのアルゴリズムはありますか? これは広すぎると思われるので、これを考慮してください。大陸の陸塊のマップを生成するアルゴリズムを要求すると、すぐにPerlinや他のノイズアルゴリズムへの参照が得られます。続いてボロノイが続きます。 のような質問を見てきました このが、彼らはすでにより具体的な考えを持っているようです(つまり、2x2の家、一定数の家、運河と道路配置の制限)。 私が欲しいのは、制約の少ないものです。おそらくグリッドレイアウトを除いて、最初の試みはLシステムよりもはるかに簡単です。

2
2D物理ウォーターフォールを作成する方法
以下の最初の画像に似たウォーターフォールを作成しようとしています(達成したいことについては、このビデオをチェックしてください)。これは、コース上にコライダーがあるオブジェクトやその周りを移動できるようにするためのものです(下の2番目の画像)。リンクされたウォーターフォールは3dですが、2dの実装に興味があります。 オブジェクトは動的であり、一部は頻繁に移動するため、滝はすべてのフレームを再形成する必要があることに注意してください。オブジェクトはゆっくりと移動し、別の位置に移動するか回転します。これはどのように行うことができますか?
8 unity 

4
OpenGLで、GUIのために即時モードと保持モードを「組み合わせる」ことは悪い考えですか?
3DシーンglDrawArrays(...)を使用して描画していて、2Dオーバーレイのようなシンプルなものをレンダリングしたいとします。保持モードで2Dレンダラーをセットアップする代わりに、そのようなものに即時モードを使用することは悪い考えでしょうか? 例: void Draw() { // Draw the 3D scene: // *does stuff* glDrawArrays(...); // *some other stuff* // Setup a quad with immediate mode (for something like a vignette overlay) glBegin(GL_QUADS); glTexCoord2f(...); glVertex2f(...); glEnd(); }
8 opengl  gui 

1
シェーダーの位置に応じてテクスチャを移動する
Divinity Original Sinには美しいパーティクルエフェクトがあり、ゲーム内を移動すると、自分の位置に応じて移動するパーティクルを通して銀河が見えます。どうすればそのようにできますか? あなたはここでこの効果を見ることができます:https : //youtu.be/4fIpQZ2sIAY

1
City-simはどのようにして数百のキャラクターをシミュレートできますか?
私のゲームは通常、可能なキャラクターを表す数百のボックスがあると、非常に簡単に遅れを始めます。SimCityやAnnoのようなゲームにも数百のキャラクターがあります。 それらのゲームはすべてのチックですべてを更新するわけではなく、ニーズは間隔で処理され、それはレンダリングの問題ではないことに気付きましたが、これらの小さな生き物はすべて個別のパスファインディングなど を持っています。古いマシンでも、何千もの文字をオフにします。彼らはこれをどのように行うのですか? この質問は、個人が実際には数えず、没頭と美学のために単にシミュレートされる巨大な数を参照するように更新されました。 (個別のキャラクターを参照している場合に関連:Dwarf Fortressは、パフォーマンスを失うことなく、非常に多くのエンティティを追跡する方法を教えてください。) (別の質問ですが、おそらく関連していますか?:Unity3Dで何百ものアニメ化されたキャラクターをレンダリングする)

1
衝突検出:特別なケースがたくさんありますか?
単純な物理エンジンを2Dで書いています。私の最初の目標は、衝突検出を機能させることです。私のオブジェクトは最終的にプリミティブシェイプで構成されることはわかっていますが、私は疑問に思いました-衝突検出ライブラリは、「rayAndLine」、「rectangleRectangle」、「rectangleCircle」などの特別なケース関数の束で構成されるのでしょうか、または形状を作成するために使用されるプリミティブに関係なく機能する、衝突検出のための共通の基盤となるフレームワークはありますか?


2
さまざまな攻撃速度の武器のバランスを保つRPGのダメージ式を設計するにはどうすればよいですか?
私はモバイルRPGゲームを作成しています。ディアブロ3のような戦利品システムがある無限のゲームです。武器には攻撃と速度があり、鎧には抵抗値があります(パーセントではありません)。 私が使用している式は次のとおりです。 float realDamage = SkillDmg * BaseDamage / ( BaseDamage + Defense ) 結果は良好です。防御力が低くなると、ダメージが大きくなり、(BaseDamage + Defense)の間の分割のために指数関数的に上昇しません。 攻撃速度が1.0で、50のダメージを与える剣があるとします。それは50 dpsであり、私はそれがより速く攻撃したいダガーを持っていますが、もちろんより少ないダメージを与えます、dpsを維持するために、ロジックはダガーの攻撃速度が2倍になる場合、ダメージは半分になる必要があると言います(2.0スピード25 dmg)。しかし、上記の式を使用すると、実際の実際のダメージDPSが剣よりも低いことがわかります。 ダガーに25のダメージを与えずに少しだけ増やして、これを解決しました。いくつかの計算を行って、実際のdpsを同じにして、物事のバランスをとることができます。この場合、2.0スピードの短剣は剣と同じ実際のダメージdpsになるように32ダメージを与える必要があります。 しかし、武器にDPS番号を表示したい。短剣のDPSを32 dmg * 2の攻撃速度で表示すると、剣の50 dpsと比較して64 dpsになります。 可能な解決策?最初のダメージ計算式を変更しますか?もしそうなら、どれに?式を変更しないとしましょう、解決策はありますか?私は本当にそれを作るために半分より多くのダメージを与えるために短剣をだまさなければならないのが好きではありません... 私は本当にディアブロ3のダメージの公式を知ってほしいと思います。ディアブロ3はDPSの武器であり、基本的なダメージ*攻撃速度です。 編集: Lets assume defense = 50 and normal attack (skillDmg = baseDmg) Sword 1.0 attack speed dealing 50 dmg -> real …

4
複数のエージェントによる目標指向の行動計画
私は少し行き詰まっています: シミュレーションゲームにGOAP(目標指向のアクションプランニング、http: //alumni.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf)を使用してAIを実装しました。それはうまくいきます。 今、私はエージェントが協力できることを望みます(例えば、一緒に行動を起こす)。この場合、GoapActionsが緩いカプレットを保持する最高のAIデザインは何ですか? 彼らは一緒に計画すべきですか?(この場合、「世界国家」とは何ですか?)または、彼らは計画を共有する必要がありますか?ある種のメッセージシステム? 例 Agent1:Worldstate Agent 1:isLonely = true 目標Agent1:isLonely = false エージェント1の計画:AskAgent2ToTalk-> TalkToAgent2 Agent2 Worldstate Agent 2:hasWood = false 目標hasWood = true エージェント2の計画:GetAxe-> ChopWood-> BringWoodToSupply この星座を取得するにはどうすればよいですか? Agent1プラン:TalkToAgent2 Agent2プラン:TalkToAgent1-> GetAxe-> ChopWood-> BringWoodToSupply または、彼らが話していて、エージェントの1つが(たとえば、攻撃する敵によって)中断された場合、他のエージェントは、彼のTalktoAgent2アクションが終了したことを知っている必要があります。

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