我创建了一个由 10 个单位立方组成的对象网格系统,并将它们添加到列表中。我试图让列表中的每个对象通过它们在网格中的位置(通过变量 posX 和 posY)相互检测(topContact、leftContact、rightContact、bottomContact)。当我在运行时检查分配时,我发现具有空触点的对象,尤其是bottomContact。我已经尝试过Mathf.Approximately,以防万一这是一个浮动问题,我已经检查并确认 gridList 是完整的并且没有重复项。在运行时,每个 gridLabel 对象上的 posX 和 posY 都会被正确识别。using System.Collections;using System.Collections.Generic;using UnityEngine;public class GridLabel:MonoBehaviour { Director director; public float posX; public float posY; public string gridLabel; public GridLabel topContact = null; public GridLabel leftContact = null; public GridLabel rightContact = null; public GridLabel bottomContact = null; void Awake() { director = FindObjectOfType<Director>(); UpdateName(); PopulateContacts(); } private void UpdateName() { posX = (transform.position.x + 35) / 10; posY = (transform.position.y - 10) / 10; gridLabel = posX + "," + posY; gameObject.name = gridLabel; } void PopulateContacts() { foreach(GridLabel grid in director.gridList) { if(Mathf.Approximately(posX,grid.posX) && Mathf.Approximately(posY,grid.posY + 1f)) { topContact = grid; } else if(Mathf.Approximately(posX,grid.posX - 1f) && Mathf.Approximately(posY,grid.posY)) { leftContact = grid; } else if(Mathf.Approximately(posX,grid.posX + 1f) && Mathf.Approximately(posY,grid.posY)) { rightContact = grid; } else if(Mathf.Approximately(posX,grid.posX) && Mathf.Approximately(posY,grid.posY - 1f)) { topContact = grid; } } }}除了边框 gridLabel 对象之外,我希望所有四个接触都与相邻的 gridLabel 完成。再次,我经常发现丢失的联系人,尤其是底部联系人。这个问题可能很简单,但我对 C# 和一般编码相对较新。提前感谢您提供的任何帮助。
2 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
在最后一个else if块中你再次使用了
topContact = grid;
我想它应该在bottomContact这里
else if(Mathf.Approximately(posX, grid.posX) && Mathf.Approximately(posY, grid.posY - 1f))
{
bottomContact = grid;
}
凤凰求蛊
TA贡献1825条经验 获得超4个赞
在最后一个else if块中你再次使用了
topContact = grid;
我想它应该在bottomContact这里
else if(Mathf.Approximately(posX, grid.posX) && Mathf.Approximately(posY, grid.posY - 1f))
{
bottomContact = grid;
}
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消