ゲーム開発

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

3
make-everything-static-and-globalデザインパターンを取り除きたいのですが、どうすればいいですか?
私は宇宙で小さなダンジョンクローラーを作っています。エンジンのバックエンドをより良くする方法についてのアドバイスを聞きたいです。基本的に、現在はすべてが管理者のがらくたに基づいています: BackgroundManager:AddBackground(image, parallax)クールな背景効果を作成するためのメソッドがあります。 ConfigManager:構成ファイルを読み取り/作成し、その構成ファイルから読み取ったデータも保持します。 DrawManager:持っているDraw(sprite)画面にコンテンツを描画する方法を、そして物事が好きSetView(view)、GetView()など EntityManager:すべてのアクティブなエンティティを保持し、エンティティを追加、削除、検索するためのメソッドを備えています。 DungeonManager(実際GridManagerと呼ばれるが、これは簡単にするためである):のようなメソッドがありGenerateDungeon()、PlaceEnemies()、PlaceFinish()など 現在、私はすべてのマネージャーをリストアップしているわけではないので、これは変化しなければならないと思います。私のゲームもスクリーンに基づいていますが、メインメニューなど、マネージャーが管理しているものの半分が必要ないため、面倒です(メインメニューには物理学/エンティティ/ダンジョンは必要ありません!) ここで、マネージャーを静的ではなく、ScreenMainGameにすべてのゲーム固有マネージャーのインスタンスを与えることを考えました。しかし、それはマネージャーに関連するものを呼び出したり取得したりするのを巨大な混乱にScreenMainGame.Draw()させます... ((ScreenMainGame)ScreenManager.CurrentScreen).GridManager.Draw() それは本当にいです。 それで、仲間のゲーム開発者は、この混乱を解決する方法を知っていますか?ありがたいです!

1
パブリッシャーと協力することで、ゲームのクローンを防ぐことができますか?
「パブリッシャーなしでモバイルゲームを作成する方法(またはその理由)」に関する多くの記事を読みました。しかし、私を悩ませている質問は: 「もし私がゲームを作って、それが本当に市場に出て、人々がそれをプレーし始めたら、パブリッシャーは私のゲームを見て、2週間で非常によく似たゲームを作り、それをさらに成功させるでしょうか?」 これが出版社と一緒に行くことを選択する主な理由ですか? 編集:私の主な関心事は、開発に費やした数週間についてではありません(大好きです!)。私の懸念は次のとおりです。パブリッシャーなしで作業している(したがって、それほど優れたマーケティング手法を使用していない)場合、私のゲームを人々のハートに届けるのに時間がかかることがあります。もっと早く。人々が気付く前に、それは模倣品です。

