gpt4 book ai didi

c# - 为什么在 Unity 5 中,我的 2D 触发器对撞机只感知与某些对象的碰撞而不感知其他对象的碰撞?

转载 作者:太空宇宙 更新时间:2023-11-03 23:04:20 25 4
gpt4 key购买 nike

我正在使用触发器对撞机(已选中触发器的 circleCollider2D),但它仅检测与某些对象的碰撞。

这是触发器上的脚本:

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++;
}
}

它正在感应这个物体:

它是一个二维 meteor 对象,上面有一个 rigidbody2D 和一个 circleCollider2D。它附有这个脚本:

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 的地球对象,与 meteor 对象几乎相同。它附有这个脚本:

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;
}
}
}

最佳答案

根据documentation :

If isKinematic is enabled, Forces, collisions or joints will not affect the rigidbody anymore

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

此外,检查您的 Physics parameters

确保您的两个碰撞器都不是触发器。不确定这个。

关于c# - 为什么在 Unity 5 中,我的 2D 触发器对撞机只感知与某些对象的碰撞而不感知其他对象的碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41861189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com