unity中return返回
return在方法中使用,直接跳出当前方法;
如:执行以下方法最终输出结果:“从5返回”;
float test1 = 10;
string TestReturn()
{
if (test1 == 10)
{
if (test1 - 5 == 5)
{
Debug.Log("从5返回");
}
}
Debug.Log("从10返回");
return "10";
}
如果if判断中,调用方法A,方法A内部有return,执行if判断时,不受方法A内部的return影响;
如:执行以下方法最终输出结果:“从5返回”,“从10返回”;
float test1 = 10;
string TestReturn()
{
if (test1 == 10)
{
//if (test1 - 5 == 5)
//{
// Debug.Log("从5返回");
//}
TestReturn2();
}
Debug.Log("从10返回");
return "10";
}
string TestReturn2()
{
if (test1 - 5 == 5)
{
Debug.Log("从5返回");
return "5";
}
return "5-10";
}
问题发现于:应用递归输出当前场景某一对象的路径;
原始写法如下:
void Start(){
Debug.Log(OutputObjPath(PanelPractice, PanelPractice.name));
}
string OutputObjPath(Transform tar, string path)
{
if (tar.parent != null)
{
path = tar.parent.name + "/" + path;
OutputObjPath(tar.parent, path);
}
return path;
}
我将PanelPractice传递给OutputObjPath方法,输出结果为:“PanelTatal/PanelPractice”;
通过断点调试后发现,最后已经获取到了想要的路径,当执行return时,首先执行最后一次调用的OutputObjPath方法中的return,然后执行倒数第二次调用OutputObjPath方法中的return,。。直到执行第一次调用OutputObjPath方法中的return,此时path传递的路径是第一次传递的“PanelTatal/PanelPractice”,所以只返回“PanelTatal/PanelPractice”;
修改如下:设置变量,重复接收路径,最后返回路径即可;
string objPath="" ;
//tar:想要输出路径的对象 path:对象名
string OutputObjPath1(Transform tar, string path)
{
if (tar.parent != null)
{
objPath = tar.parent.name + "/" + path;
OutputObjPath1(tar.parent, objPath);
}
return objPath;
}