0

私はこれを理解するのに少し苦労しています。私が達成しようとしているのは、一種のタックル モーションです。プレイヤーは遠くからターゲットに突進します。

ここに画像の説明を入力

図はセットアップを示しています。青いひし形がプレイヤーで、赤いものがターゲットです。紫色のボックスは、ターゲットの SkinnedMeshRenderer のレンダラー境界です。一部のターゲットのメッシュは他のターゲットよりもはるかに大きいため、レンダラー境界を使用しています。現在、プレイヤーはオレンジ色の星を狙っています...これは非現実的です。私は彼に、ターゲットがどの方向を向いていても、彼の位置に関連してターゲットの最も近い点を常にターゲットにしてほしい.図の場合、それは茶色の星になるだろう. これが私が使用しているコードです...

 public IEnumerator Blitz()
{
    rigidbody.velocity = Vector3.zero; //ZERO OUT THE RIGIDBODY VELOCITY TO GET READY FOR THE BLITZ
    SkinnedMeshRenderer image = target.GetComponentInChildren<SkinnedMeshRenderer>();
    Vector3 position = image.renderer.bounds.center + image.renderer.bounds.extents;
    position.y = target.transform.position.y;
    while(Vector3.Distance(transform.position, position) > 0.5f)
    {
    transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * 10);
        yield return null;
    }
    Results(); //IRRELEVANT TO THIS PROBLEM. THIS CALCULATES DAMAGE.
    Blitz.Stop(); //THE PARTICLE EFFECT ASSOCIATED WITH THE BLITZ.
    GetComponent<Animator>().SetBool(moveName, false); //TRANSITIONS OUT OF THE BLITZ ANIMATION
    GetComponent<Input>().NotAttacking(); //LET'S THE INPUT SCRIPT KNOW THE PLAYER CAN HAVE CONTROL BACK.
}
4

1 に答える 1

0
//Get the derection to tarvel in and normalize it to length of 1
Vector3 Direction = (Target - transform.position).normalized

Direction を使用すると、多くのことができます。たとえば、方向に速度を掛けて、それを位置に追加できます。

transform.position += Direction * MoveSpeed;

最も近いポイントに到達したい場合は、便利な Collider.ClosestPointOnBounds メソッドを使用できます。

Target = TargetObject.GetComponent<Collider>().ClosestPointOnBounds(transform.position)

方向を取得するために使用されるコードにターゲットを接続します。

または、補間しているだけなので、方向を取得せずに Vector3.Lerp を使用できます。

transform.position = Vector3.Lerp(Target,transform.position,time.DeltaTime);

目的の地点で停止するには、到着動作を使用できます。

//Declare the distance to start slowing down
float ClosingDistance = Speed * 2;
//Get the distance to the target
float Distance = (Target - transform.position).magnitude;
//Check if the player needs to slow down
if (Distance < ClosingDistance)
{
//If you're closer than the ClosingDistance, move slower
transform.position += Direction * (MoveSpeed * Distance / ClosingDistance);
}
else{
//If not, move at normal speed
transform.position += Directino * MoveSpeed;
}
于 2015-04-04T04:45:08.983 に答える