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

我创建了一个由 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# 和一般编码相对较新。提前感谢您提供的任何帮助。


偶然的你
浏览 155回答 2
2回答

慕姐8265434

在最后一个else if块中你再次使用了topContact = grid;我想它应该在bottomContact这里else if(Mathf.Approximately(posX, grid.posX) && Mathf.Approximately(posY, grid.posY - 1f))&nbsp;{&nbsp; &nbsp; bottomContact = grid;}

凤凰求蛊

在最后一个else if块中你再次使用了topContact = grid;我想它应该在bottomContact这里else if(Mathf.Approximately(posX, grid.posX) && Mathf.Approximately(posY, grid.posY - 1f))&nbsp;{&nbsp; &nbsp; bottomContact = grid;}
打开App,查看更多内容
随时随地看视频慕课网APP