私はトリガーコライダーを使用しています(トリガーがチェックされている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;
}
}
}
お世話になりました。私はそれを考え出した。私はDistanceJoint2DをEarthオブジェクトにも持っていました。このオブジェクトには、「衝突を有効にする」というボックスがあり、そのボックスはチェックされていませんでした。私は箱をチェックし、それは今完璧に動作している –