タグ付けされた質問 「c#」

C#は、Microsoftが.NETプラットフォームと組み合わせて作成した、マルチパラダイムで管理され、強く型付けされ、ガベージコレクションされたプログラミング言語です。

1
MUDスタイルのテキストベースの世界でレベル/部屋を整理する
私は小さなテキストベースのアドベンチャーゲームを書くことを考えていますが、技術的な観点から世界をどのように設計するべきかは特にわかりません。 私の最初の考えは、XMLでそれを行うことで、次のようなものを設計しました。XMLの膨大な山をおologiesびしますが、私が何をしているかを完全に説明することが重要だと感じました。 <level> <start> <!-- start in kitchen with empty inventory --> <room>Kitchen</room> <inventory></inventory> </start> <rooms> <room> <name>Kitchen</name> <description>A small kitchen that looks like it hasn't been used in a while. It has a table in the middle, and there are some cupboards. There is a door to the north, …

7
タイルマップデータを保存する良い方法は何ですか?
私はいくつかの大学の友人と2Dプラットフォーマーを開発しています。.txtファイルを使用してタイルマップを保存するXNA Platformer Starter Kitに基づいています。これは単純ですが、レベル設計で十分な制御と柔軟性を提供するものではありません。いくつかの例:コンテンツの複数のレイヤーに複数のファイルが必要な場合、各オブジェクトはグリッドに固定され、オブジェクトの回転、文字数の制限などが許可されません。したがって、レベルデータの格納方法について調査しています。およびマップファイル。 これは、タイルマップのファイルシステムストレージのみに関係し、ゲームの実行中にゲームで使用されるデータ構造には関係しません。タイルマップは2D配列に読み込まれるため、この質問はどのソースから配列を埋めるかに関するものです。 DBの理由:私の観点からは、データベースを使用してタイルデータを保存するデータの冗長性が少ないと思います。同じ特性を持つ同じx、y位置のタイルは、レベルごとに再利用できます。特定のレベルで使用されているすべてのタイルをデータベースから取得するメソッドを作成するのは十分簡単だと思われます。 JSON / XMLの推論:視覚的に編集可能なファイル。変更はSVNを介してはるかに簡単に追跡できます。しかし、繰り返しコンテンツがあります。 どちらかが他に比べて欠点(ロード時間、アクセス時間、メモリなど)がありますか?そして、業界で一般的に使用されているものは何ですか? 現在、ファイルは次のようになっています。 .................... .................... .................... .................... .................... .................... .................... .........GGG........ .........###........ .................... ....GGG.......GGG... ....###.......###... .................... .1................X. #################### 1-プレーヤーの開始点、X-レベル出口、。-空のスペース、#-プラットフォーム、G-宝石
12 xna  c#  xml 

3
粒子を滑らかなブロブとして描く
ゲーム/グラフィックスの開発は初めてで、パーティクル(2D)で遊んでいます。液体/水のように、粒子を互いにブロブとして近づけたい。ブロブが滑らかではない(そして大きすぎる)ため、大きな円を重ねて描画したくありません。物理学はあまり知りませんが、表面張力に似たものが欲しいと思います。 stackexchangeやGoogleで何も見つかりませんでした(正しいキーワードがわからないかもしれません)。これまでに2つの可能な解決策を見つけましたが、アルゴリズムに関する具体的な情報を見つけることができません。 それらの1つは、粒子の凹包を計算することです。等価クラスを作成することにより、ブロブを計算できます(「互いに近い」関係に)。不思議なことに私は見つけることができませんでした任意の凹面船体を計算する方法を説明するアルゴリズムを。多くの投稿(およびstackexchange間)は、これを行うライブラリまたは商用製品にリンクしています(C#で動作するにはライブラリが必要です)が、アルゴリズムはありません。また、このソリューションには、粒子の円に問題があり、中央の空きスペースが検出されない場合があります。 凹型船体の研究中に、アルファシェイプと呼ばれるものを見つけました。これはまさに私がやりたいことのように思えますが、凹型船体と同じように、実際にどのように機能するかを説明する情報源は見つかりませんでした。プレゼンテーション資料をいくつか見つけましたが、先に進むのに十分ではありません。私以外の誰もが知っている大きな秘密のようなものです:-/ 凹型の船体またはアルファ形状を計算した後、ベジエ曲線にして滑らかで素敵なものにします。 私のアプローチは少し複雑すぎると感じていますが、おそらくこれを間違った方法で解決しようとしていますか?あなたが私の問題に対する他の解決策を提案するか、私が行方不明になっている部分を説明できるなら、私はとても幸せで感謝します:-) ありがとう。

2
ユーザーがミニゲームのパックをダウンロードし、メインの.exeを変更せずに実行できるミニゲームのコレクションをXNAで作成するにはどうすればよいですか?
現在、XNAでPCゲームを作っています。これは実際にはミニゲームのコレクションです(現時点では3つのミニゲームがあります)が、ダウンロード可能な「パック」で作成して追加する予定です。 私の質問は、これを達成する最良の方法は何ですか? 現在、私の考えは次のとおりです。 「ゲーム」インターフェースを作成する このインターフェイスにゲームをビルドしますが、.dllとして作成します メインの.exeファイルでディレクトリをスキャンし、実行時に.dllをロードします。 私はこのアイデアをあまりいじっていませんが、少なくともこのプラグインのアプローチを使用するアプリケーションがあることは知っています(Notepad ++はそうです)それらが存在する必要があります)。しかし、これは以前に解決された問題であると思われるので、確立されたベストプラクティスの形式があるかどうか疑問に思っています。
12 xna  c# 

