2017-01-25 9 views
1

私はトリガーコライダーを使用しています(トリガーがチェックされているcircleCollider2D)が、特定のオブジェクトとの衝突を感知するだけです。なぜUnity5では、私のtriggercollider2Dは特定のオブジェクトとの衝突だけを感知するのですか?

ここでスクリプトがトリガーにあります:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class Scoring : MonoBehaviour { 

public updateScore updateScore; 
Transform earth; 
// Use this for initialization 
void Start() { 
    earth = GetComponent<Transform>(); 
} 
void OnTriggerExit2D(Collider2D other) 
{ 
    Debug.Log("other collider " + other); 
    updateScore.score++;  
} 
} 

それは、このオブジェクトを感知しています:

それはそれでrigidbody2DとcircleCollider2Dを持つ2D流星オブジェクトです。 それは、このスクリプト添付あり:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CometMovement : MonoBehaviour { 

public float speed = 0.5f; 
Rigidbody2D rb; 
Vector2 direction; 

// Use this for initialization 
void Start() { 
    direction = new Vector2(Random.Range(10.0f, -10.0f), Random.Range(10.0f, -10.0f)); 
    rb = GetComponent<Rigidbody2D>(); 
    rb.AddForce(direction * speed); 

} 


} 

をしかし、それはオブジェクトの下にこれを検知していません。オブジェクトの下でこれを感知する必要があります:

これは、rigidbody2dとCircleCollider2Dを持つ地球オブジェクトです。これは、流星オブジェクトとほぼ同じです。 documentationによると

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.SceneManagement; 

public class EarthController : MonoBehaviour { 

public float force = 0.5f; 
Rigidbody2D rb; 
Vector2 direction; 
Transform transform; 

// Use this for initialization 
void Start() { 
    direction = new Vector2(0, 4); 
    transform = GetComponent<Transform>(); 
    rb = GetComponent<Rigidbody2D>(); 
    rb.isKinematic = false; 
} 

// void OnCollisionEnter2D(Collision2D coll) { 
//  SceneManager.LoadScene("Level 01"); 
// 
// } 

// Update is called once per frame 
void Update() { 

    if(Input.GetButton("Fire1")){ 
     rb.isKinematic = false; 
     if(transform.position.x <= 0 && transform.position.y <= 4){ 
      direction = new Vector2(0, -4); 
     } else { 
      direction = new Vector2(0, 4); 
     } 

     rb.AddForce(direction * force); 
     Debug.Log("going this fast: " + rb.inertia); 
    } else { 
     rb.isKinematic = true; 
     rb.velocity = Vector2.zero; 
    } 
} 
} 

答えて

3

: それは、このスクリプト添付を持って

isKinematicが有効になっている場合は、強制的に、衝突や関節が剛体には影響しませんもう

if(Input.GetButton("Fire1")){ 
    rb.isKinematic = false; 
    // ... 
} else { 
    rb.isKinematic = true; 
} 

また、Physics parametersを確認しますか?

両方のコライダーがトリガーでないことを確認してください。これについてはわかりません。

+0

お世話になりました。私はそれを考え出した。私はDistanceJoint2DをEarthオブジェクトにも持っていました。このオブジェクトには、「衝突を有効にする」というボックスがあり、そのボックスはチェックされていませんでした。私は箱をチェックし、それは今完璧に動作している –

関連する問題