タグ付けされた質問 「physics」

空間と時間を介したオブジェクトの動きに関連します。加速(推力と重力)、質量、衝突応答、摩擦などの概念を含みます。

3
Bulletを使用すると、物理がネットワーク上で正しく同期しない
Bulletを使用してクライアント/サーバーの物理システムを実装しようとしていますが、同期をとるのに問題があります。 ゲームオブジェクトから変換を読み書きするカスタムモーション状態を実装しましたが、ローカルで動作しますが、ネットワーク化されたゲームに対して2つの異なるアプローチを試しました。 サーバー上にも存在するクライアント上の動的オブジェクト(たとえば、ランダムな破片やその他の重要ではないもの)は運動学的に作成されます。これは正しく動作しますが、オブジェクトは非常にスムーズに移動しません オブジェクトは両方で動的ですが、オブジェクトが移動したというサーバーからの各メッセージの後に、線形速度と角速度をサーバーからの値に設定し、サーバーのトランスフォームでbtRigidBody :: proceedToTransformを呼び出します。また、btCollisionObject :: activate(true);を呼び出します。オブジェクトを強制的に更新します。 方法2の私の意図は基本的に方法1を行うことでしたが、方法1をスムーズにするために自分で行う代わりにBulletを乗っ取って貧者の予測を行いましたが、これはうまくいかないようです(理由が100%明確ではないため)私は弾丸を踏んでさえいます)そしてオブジェクトは時々異なる場所に行き着きます。 私は正しい方向に向かっていますか?Bulletには独自の補間コードが組み込まれているようです。それは私が方法1をうまく機能させるのに役立ちますか?または、誤って踏みつけているため、方法2のコードが機能していませんか? 編集:私が気付いた方法1のもう1つの問題は、同期されていないオブジェクトに対する衝突の衝突応答が大幅にずれることです。キネティックボディは、ノックバックできないため、時々無限にシュートするものです。

3
粒子で圧力をシミュレートする方法は?
私が構築しているUnityゲームで球形の粒子のコレクションを使用して圧力をシミュレートしようとしています。問題に関するいくつかのメモ: 目標は、常に変化する2Dスペース/ボイドを小さな摩擦のない球で埋めることです。ゲームは、このスペースに押し込まれるオブジェクトの増加する圧力をシミュレートしようとしています。 レベル自体は常に左から右にスクロールします。つまり、スペースの寸法がユーザーによって変更されない場合、自動的に小さくなります(スペースの左端の部分が画面外にスクロールし続ける)。 これらの問題に取り組むために私が取ることができるアプローチは何ですか? 塗りつぶすスペースがある場合にそれを検出し、そのスペースに球を追加するタイミングを知る。 縮小するときにスペースから球を削除します。 より多くのスペースが作成されたときに球が「外側に爆発する」ように球への圧力をシミュレートする戦略。 この画像が示すように、私が考えている現在のアプローチは、画面の外にあり、画面と一緒に動く、絶えず動く壁を使用しています。 。 この動く壁は、球を空間に押し込み、閉じ込めます。新しい球を追加する場合、私は(1)空きスペースを検出すると球を複製する、または(2)スペースの左側(壁がある場所)にスポーンする-残りの球をスペースを埋めます。これは実際には圧力を作成/シミュレートしない可能性が高いため、アイデア#1の問題を予測します。アイデア#2はより有望に思われますが、これらの新しい球のパーティクルがスポーンする場所を提供する方法(およびスペースがない場合にスポーンすることの影響)の問題を提起します。 あなたの知恵を前もってどうもありがとう!
11 2d  unity  physics 

4
上に移動するプレーヤー、彼はジャンプしていますか、それとも登っていますか?
はしごを含む2D物理ベースのプラットフォーマーゲームで、上に移動するプレーヤーがジャンプによって発生したのか、はしごを登って発生したのかをどのように判断して、どのアニメーションを再生するかを知っていますか? そして一般的に、明らかに方向ベクトルは再生するアニメーションを決定するのに十分ではありません。どのようにして動きの原因も決定するのですか(使用する正しいスプライトを知っているので)?

5
Unityの2Dキャラクターコントローラー(昔ながらのプラットフォーマーを取り戻そうとしています)
この日私は(物理学を使用して)単一性を持つ2Dキャラクターコントローラーを作成しようとしています。私は物理エンジンにかなり慣れていないので、探しているコントロールの感覚を得るのは本当に難しいです。私が見つけた問題の解決策を誰かが提案できれば私は本当に幸せです: これが私のFixedUpdateです。 public void FixedUpdate() { Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0); _body.AddForce(v); v.y=0; if(state(MovementState.Left)) { v.x=-_walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed; } else if(state(MovementState.Right)) { v.x= _walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed; } _body.velocity=v; Debug.Log("Velocity: "+_body.velocity); } ここでは、リジッドボディを動かして、重力と線形力を左右に加えます。動いているときに跳ね返ることがなく、摩擦が0、静止した状態で摩擦が1つの物理的マテリアルをセットアップしました。主な問題は、スロープのあるコライダーがあり、速度が上がる(遅い)、スロープを下る(速い)、直線のコライダー(通常)から速度が変化することです。これをどのように修正できますか?ご覧のとおり、x軸には常に同じ速度を適用しています。 プレーヤーのために、力を適用しているリジッドボディである球を足の位置に設定しました。 これで私の人生を楽にするかもしれない他のヒントは大歓迎です:)。 PD帰宅中に、プレイヤーが歩いている表面に平行な一定の力を適用してこれを解決できることに気づきましたが、それが最善の方法であるかどうかはわかりません。

