【问题标题】:How to get the NAME(string) of the closest gameObject with tag如何使用标签获取最近的游戏对象的名称(字符串)
【发布时间】:2019-09-07 18:44:54
【问题描述】:

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

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;
}

Unity 显示此错误: 错误 CS1503:参数 1:无法从“UnityEngine.GameObject”转换为“字符串”。 即使我清楚地返回了 closest.ToString()。 我忽略了什么吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您在函数定义中返回一个游戏对象而不是一个字符串。如果你想让它返回一个字符串,它应该是public string FindClosestDirt()

    但是,您已经拥有游戏对象,只需从函数中返回它即可。这消除了额外的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;
    }
    

    另一个更快的选项是向下投射光线并使用它击中的第一个 Dirt。

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 2021-03-29
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2018-02-11
      • 2020-10-04
      相关资源
      最近更新 更多