2017-05-30 5 views
0

私はボックスコライダーとトリガーが付いたキューブを手に入れました。プレイヤーがそれに立っているとき、それは落ちる。落ちている間に落ちるプラットフォームが地面を通ります。

私はプラットフォームが何かに衝突した後、それ以前に自分自身を破壊し、その開始位置でインスタンス化することを望みます。

だから私のコードはこのように見える:私のプラットフォームはダウンクラッシュしたとき

void OnTriggerEnter(Collider col) 
{ 
    if (col.CompareTag("Player")) 
     isFalling = true; 
} 

void OnCollisionEnter(Collision col) 
{ 
    if (!col.gameObject.CompareTag("Player")) 
    { 
     Instantiate(gameObject, startPosition, startRotation); 
     Destroy(gameObject); 
    } 
} 

void Update() 
{ 
    if (isFalling) 
    { 
     fallingSpeed += Time.deltaTime/20; 
     transform.position = new Vector3(transform.position.x, transform.position.y - fallingSpeed, transform.position.z); 
    } 
} 

まあ、それだけで地面を通過します。衝突が検出されない場合もあります。

誰かが私のヒントを得ていますか?

答えて

0

あなたのコライダーがトリガーに設定されている場合、OnCollisionEnterイベントは発生しません。だから私はちょうど私のミスだ

void OnTriggerEnter(Collider col) 
{ 
    if (col.CompareTag("Player")) { 
     isFalling = true; 
    } 
    else 
    { 
     Instantiate(gameObject, startPosition, startRotation); 
     Destroy(gameObject); 
    } 
} 
+0

私のプラットフォームには、トリガーを使用してコライダーと2番目のコライダーがありません – Question3r

1

:代わりに、このようOnTriggerEnterでコードを置きます。

プラットフォームには剛体が取り付けられていません。したがって、地面に衝突することはできませんでした。

これは私の新しいコードです:

private void Start() 
    { 
     data.PlatformRigid.useGravity = false; // Disable the gravity to make it stay in the air 
    } 

    private void OnTriggerEnter(Collider col) 
    { 
     if (!data.Activated) // just do this 1 time 
     { 
      if (col.CompareTag("Player")) // just start executing the following code if the colliding object is the player 
      { 
       data.Activated = true; // don't execute this code a second time 
       data.PlatformRigid.useGravity = true; // start falling 
      } 
     } 
    } 

    private void OnCollisionEnter(Collision col) 
    { 
     if (!col.gameObject.CompareTag("Player")) 
     { 
      Instantiate(gameObject, data.StartPosition, data.StartRotation); // Create itself at default 
      Destroy(gameObject); // Destroy itself 
     } 
    } 

私はもうアップデートでfallspeedを計算する必要はありません。私はちょうど重力を無効にし、プレイヤーがプラットフォームに当たったときにそれを可能にします。

関連する問題