1
ネットワーク統合のため、独自の物理エンジンを作成する必要がありますか?
現在、トップダウンのリアルタイムゾンビシューティングゲームを開発しています。これをJavaでコーディングし、物理エンジンとしてJBox2Dを使用しています。私は今週ネットワークをコーディングしており、現在は物理の同期まで行っています。 私は、サーバーが後でそれを承認する限り、クライアントが自由に移動できる予測クライアント/権限のあるサーバーモデルを使用することを計画しています。これには、クライアントが動きのデータを含むパケットをサーバーに送信し、サーバーが待ち時間を計算し、古い状態から世界を再シミュレーションすることが含まれます。 私の問題は、私の現在の物理エンジンであるJBox2D(基本的にはBox2Dのポート)は、ワールドのロールバックをサポートしておらず、ワールドデータをシリアル化するのがそれほど簡単ではないことです。私には2つの解決策があります。現在の物理エンジンを変更または拡張するか、自分で作成することができます。 自分の物理エンジンを作成する理由- 不要な機能を削除できます。トップダウンゲームでは、衝突のメカニズムと力の処理だけが本当に必要です。重力は関係ありません。 私はコードをよりよく理解でき、ロールバック機能を実装する方が[おそらく]簡単です JBox2Dを拡張/変更する理由 私自身の物理エンジンを書くことは、かなりの量の仕事になるでしょう、それは面倒かもしれません JBox2Dには幅広いサポートコミュニティがあり、開発者と協力することができます JBox2Dには、衝突検出など、特定の最適化があり、便利です これについては既に行われているようにいくつかの作業が行われますが、コードはほとんど共有されていません だからあなたの意見は何ですか。これは私の最初のゲームであり、私はプロのゲーム開発者ではありません。誰かがその領域ですでに行われた作業へのリンクを提供できる場合(できればJBox2D / Box2D / Javaを使用)。

4
オブジェクトの速度が上がるにつれて速度が低下する方法
Flashでゲームを開発していますが、少し手助けが必要です。それは数学の問題と考えることができます。 オブジェクトが高速Xで飛んでいるため、オブジェクトが石と衝突する可能性があります。石にぶつかったときは、石を割って続行するための速度が遅いオブジェクトが必要です。ハードコードして次のように書くのは簡単ですmyVelocity -= 10;が、私の主な問題は、初期速度が高いほど速度を落とさないようにすることです。 たとえば、速度が300の場合は10を失い、200の場合は20を失います。 これはある種の式で行うことができますか?

5
空間ハッシュと四分木に代わる2D空間分割
私はゲームに空間分割アルゴリズムを実装しようとしましたが、空間ハッシュと四分木の両方が私が探しているものではありません。 私のレベルサイズには制限がないことになっています(Int32制限のみ)。「レベル幅」と「レベル高さ」を必要としない空間分割アルゴリズムが必要です。 動いている物体がたくさんあります。500以上のオブジェクトをサポートできるほど高速なアルゴリズムが必要です。 代替案はありますか?


1
反射角
私はこの「ブレイクアウトスタイル」のゲームを持っています。 中央に大砲、大砲の周りにブロック、ブロックの周りにパッドがあります。これはゲームがどのように見えるかです: ピクセルあたりの衝突を取得することができ、ボールはブロックとの接触時に次の計算で「反射」します。 Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180; 青い線はボールの方向、黒い線(ベースライン)はブロックの表面です。 方向はラジアンで表された角度です(もちろん度に変換できます)。 ボールは次のように動かされます: // Event.ENTER_FRAME x += Math.sin(Direction) * Velocity; y -= Math.cos(Direction) * Velocity; ここまでは順調ですね。 私の問題は、パッド(小さな色のブロックの周りにある3つの暗いブロックと大きなブロック)で発生します。 向きを変えると、表面の角度が変化します。 それ以上に、ボールも側面に当たるはずなので、打球の方向と新しいボールの移動方向をどのように測定できますか? ps:必要に応じて、コードと再生可能なswfを提供できます。 編集 OK、角度の問題はVectorsで解決されましたが、側面と後方衝突の問題はまだ残っています。 そのための別の質問を開き、ここにリンクします。

3
一人称ゲームの重力の強さ
このゲームでは、重力による加速度を適切な値9.8 m / s ^ 2に設定します。物理的には正しいのですが、月面を移動しているように感じます。16m / s ^ 2の値でほぼ正しいと感じます。他の誰かがこれを経験しましたか?それは、モーションブラーや、スピード感を与える音がないからでしょうか。気持ちが良ければ16m / s ^ 2に設定してもいいですか?

