我做了一個LineRenderer,我添加了一個EdgeCollider2D。
現在我正在嘗試檢測所有GameObjects低于我的LineRenderer. 下面的物件也有碰撞器。
LineRenderer從第一個滑鼠位置開始,到最后一個滑鼠位置結束LineRenderer有一個EdgeCollider2D- 我需要從下面的所有物件中獲取價值
LineRenderer - 專案是二維的
我嘗試了什么:
使用 Raycast,但使用 raycast 我也從周圍的物件中獲取值。
而且我只想獲取Linerenderer下Gameobjects的值,而不是來自滑鼠觸摸的所有游戲物件的值
或者如果有可能在 2 個位置之間獲取游戲物件 *所以基本上我需要從 100 個物件中的 10 個中獲取值,它們都在一起。FE 我有 100 個蘑菇放在一起,每個蘑菇都有不同的 int 值。所以移動我的滑鼠我只需要選擇這 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;
}
}
}
}
uj5u.com熱心網友回復:
a 的問題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;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437911.html
上一篇:無法點擊烘焙按鈕
下一篇:如何修復大型狀態機?
