【问题标题】:Quick access to multiple values快速访问多个值
【发布时间】:2021-06-20 06:37:39
【问题描述】:

本身不是 Unity 问题,但它可以帮助我说明这个问题。

属性不能返回多个值。但是,在 Unity Vector3.up 中,Vector3(0, 1, 0) 似乎的简写是这样做的(无论如何对我来说)。例如,键入 Debug.Log(Vector3.up) 会打印出前面提到的三个值。我不确定到底发生了什么以如此直接的方式访问这三个值。

根据我的知识水平,我尝试尽可能多地获取有关类和结构的信息,但我无法弄清楚这一点。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 只是猜测,我不知道那个类和 Unity 文档是……特别的。我的猜测:你看到的是Vector3.ToString() 方法的返回值。例如。 public string ToString() { return x+y+z;}(伪代码,找不到,不想安装;))
  • 不能返回一个以上的值。您将始终拥有像public bool IsItSomething() 这样的签名,它将返回bool。您可以使用 out parameters 或返回包含所有所需值的包装类,或在某些情况下使用 Tuple

标签: c# class unity3d struct


【解决方案1】:

如果您可以拥有Source Code,则无需阅读文档;)

=> Vector3.up 确实只是一个简写并返回

public static readonly Vector3.up = new Vector3(0F, 1F, 0F);

Vector3.ToString 内部有

public override string ToString()
{
    return ToString(null, CultureInfo.InvariantCulture.NumberFormat);
}

public string ToString(string format)
{
    return ToString(format, CultureInfo.InvariantCulture.NumberFormat);
}

public string ToString(string format, IFormatProvider formatProvider)
{
    if (string.IsNullOrEmpty(format))
        format = "F1";
    return UnityString.Format("({0},{1}, {2})", x.ToString(format, formatProvider), y.ToString(format,formatProvider), z.ToString(format, formatProvider));
}

UnityString.Format 最终达到了预期的效果

public static string Format(string fmt, params object[] args)
{
    return String.Format(CultureInfo.InvariantCulture.NumberFormat, fmt, args);
}

这里没有更深层次的魔法;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多