2
これらの2つのコードのどちらが「より良い」ですか?ローカル変数またはクラス変数を作成しますか?
私はより多くのゲームを作り、より愚かな質問をしています。 うまくいけば、これは非常に簡単です。剛体に力を加えてPlayerオブジェクトを移動するだけの非常に基本的なクラスを作成していますが、rbへのクラス参照を作成するのか、Update every frame内のローカル変数を作成するだけなのでしょうか?(これは、Monobehaviour.GameObject unity親クラスにすでに存在していることを念頭に置いてください)。 多くのローカル変数を実行するとループ全体の速度が低下するのではないかと思います(ローカルとは、クラスの先頭ではなく、関数自体の内部を意味します。正しい用語を使用してください)。 これが私が言いたいことです、私がそれをすることを考えていた2つの方法: public class Player : MonoBehaviour { private void FixedUpdate() { Rigidbody rb = GetComponent<Rigidbody>(); float v = Input.GetAxis("Vertical"); rb.AddForce(v * rb.transform.forward * Const.walkForce); } } または... public class Player : MonoBehaviour { Rigidbody rb; private void Awake() { rb = GetComponent<Rigidbody>(); } private …
11 unity  c#  game-loop 

1
このタイプのコンセプトアートと、それを行うアーティストに特定の名前はありますか?
あなたはすでにあなたのゲームの基本を持っているとしましょう:あなたとあなたの(可能性のある)プレイテスターがプレイするのが楽しいと思うゲームプレイを作成し、あなたはあなたのゲームをもっと肉付けできると思います。ただし、この段階では、すべて無色のブロックとコーンです。それはまだ単なるプロトタイプだとあなたはあなたがゲームを実際にする方法の明確なビジョンがありません見て。 ゲームエンジンの魅力的なものを接着する前に、BloodstainedがKickstarterページで行ったのと同じように、ゲームがどのように見えるかを示すモックアップを作成します。 これらはゲーム内のスクリーンショットではなく、ゲームが始まる前に作成されたものです。これらのプロトタイプイメージはどのように呼ばれ、アーティストは何と呼ばれますか?ゲームを1つまたは複数の見た目で試作するためにアーティストを雇う場合、どのような種類の「キーワード」を探す必要がありますか?

2
遅延マウス入力を行う方法は?
私はカーゲームをしていて、プレイヤーが酔っているという考えがあります。マウスを左右に動かして回転させる、マウスからの入力を遅らせたいのですが。 ユーザーが与える入力と車の回転量の間に一定の遅延を設定するにはどうすればよいですか? 今私はこれを持っています: h = Mathf.Lerp(h, (((Input.mousePosition.x / Screen.width) * 2) - 1), Time.deltaTime * 2); 何が起こるかはターンが遅れますが、非常に遅いです。つまり、マウスを非常に速く動かすと、車の旋回は非常に遅くなりますが、乗数を上げるTime.deltaTimeと、車の旋回は速くなりますが、遅延の影響は最小限に抑えられます。 他にどのようにこれを行うことができますか?
11 unity  c#  input  mouse 

3
画面に自然の雨粒を作るにはどうすればよいですか?
画面にメタボールとトレイルを配置して雨の効果を落とそうとしています。shadertoyに手掛かりが見つかりましたが、実装方法がわかりませんでした。 https://www.shadertoy.com/view/ltffzl 残念ながら、これには多くの数学計算があり、ラグを生成するため、単一で使用することはできません。明らかに、テクスチャを使用する必要がありますが、どのようにしてトレイル効果を持たせることができますか? 私のアイデアは、ドロップにテクスチャとトレイルレンダラーを使用することですが、メタボールエフェクトをどのように使用できますか? 更新 この記事でメタボールを実装できました https://github.com/smkplus/RainFX/tree/master トレイルについてはまだ考えていません

2
自動生成されたスクリプトをカスタマイズするにはどうすればよいですか?
Unityエディターを介してスクリプトを作成すると、事前にフォーマットされたコードを含むスクリプトが生成されます。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class GenericClass : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } スクリプトを作成すると、通常、名前空間やカスタムエディターなどの追加コードを使用することが保証されます。さらに、ほとんどの場合、自動生成されたスクリプトからコンテンツを削除します。Unityによって生成された自動コードを変更する方法はありますか?
11 unity 

1
エンティティコンポーネントシステム-オブジェクトの変換を実装する方法
エンジンのエンティティコンポーネントシステムを設計する際に、特定のタイプのコンポーネントを格納および取得する方法に少し問題がありました。 最初に、この質問で使用する少しの用語を明確にします。 「コンポーネント」を、特定のシステムに関連するデータを格納するデータ構造と呼びます。 私は、「システム」をメソッドとデータ構造の集合体と呼び、コンポーネントを使用してユーザーとのゲームの状態/インターフェースを更新します。 「エンティティ」は基本的に、特定のコンポーネントを取得し、ゲームロジックでそれらのデータを変更するために使用される単なるIDです。 各システムは、コンポーネントのタイプ(例:Physics-> PhysicsComponent、AI-> AIComponent、Rendering-> RenderingComponent)の(IDマップ)配列を所有しているため、データを効率的に反復できます。 ただし、すべてのコンポーネントが特定のシステムによって所有されているわけではありません。たとえば、Transformコンポーネントはオブジェクトの位置、回転、スケールを保存します。物理学、AI、レンダリングなどの多くのシステムで使用されているため、エンティティの最も重要な部分の1つです(Unityは必須にします)。 これはほとんど私が直面している問題です。Transformは他の多くのシステムで使用されているので、コンポーネントごとに使用するものを取得するにはどうすればよいですか?考えられる解決策の1つは、各コンポーネントに独自のエンティティIDを格納させることです。このようなコンポーネントを取得するのは簡単ですが、それほど効率的ではありません。また、他のコンポーネントを認識していない、分離された独立したデータのバンドルとしてのコンポーネントの概念に反します。 この問題を解決する適切な方法はありますか?Transformもコンポーネントにする必要がありますか?