3
かなりオープンソースのゲーム/レンダリングエンジン?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 それはオープンソースのドメインの外にあるかもしれませんが(これらすべてを実装する必要がある/必要とするオープンソースゲームの方法は多くないため)、次のようなことができる既存のオープンソースゲームまたはレンダリングエンジンがあります。 昼/夜サイクル 動的気象風/雨/雲/その他 濡れた表面(雨の間に表面が濡れているように見える) リアルな水 「道路」を定義できる大きな地形 シームレスな外装と内装 森(たくさんの木、乱雑など) リアルな照明(つまり、火からの光/キャンドルのちらつき) ゲームエンジンの場合: 統合物理学 車両のサポート ai マルチプレイヤー/ネットワーク対応..多分mmo 音声認識 等

2
Box2Dポリゴンの「Set()」関数を使用していますか?
Box2D物理エンジンを使用しています。そして、b2PolygonShapeと呼ばれる、box2Dのタイプの形状があります。 このクラスでは、ポリゴンを作成できます。ポイントの配列と頂点数を取得するSet()関数もあります。 Box2Dには次のような例があります。 // This defines a triangle in CCW order. b2Vec2 vertices[3]; vertices[0].Set(0.0f, 0.0f); vertices[1].Set(1.0f, 0.0f); vertices[2].Set(0.0f, 1.0f); int32 count = 3; b2PolygonShape polygon; polygon.Set(vertices, count); これは機能します。それでも、この機能を練習して混乱させようとしたとき、私はこれを行いました: b2Vec2 vertices[4]; vertices[0].Set(0, 0); vertices[1].Set(0,10); vertices[2].Set(10,10); vertices[3].Set(10,0); int32 count = 4; b2PolygonShape polygon; polygon.Set(vertices, count); これをコンパイルして実行すると、Set()関数の後でクラッシュしました。これは正方形を作成しませんか? また、コンソールでこれを得ました: Assertion failed: s > 0.0f …
11 2d  physics  box2d 

4
減速を実装するにはどうすればよいですか?
現時点では加速を使用していないため、「減速」と言います。つまり、速度をゼロに戻し、最終的に停止します。 私はベクトルが初めてなので、物理学などはあまり得意ではありません。「減速」は通常どのように処理されますか? 私が今持っているものは動作しますが、一種のハックのようです。 update:function(Game, t, dt) { var speed = Game.Input.isKeyDown('shift') ? 8 : 4; if (Game.Input.isKeyDown('a')) { this.velocity.i -= speed; } else if (Game.Input.isKeyDown('d')) { this.velocity.i += speed; } else { if (Math.abs(this.velocity.i) > 3) { this.velocity.i += (this.velocity.i > 0) ? -speed : speed; } else { this.velocity.i …

3
Unity3Dでの剛体ジャンプ力とバウンスの大きさの組み合わせの防止
Unity3Dでかなりシンプルな大理石のレーシングゲームを構築しています。ボールは、X軸とY軸上でのみ移動する3D物理オブジェクトです。左右に転がったりジャンプしたりする能力があります。ゲームを壊す問題に遭遇したことを除いて、かなり基本的なものです:落下して地面に当たったとき、ボールのバウンスの大きさをそのジャンプ力と組み合わせて、超高ジャンプを作成できます。つまり、適切なタイミングでボタンを押すと、プレーヤーはボールを急激に跳ね上げ、意図しない高さに達する可能性があります。この不具合が修正されるまで、レベルを適切に設計できません。この例を示しました: ただし、ジャンプは、ボールをまっすぐ上向きに発射するほど簡単ではありません。レベルの設計をより複雑にするために、ボールが転がっている表面に対してジャンプ角度をプログラムしました。 この図の図3は、これまでのところ私のゲームの動作を示しています。図4ではありません。Y軸上の正確な力または速度を単純に測定して設定することはできないので、これはバウンス+ジャンプの問題の解決をはるかに困難にします。これを行うと、奇妙な動作が発生します。これは、ボールが急な斜面を移動するときに劇的に顕著になります。 これまでのところ、私はこのゲームの他のすべてのデザインの問題の解決策を考え出して、それらをプログラムする方法を見つけることができましたが、これは私が行き詰まっています。私はさまざまな方法を試しましたが、どれもうまくいきませんでした。 以下は、ボールのジャンプを制御するC#スクリプトです。 using UnityEngine; using System.Collections; public class BallJumping : MonoBehaviour { public System.Action onJump; public Rigidbody objRigidbody; // Set this to the player public bool isGrounded; // Determines whether or not the ball is on the ground public Transform groundChecker; // A child object that's slightly …
10 unity  c#  physics  jumping 

4
単純なゲームでは、ゲームループの別のスレッドが必須ですか?
ゲーム開発は初めてです。学ぶために、Androidプラットフォームでこのゲームを再現しています。上記のリンクでゲームプレイのビデオを見ることができます。シンプルなゲームです。 私はゲーム開発の開始に関する多くの記事を読みました。それらのほとんどすべてが、別のスレッドでゲームループを使用することを推奨しました。ただし、この特定のゲームでは、別のスレッドを開始する必要がありますか?

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