C# 如何使用标签获取最近游戏对象的名称(字符串)

C# 如何使用标签获取最近游戏对象的名称(字符串),c#,unity3d,C#,Unity3d,我试图让我的播放器在unity2D中漂浮在地面(泥土)上。为此,我需要知道玩家和CLOSTEST dirt游戏对象之间的距离。我已经得到了一些东西,但我不能让它返回Closes dirt游戏对象的字符串名称 float distance = GameObject.Find("Player").transform.position.y - GameObject.Find(FindClosestDirt()).transform.position.y; public GameObject Fin

我试图让我的播放器在unity2D中漂浮在地面(泥土)上。为此,我需要知道玩家和CLOSTEST dirt游戏对象之间的距离。我已经得到了一些东西,但我不能让它返回Closes dirt游戏对象的字符串名称

float distance = GameObject.Find("Player").transform.position.y - 
GameObject.Find(FindClosestDirt()).transform.position.y;

public GameObject FindClosestDirt()
{
    GameObject[] gos;
    gos = GameObject.FindGameObjectsWithTag("Dirt");
    GameObject closest = null;
    float distance = Mathf.Infinity;
    Vector3 position = transform.position;
    foreach (GameObject go in gos)
    {
        Vector3 diff = go.transform.position - position;
        float curDistance = diff.sqrMagnitude;
        if (curDistance < distance)
        {
            closest = go;
            distance = curDistance;
        }
    }
    string closeDirtName = closest.ToString();
    return closeDirtName;
}
float distance=GameObject.Find(“Player”).transform.position.y-
GameObject.Find(FindClosestDirt()).transform.position.y;
公共游戏对象FindClosestDirt()
{
GameObject[]gos;
gos=GameObject.FindGameObjectsWithTag(“污垢”);
游戏对象最近=空;
浮动距离=数学无穷大;
矢量3位置=变换位置;
foreach(游戏对象进入gos)
{
Vector3 diff=go.transform.position-位置;
浮动电流距离=差值sqrMagnitude;
if(电流距离<距离)
{
最近的=去;
距离=距离;
}
}
字符串closeDirtName=closest.ToString();
返回closeDirtName;
}
Unity正在显示此错误: 错误CS1503:参数1:无法从“UnityEngine.GameObject”转换为“string”。 即使我清楚地返回最接近的.ToString()。
我忽略了什么吗?

您返回的是游戏对象,而不是函数定义中的字符串。如果希望它返回字符串,则应为
publicstringfindclosestdirt()

但是,您已经拥有游戏对象,只需从函数返回该对象即可。这将消除额外的
Find
调用

您还可以通过在Awake()函数中获取其结果并将其保存在变量中来删除
GameObject.Find(“Player”)

private GameObject player;

public void Awake()
{
    player = GameObject.Find("player")
}

public void Update()
{
    float distance = player.transform.position.y - FindClosestDirt().transform.position.y;
    //...
}

public GameObject FindClosestDirt()
{
    GameObject[] gos;
    gos = GameObject.FindGameObjectsWithTag("Dirt");
    GameObject closest = null;
    float distance = Mathf.Infinity;
    Vector3 position = transform.position;
    foreach (GameObject go in gos)
    {
        Vector3 diff = go.transform.position - position;
        float curDistance = diff.sqrMagnitude;
        if (curDistance < distance)
        {
            closest = go;
            distance = curDistance;
        }
    }
    return closest;
}
私人游戏对象玩家;
公共图书馆
{
player=GameObject.Find(“player”)
}
公共无效更新()
{
float distance=player.transform.position.y-FindClosestDirt().transform.position.y;
//...
}
公共游戏对象FindClosestDirt()
{
GameObject[]gos;
gos=GameObject.FindGameObjectsWithTag(“污垢”);
游戏对象最近=空;
浮动距离=数学无穷大;
矢量3位置=变换位置;
foreach(游戏对象进入gos)
{
Vector3 diff=go.transform.position-位置;
浮动电流距离=差值sqrMagnitude;
if(电流距离<距离)
{
最近的=去;
距离=距离;
}
}
返回最近的位置;
}
另一个可能更快的选择是向下投射光线,并使用它碰到的第一个污垢