我如何访问一个我知道的变量的父类



我正在尝试制作一个"瓦片"列表。为此,我定义了一个名为"Tile"的类:

[System.Serializable]
class Tile
{
[SerializeField]
GameObject platform;
[SerializeField]
List<string> connectionNorth, 
connectionSouth, 
connectionWest, 
connectionEast;
}
[SerializeField]
List<Tile> tiles = new List<Tile>();

现在。。。如果我找到了存储在字段platform中的游戏对象(无论我如何找到它,使用光线投射、碰撞、触发器等(,我如何访问它的父类(运行时存储该特定游戏对象的类的实例(?。通过这样做,我想将connectionNorth列表与我拥有的其他列表进行比较。

您所说的parent是什么意思还不完全清楚。

  • 如果你指的是场景层次结构中的父GameObject,那么你可以简单地访问它的Transform.parent

    Transform parentTransform = platform.transform.parent;
    
  • 如果你想知道你的platform在哪一类中被引用。。你不能。相同的GameObject可以在n中引用不同的其他类,这里没有像parent这样的东西。为此,您可能需要不同的数据结构,例如两个Dictionary,以便能够在GameObjectTile之间来回移动,例如

    public class WhereYouUseIt : MonoBehaviour
    {
    public Dictionary<Tile, GameObject> GetGameObject = new Dictionary<Tile, GameObject>();
    public Dictionary<GameObject, Tile> GetTile = new Dictionary<GameObject, Tile>();
    public void AddTileGameObjectPair(Tile tile, GameObject obj)
    {
    // Ofcourse you probably would want some checks 
    // e.g. if one of the references is already used as Key somewhere
    GetTile.Add(tile, obj);
    GetGameObject.Add(obj, tile);
    }
    }
    

在你的描述中,你说你想比较你的列表。

你就不能简单地做一些类似的事情吗

if(connectionNorth.Contains(XYZ)) ...

注意

Btw-Unity序列化只适用于特定的嵌套级别afaik。在类Tile中引用List<Tile>时可能会遇到问题。

您必须在游戏对象和其父对象之间建立关系。

或者GameObject有一个"父"属性或字段,或者您以另一种方式存储关系。

您的Tile对象必须在MonoBehavior组件上实例化,因此您将拥有这样的东西:

public class Platform : MonoBehaviour
{
public Tile tile;
}

则可以在平台引用上使用platform.GetComponent<Platform>().tile并访问Tile成员。

您可以将瓦片比较在一起,最有可能使用静态方法:

public static bool CompareNorth(Tile a, Tile b)
{
return a.connectionNorth == b.connectionNorth;
}

您的连接似乎是列表。我认为瓷砖只有向上、向下、向左、向右,所以不需要列表。如果它无论如何都是一个列表:

public static bool CompareNorth(Tile a, Tile b)
{
var firstNotSecond = a.connectionNorth.Except(b.connectionNorth).ToList();
var secondNotFirst = b.connectionNorth.Except(a.connectionNorth).ToList();
return !firstNotSecond.Any() && !secondNotFirst.Any();
}

比较差异的两个通用列表的最快方法

相关内容

最新更新