この日私は(物理学を使用して)単一性を持つ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帰宅中に、プレイヤーが歩いている表面に平行な一定の力を適用してこれを解決できることに気づきましたが、それが最善の方法であるかどうかはわかりません。