キャラクターを移動させる際、キャラクターからRayを飛ばして地面との距離を計算していますが、うまくいかない箇所があります
移動キャラクターは狼でして、Rayは狼の前足と後足から飛ばしています
キャラクターにかかる重力は 地表(惑星)の中心をターゲットとした星の上での移動となります。
説明が解りにくいと思いますが、
Vector3 planet_position; Vector3 player_position; Vector3 Gravity= planet_position-player_position;
とゆう重力になります。
キャラクターが惑星の上を移動するのが理想なのですが、キャラクターの回転(グローバル座標での)Y軸が0に近くなると判定がおかしくなってしまいます。
(惑星の上側、下側では正常に動くが赤道では動きがおかしくなる)
_fallVector = キャラクターから地面に向かうベクトル Debug.DrawRay(_fallVector, -transform.up , Color.magenta); if (Physics.Raycast(_fallVector, -_transform.up, out hitpos,Length(任意), GroundLayer)) { fall = false;//Hitした場合地面があるとみなしfall(落ちている状態)=falseにしています。 } else { fall = true; }
float distance = 後ろ足からHitしている地面への距離; _Height=キャラクターの中心までの長さ if (distance > _Height) { if (!isInAir && !swim) { float diference = _Height - distance; Vector3 Add = Gravity * diference; if (CurrentAnimState.tagHash == T_Locomotion)//もし移動中だったら { _transform.position = _transform.position + Add; } } } else { if (!fall && (!isJumping(0.5f, true)) && !IsInAir) { float diference = _Height - distance; Vector3 Add = Gravity* diference; _transform.position = Vector3.Lerp(_transform.position, _transform.position + Add, Time.deltaTime); } }
ここでは惑星の位置をVector3(0,0,0);
回転を Euler(0,0,0);で話します。
おかしな挙動としては、移動先の地面のY位置が現在のキャラクター位置Yよりも0に近づく場合に、地面との判定が取れない瞬間が有り、一瞬判定が無い者として扱われてしまい、地面から離れてしまいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。