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