【问题标题】:I want a function to return a certain value, else return false我想要一个函数返回某个值,否则返回 false
【发布时间】:2017-02-25 07:28:19
【问题描述】:

简而言之,我注意到 Unity(我使用的一个简单的游戏开发平台)中的许多预定义函数要么返回一个值(例如坐标),要么在满足某些条件时返回 false。我自己尝试过这样做,但是编译器总是在寻找一个转换作为返回类型,并且不允许我返回一个布尔值(因为函数被声明为返回一个转换)。

    Transform SelectObject() {
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, out hit, unitLayer))
        return hit.transform;
    else
        return false;
}

如何在函数“失败”其任务时返回某种数据类型,同时让函数返回布尔值 (false)?

【问题讨论】:

  • 即使是预定义的函数也应该记录在某个地方。也许您想寻找此类行为的一些示例。我不喜欢 Unity,但你在这里描述的内容听起来很奇怪。您确定没有一些 隐式 转换将“null”之类的内容转换为 false 吗?!
  • @GhostCat 答案一直就在我的代码中。我不明白“out”关键字的基本概念。某些预定义函数(例如“Physics.Raycast()”)将根据是否满足某些条件返回真或假,但这些函数还将通过另一个带有“out”关键字的变量传递额外信息。有效地返回一个布尔值和一些额外的信息。

标签: function unity3d return return-type


【解决方案1】:

我有一段时间没有使用 Unity,但我认为你只需要这样做:

Transform SelectObject() {
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, out hit, unitLayer))
        return hit.transform;
    else
        return null;
}

Unity 有一个实用程序,可以将从UnityEngine.Object 派生的对象转换为布尔值:如果对象为空,则为 false,在其他情况下为 true。 这是一件很奇怪的事情,但它确实对我有用。

我认为您可以像这样将 Transform 对象隐式转换为布尔值:

bool b = SelectObject();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多