C# 如何使用标签获取最近游戏对象的名称(字符串)
我试图让我的播放器在unity2D中漂浮在地面(泥土)上。为此,我需要知道玩家和CLOSTEST dirt游戏对象之间的距离。我已经得到了一些东西,但我不能让它返回Closes dirt游戏对象的字符串名称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
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(电流距离<距离)
{
最近的=去;
距离=距离;
}
}
返回最近的位置;
}
另一个可能更快的选择是向下投射光线,并使用它碰到的第一个污垢