2
Unityがリフレクションを使用して更新メソッドを取得するのはなぜですか?
なぜアクセスするために、ユニティ使用リフレクションを行うMonoBehaviourようなメッセージ法Awake、Update、Start、...? リフレクションを使用するのは遅いのではないでしょうか?なぜ他のアプローチを利用しないのTemplate Methodですか?MonoBehaviour基本クラスでメソッドを抽象として定義し、サブクラスにそれを実装させるだけです。
12 unity  c#  performance 

1
堅牢なアイテムシステムの作成
私の目的は、次のようなものを処理できる、可能な限り一般的なアイテムシステムを作成することです。 アップグレード可能なアイテム(+6カタナ) ステータス修飾子(+15器用さ) アイテムモディファイア(Yダメージを与える確率%X、フリーズする確率) 充電アイテム(30回使用の魔法使い) セットアイテム(4セットのXセットを装備してY機能を有効化) レアリティ(共通、ユニーク、伝説) 劣化(一部のクラフト材料に分割) 製作可能(特定の材料で製作可能) 消耗品(5%%X攻撃力、回復+15 hp) ※以下の設定で太字になっている機能は解決できました。 今、私は私が考えていることを反映するために多くのオプションを追加しようとしました。必要な機能をすべて追加するつもりはありませんが、必要に応じて実装できるようにしたいと考えています。これらは、在庫システムおよびデータのシリアル化とも互換性がある必要があります。 私は継承をまったく使用せず、エンティティコンポーネント/データ主導のアプローチを使用することを計画しています。最初は、次のようなシステムについて考えました。 BaseStat:外出先で統計を保持する汎用クラス(アイテムとキャラクターの統計にも使用できます) 項目:リスト、名前、項目タイプ、およびui、actionName、説明などに関連するものなどのデータを保持するクラス。 IWeapon:武器のインターフェース。すべての武器には、IWeaponが実装された独自のクラスがあります。これには、Attackとキャラクター統計への参照があります。武器が装備されている場合、そのデータ(アイテムクラスのstat)がキャラクターstatに挿入されます(BaseStatが何であれ、それはStatボーナスとしてキャラクタークラスに追加されます)したがって、たとえば、剣( jsonを使用してアイテムクラスを作成する)ため、剣はキャラクターのステータスに5攻撃を追加します したがって、BaseStatは( "Attack"、5)になります(enumも使用できます)。このステータスは、装備するとBonusStat(別のクラスになる)としてキャラクターの "攻撃"ステータスに追加されます。したがって、SwordはIWeaponを実装するという名前のクラスが作成されます。アイテムクラスが作成されます。そのため、この剣にキャラクターのステータスを挿入し、攻撃するときに、キャラクターのステータスから合計の攻撃ステータスを取得し、攻撃方法でダメージを与えることができます。 BonusStat:BaseStatに触れずに統計をボーナスとして追加する方法です。 IConsumable:IWeaponと同じロジック。直接統計の追加はかなり簡単(+15 hp)ですが、この設定で一時的な武器を追加するかどうかはわかりません(%xで5分間攻撃する)。 IUpgradeable:これは、このセットアップで実装できます。私は武器をアップグレードするときに増加する基本ステータスとしてUpgradeLevelを考えています。アップグレードすると、武器のBaseStatを再計算して、アップグレードレベルに一致させることができます。 この時点まで、システムはかなり良いと思います。しかし、他の機能については、他に何かが必要だと思います。たとえば、BaseStatはこの機能を処理できず、これが行き詰まったため、Craftable機能をこれに実装できないからです。すべての材料をスタットとして追加できますが、それは意味がありません。 これを簡単に投稿できるようにするために、次の質問を参考にしてください。 このセットアップを続行して他の機能を実装する必要がありますか?継承なしでそれは可能でしょうか? 継承なしでこれらの機能をすべて実装するために、あなたが考えることができる方法はありますか? アイテムモディファイアについて、どうすればそれを達成できますか?それはその性質上非常に一般的だからです。 この種のアーキテクチャを構築するプロセスを容易にするために何ができるか、推奨事項はありますか? この問題に関連する掘り出し物はありますか? 私は本当に継承を避けようとしていますが、継承をかなり維持できるように維持しながら、継承によって簡単に解決/達成できると思いますか? さまざまな側面や人から知識を得ることができるように質問を非常に広くしているので、1つの質問に自由に答えてください。 編集 @ jjimenezg93の答えに従って、C#でテストするための非常に基本的なシステムを作成しました。あなたがそれに何かを追加できるかどうかを確認してください: public interface IItem { List<IAttribute> Components { get; set; } void ReceiveMessage<T>(T message); …

