[英]Unity - Physics.OverlapSphere is not detecting instantiated GameObjects
[英]Detecting Gameobjects under Linerenderer
我制作了一個LineRenderer
並向其中添加了一個EdgeCollider2D
。
現在我正在嘗試檢測我的GameObjects
下的所有游戲LineRenderer
。 下面的對象也有 Colliders。
LineRenderer
從第一個鼠標 position 開始,到最后一個鼠標 position 結束LineRenderer
有一個EdgeCollider2D
LineRenderer
下的所有對象中獲取價值我嘗試了什么:
使用 Raycast,但使用 raycast 我也從 object 獲取值。
我只想獲取 Linerenderer 下的游戲對象的值,而不是鼠標觸摸的所有游戲對象的值
或者如果有可能在 2 個位置之間獲取游戲對象*所以基本上我需要從 100 個對象中的 10 個對象中獲取值,它們都在一起。FE 我有 100 個蘑菇放在一起,每個蘑菇都有其不同的 int 值。 所以移動我的鼠標我需要 select 只有這 10 個蘑菇並取它的值。
到目前為止,這是我的代碼
RaycastHit2D[] rays = Physics2D.RaycastAll(mousePos, lr.transform.forward);
Debug.DrawRay(new Vector3(startMousePosition.x, startMousePosition.y, 0), Vector3.up, Color.red, 5);
for (int i = 0; i < rays.Length; i++)
{
RaycastHit2D ray = rays[i];
if (isTOuched)
{
if (ray.collider.gameObject.tag == "Player")
{
if (objektiOdRaycast.Contains(ray.collider.gameObject) == false)
{
objektiOdRaycast.Add(ray.collider.gameObject);
for (int t = 0; t < objektiOdRaycast.Count; t++)
{
tekst = objektiOdRaycast[t].GetComponent < GridSquare().tekst;
}
words.tekstSlova.text += tekst;
}
}
}
}
Raycast
的問題是:它只檢查一個單一的光線方向。 這在您的用例中沒有意義。
你可能想使用Physics2D.OverlapCollider
獲取與給定 Collider 重疊的所有 Collider 的列表。
並做例如
// Reference via the Inspector
public LineRenderer theLine;
// configure via the Inspector
public ContactFilter2D filter;
private Collider2D lineCollider;
private readonly List<Collider2D> overlaps = new List<Collider2D>();
private readonly HashSet<Collider2D> alreadySeen = new HashSet<Collider2D>();
private void Awake()
{
// as fallback assume same GameObject
if(!theLine) theLine = GetComponent<LineRenderer>();
lineCollider = theLine.GetComponent<Collider2D>();
}
public void GetOverlappingObjects()
{
var amount = Physics2D.OverlapCollider(lineCollider, filter, overlaps);
for(var i = 0; i < amount; i++)
{
var overlap = overlaps[i];
if(alreadySeen.Contains(overlap)) continue;
alreadySeen.Add(overlap);
var overlapObject = overlap.gameObject;
// These checks are actually kind of redundant
// the second heck for the component should already be enough
// instead of the tag you could rather use a Layer and configure the filter accordingly
if (!overlapObject.CompareTag("Player")) continue;
if (!overlapObject.TryGetComponent<GridSquare>(out var gridSquare)) continue;
words.tekstSlova.text += gridSquare.tekst;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.