2
ゲームオブジェクトのコンポーネントを破棄できるかどうかを確認する
Unityでゲームを開発し、[RequireComponent(typeof(%ComponentType%))]コンポーネントをすべての依存関係に確実に適合させるためにを自由に使用しています。 現在、さまざまなUIオブジェクトを強調表示するチュートリアルシステムを実装しています。強調表示を行うにはGameObject、シーン内のへの参照を取得し、それをInstantiate()で複製してから、表示に不要なすべてのコンポーネントを再帰的に取り除きます。問題はRequireComponent、これらのコンポーネントを自由に使用すると、まだ削除されていない他のコンポーネントに依存しているため、多くのコンポーネントを任意の順序で単純に削除できないことです。 私の質問はComponent、GameObject現在アタッチされているからを削除できるかどうかを判断する方法はありますか。 私が投稿しているコードは技術的には機能しますが、Unityエラーをスローします(画像に示すように、try-catchブロックでキャッチされません) これがコードです: public void StripFunctionality(RectTransform rt) { if (rt == null) { return; } int componentCount = rt.gameObject.GetComponents<Component>().Length; int safety = 10; int allowedComponents = 0; while (componentCount > allowedComponents && safety > 0) { Debug.Log("ITERATION ON "+rt.gameObject.name); safety--; allowedComponents = 0; foreach (Component c in rt.gameObject.GetComponents<Component>()) …
11 unity  c# 

2
最後のgitコミット以降にシーンに加えられた変更を視覚的に確認するにはどうすればよいですか
gitにコミットする前に、シーン(.unityファイル)に加えられた変更を確認したいと思います。 私はいくつかのGIT / Unityソリューションを調べましたが、それらはすべて変更をマージするために作成されたものであり、最新バージョンとの差分を表示するためのものではありません。 シーンファイルの問題は、他のアセットを指すGUIDを使用することであり、シーンファイルの差分を開くと、実際には何も作成できません。 例えば: 代わりに、私はこのようなものを見たいのですが: これを行うものは存在しますか?

2
2D雨の作成(および流体力学)
私は私のゲームで気象条件を実験していますが、Starboundが雨を処理する方法に感銘を受けました。基本的に、雨が地面に当たると、それは水平方向に分散して(そして地面に吸収されて)、または(雨滴が地面の穴の中に落ちたときに)水の山を作成します。 このビデオはこれを明確に示しています:http : //imgur.com/gallery/CKCGKbG 私は雨を降らせて、それが地面に当たる場所を確認する方法を知っていますが、それが私が行き詰まるところです。私の質問は、これはどのように作成されたのでしょうか?そして、パフォーマンスを損なうことなく、水流をどのように完璧にモデル化できるでしょうか? 前もって感謝します!

1
画面スペースの派生物とは何ですか、いつ使用しますか?
私が見るddxとddyGLSLの機能をし、HLSL同等物は、すべての今してシェーダコードに出てきます。私は現在それらを使用して、接線または接線なしでバンプマッピングを行っていますが、基本的にコードをコピーして貼り付けました。これらの関数が実際に何であるか、それらが何をするのか、いつ使用するのかを理解できません。 だから質問: スクリーンスペース微分関数とは何ですか? これらの関数は何をしますか?入力値と出力値 最も一般的に使用される効果は何ですか? これらの機能に目を向けるには、どのような効果が必要ですか?

2
ゲームでの構造解析はどのように行われますか(例:橋梁建設、掘削または死滅、3D)?
すべてのコンポーネントがシステム全体に影響を与えるため、典型的なインタラクティブトラスシステムはかなりの計算が必要になると私は理解しています。シミュレーションの精度を犠牲にして、任意の反復回数で任意に停止できると思いますが、それがこれらのゲームで使用されているアプローチかどうかはわかりません(ブリッジビルディングゲームはトラスシステムの例です)。一方、DigやDieのようなゲームは、非常に複雑な構造システムを備えています。これは、トルク(私は信じています)と圧縮も考慮に入れており、非常に高速で、非常に広範なシステムで動作します。基本的な計算は似ていると思いますが、そうでない場合は両方のアプローチに興味があります。 これらがどのように作られるか知っていますか?それらには任意の制限がありますか、それとも完全に異なるアルゴリズムを使用していますか?また、皆さんが思いついたものはすべて3Dシステムに適用できると思いますが、そうでない場合、または明らかでない場合は、少なくとも2Dと3Dの両方に興味があるので、3Dにどのように使用できるかについて手がかりを教えてください。ゲーム。 ここでは感謝するつもりはありませんが、少なくとも前もってお礼を言うのは不公平だと思います。この段落が削除されないことを願っています。 編集:私が推測した場合、私はDigまたはDieが各ブロックのベクトルを格納し、シミュレーションの追加の精度がシステムの限界に対して意味がない点まで反復アルゴリズムを実行すると言います(たとえば、システムは大きすぎて、とにかく崩壊しない)ので、(アプリケーションに基づいているため)反復の半任意数によって制限されます。しかし、私は間違っている可能性があります。

2
キーを押し始めたときの遅延を取り除く
私は単純なゲームを作成しています。私が遭遇した問題の1つは、キーを押し続けているときの迷惑な遅延です。 つまり、基本的に、たとえば(非常に長い時間)を押すUpと、オブジェクトは1ユニット上に移動し、移動せず(約1秒間)、その後1ユニット上に(遅延なく)連続して移動します。 現在、私はこれを使用してオブジェクト(SDL2)を移動します。 while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_UP: //Move object 1 unit up break; //Other unrelated things omitted } break; //Omitted other cases } } 私が欲しいのは、オブジェクトをすぐUpに素早く移動できるように、遅延を取り除くことです。これを行う方法はありますか?
11 c++  sdl2  keyboard 

2
クライアント側の予測で移動オブジェクトを補正する方法は?
Star Controlのようなmeleeをサポートするゲームサーバーを実装しています。船を飛ばして射撃し、動きを動かすための超単純な速度/加速/減衰物理学を備えています。 私は、Valve、Gafferon、Gambettaを読み、クライアント予測のためにGambettaのアルゴリズムを実装しました。 クライアント予測は、サーバーからの位置を更新することでプレーヤー船に作用し、サーバーで未処理の入力をプレーヤー船に再適用します。 残念ながら、私のゲームではうまく機能しません。ガンベッタの例では、すでに移動しているオブジェクトや段階的に更新されるコマンドは考慮されていないという事実と関係があると思います。(「ステップ」とは、フレームを意味します)。そのため、私のゲームでは、プレイヤーは(すでに動いている)船を加速するために押し上げます。船はクライアント上で動き続け、コマンドをサーバーに送信し、通常は次のステップでサーバーからワールドスナップショットを受信します。私はもっ​​と何かを得ます: playerコマンドはクライアントのステップ3で実行されますが、サーバーではサーバーのステップ5でのみ実行されます。クライアントのステップ6でクライアントが世界のスナップショットを受信するまでに、特に高速の場合、予測はかなりずれます。 問題の核心は、クライアントがステップ5でコマンドを実行するのに対し、サーバーはステップ6でコマンドを実行することです。コマンドを使用してクライアントステップを送信し、サーバーをロールバックしてクライアントタイムステップを使用してコマンドを再実行することを検討しました。ただし、ロールバック以降に受信したコマンドがどうなるか、送信されたステップを変更することによってクライアントを不正に利用する方法など、他の多くの問題が発生する可能性があります。 このようなGoogleの動画を読んだり見たりすると、別のアプローチが言及されています。このアプローチでは、プレーヤーの位置をスナップショットの位置に合わせて徐々に変更します。 私の質問: Gambettaのアルゴリズムを一定のステップ移動で機能させることができますか?それとも概念的に私のゲームと互換性がないのですか? ステップを徐々に補間するのは正しい方法ですか?もしそうなら、サーバーから受信したばかりのオブジェクトと一致するように、クライアントの位置から既に移動しているオブジェクトをどのように補間しますか? これらの方法、段階的補間、Gambettaのアルゴリズムは連携して機能しますか、それとも相互に排他的ですか?

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