5
コンポーネントベースのゲームで衝突を適切に処理する方法は?
コンポーネントを中心に設計されたゲームで衝突を適切に処理する方法に頭を悩ませようとしています。 多くの例ではPhysicsComponent、エンティティのコンポーネントのリストに何らかの種類の追加が加えられていますが、実際の実装では混乱します。 これPhysicsComponentが機能するためには、周囲の世界にアクセスする必要があります。これは私には直感的な意味がありません。コンポーネントは、そのコンテナ(エンティティ)だけでなく、そのコンテナのコンテナ(世界)を認識すべきではありませんか? 私には、レベルまたはシーンがこれらのエンティティのリストを維持し、ゲームが更新されるたびに、エンティティをループしてどのコリジョンを決定するように聞こえます。 私の質問は、第一に、これが良い設計であるかどうか、そして第二に、どのエンティティが衝突できるかを決定する方法です。ソリッドエンティティは空のIRigidBodyインターフェイスを実装できるので、レベルはリスト内のどのエンティティが衝突をサポートするかを決定できます。しかし、これはコンポーネントの設計を壊していますか? 代わりに、空のRigidBodyコンポーネントを含める必要がありますか?常に空であるとは限らず、このアプローチはより将来性があるため、これは実際により良い場合があります。これに関する唯一の問題は複雑さです。シーンは、すべてのエンティティだけでなく、すべてのエンティティのコンポーネントもループして、このRigidBodyコンポーネントがあるかどうかを判断する必要があります。 第三に、それらが衝突した場合、両方のエンティティに何らかの方法で通知する必要があり、これを達成する方法については確信がありません。 両方のエンティティにHealthComponentが含まれていて、衝突すると両方のヘルスが任意の値5減少するとします。2つのエンティティ間の衝突を検出した場合、これを処理するのはシーンの責任です。 しかし、その後、シーンはあまりにも責任がありますか?エンティティがアクセスしてはならない(?)ものの多くをシーンが担当している場合、これが手に負えなくなり、扱いにくくなるのを見ることができました。 編集:詳細が更新された質問。

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() それは本当にいです。 それで、仲間のゲーム開発者は、この混乱を解決する方法を知っていますか?ありがたいです!

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 

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

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
非同期操作/コルーチンを待つ方法は?
Unity 5でコルーチンと非同期操作が完了するのを待つ一般的で再利用可能な方法を探しています。C#5のawaitキーワードと同様です。 私が考えることができる最も簡単な方法は次のようなものです: public class SomeUtility { public bool IsDoingSomething { get; private set; } public IEnumerator DoSomethingAsync() { IsDoingSomething = true; yield return new WaitForSeconds(2); IsDoingSomething = false; } } そして別のコルーチンで: while(!someUtilityInstance.IsDoingSomething) yield return null; ただし、whileステートメントでコードが乱雑になり、再利用できず(単純なユーティリティ関数でもインスタンスと専用クラスが必要です!)、必要のない場所にシングルトンまたは静的なものがたくさんあるため、これはあまり良くありません。 私が見つけた最も近いものはUnityを使用していAsyncOperationます。これは非常にうまく機能します: public static IEnumerator Await(this AsyncOperation operation) { while(!operation.isDone) yield return operation; } …

2
動的な障害物やプレーヤーが作った障害物のためのA *パスファインディング?
こんにちは、Unity 5でTDを作成しています。Pathfindingで助けが必要です。 私は、AIにArons A *パスファインディングを使用して、動的オブジェクトを使用し、実行時にパスを更新できるようにします。ただし、私のゲームでは、プレイヤーが特別なタレットで手先をブロックできるようにして、目的地に行く代わりに手下に「ブロックタワー」を強制的に攻撃させます。 どうすればこのようなことを達成できますか? より明確にするための画像:
11 unity  c#  2d  ai  path-finding 


2
2つのネットワーク化された状態の間の補間?
私はクライアント側に多くのエンティティをシミュレートしていて(それらの速度はフレームごとにそれらの位置に追加されます)、自分で推測させます。彼らは彼らが最後に見られた場所とその速度の変化についての更新を送信します。これは素晴らしい作品で、他のプレイヤーはこの作品を見つけました。ただし、しばらくすると、これらのプレーヤーはしばらくして非同期化を開始します。これはレイテンシが原因です。 状態間を補間して、正しい位置に表示されるようにしたいのですが。プレーヤーが最後に見た場所とその現在の速度はわかっていますが、最後に見た状態に補間すると、プレーヤーが実際に-後方に-移動します。他のクライアントにはベロシティをまったく使用できず、単に適切な方向に向けて「強打」するだけでしたが、これによりジャギーな動きが発生すると思われます。代替案は何ですか?

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