
在我的示例中,我有一個帶有 2 個對撞機的角色。膠囊對撞機和盒子對撞機。另外,我有一個帶有自己腳本的心臟游戲物件,如下所示。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeartCollectable : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (Player.playerHealth < Player.numberOfPlayerHeart)
{
Player.playerHealth = 1;
Destroy(gameObject);
}
}
}
我的問題是,當我跳到這個游戲物件上時。我的膠囊和盒子對撞機同時觸發。這樣玩家獲得 2 點生命值而不是 1 點。我怎樣才能只觸發其中一個?
uj5u.com熱心網友回復:
這是我對這個問題的解決方案。在OnTriggerEnter2D()中,我們可以使用GetType()函式檢查碰撞的型別。如果它是一個膠囊碰撞器,它的型別將是“UnityEngine.CapsuleCollider2D”。如果它是一個盒子對撞機,它將是“UnityEngine.BoxCollider2D”。然后我們可以把這個型別轉換成一個字串,檢查它是盒子還是膠囊碰撞器。像這樣;
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.GetType().ToString().Equals("UnityEngine.CapsuleCollider2D"))
{
if (PlayerMovement.playerHealth < PlayerMovement.numberOfPlayerHeart)
{
PlayerMovement.playerHealth = 1;
Destroy(gameObject);
}
}
}
我不知道這是最好的解決方案,但它對我有用。
uj5u.com熱心網友回復:
有很多方法可以做到這一點。這是我能想到的最簡單的:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeartCollectable : MonoBehaviour
{
private bool hasBeenCollected = false;
private void OnTriggerEnter2D(Collider2D collision)
{
if (!hasBeenCollected && Player.playerHealth < Player.numberOfPlayerHeart)
{
hasBeenCollected = true;
Player.playerHealth = 1;
Destroy(gameObject);
}
}
}
基本上只需在收集后立即添加一個布林值,以確保您不會收集兩次。
如果你的游戲變得更復雜,我建議在玩家身上制作一個碰撞器,它只與使用圖層和圖層碰撞矩陣的道具發生碰撞。這樣,只有 1 個對撞機發生碰撞,您可以調整收集半徑,但我認為您現在不需要任何更復雜的東西。
uj5u.com熱心網友回復:
最干凈的解決方案是使用單獨的
通過取消勾選一個選項,您可以完全禁用兩層之間的物理互動(包括觸發碰撞檢測)。
這將使您的心臟忽略另一個對撞機,并且只會觸發OnTriggerEnter2D一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/438285.html
