2

私はブロック崩しゲームを構築しようとしています。ボールがパドルに当たった場所に合わせてボールを狙いたいと思っています。たとえば、ボールがパドルの右端に当たった場合、ボールは右 (および上) に移動する必要があります。パドルにボックス (またはカプセル) コライダーがあり、ボールに球コライダーがあると仮定すると、どうすればこれを行うことができますか? 助けてくれてありがとう!

また、パッドのベロシティも取得したいと考えています。以下のコードは 0 を返します。

function OnTriggerEnter(other:Collider)
{
    if(other.rigidbody){
    V_pad=other.rigidbody.velocity;
    //Here it returns (0,0,0) , also tried other.attachedRigidbody
    }    

    if(other.name=="Pad"){
    rigidbody.velocity = 
Vector3(rigidbody.velocity.x, Mathf.Abs(rigidbody.velocity.y + V_pad),0); 
//this part executes but with V_pad.y=0
    }
}
4

4 に答える 4

2

Unity で 2 つのコライダーが接触するOnCollisionEnterと、同じゲームオブジェクトに追加したすべてのコンポーネントでメソッドが呼び出されます。そのメソッドをCollisionパラメーターで定義すると、2 つのコライダー間の接点を含む情報が得られます。この情報を使用して、ボールがバットのどこに触れたかを判断できます。

ボールの視点から見ると、これは常に球の「底」にあることに注意してください。また、ボールの速度の角度も考慮する必要があります。

編集:(あなたのコメントを考えると)別の方法は、を使用することかもしれませんCollider.ClosestPointOnBounds。のようなものを使用すると、ボールに最も近いバット上のポイントbat.ClosestPointOnBounds(ball)の が得られます。Vector3これは、球形のボールの場合、衝突のポイントになります。

于 2012-10-08T08:36:24.320 に答える
0

または、パドルにも球コライダーを使用します。コライダーの中心をパドルの少し後ろに移動し、必要に応じてコライダーをスケーリングできます。

于 2012-10-08T08:29:48.830 に答える
0

Vector3D クラスを使用してボールの方向を見つけてから、ボールが当たるサーフェスに応じてベクトルのコンポーネントを変更してみてください。さらにヘルプが必要な場合は、Unity Vector3D APIを使用してください。幸運を。

于 2012-10-08T01:46:05.170 に答える