为了账号安全,请及时绑定邮箱和手机立即绑定

Unity 中基本比较和分配的问题

Unity 中基本比较和分配的问题

C#
偶然的你 2023-08-27 16:01:35
我创建了一个由 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;

}


查看完整回答
反对 回复 2023-08-27
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

在最后一个else if块中你再次使用了


topContact = grid;

我想它应该在bottomContact这里


else if(Mathf.Approximately(posX, grid.posX) && Mathf.Approximately(posY, grid.posY - 1f)) 

{

    bottomContact = grid;

}


查看完整回答
反对 回复 2023-08-27
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信