【问题标题】:Get the height of collision shape for c# (not gdscript)获取 c# 的碰撞形状的高度(不是 gdscript)
【发布时间】:2021-07-05 18:01:15
【问题描述】:

在gdscript上,很容易获得高度:

CollisionShape.shape.height

但我不知道如何在 C# 上获取碰撞形状的高度。在 C# 上,它缺少引用“高度”

CollisionShape.Shape.??

【问题讨论】:

    标签: c# godot


    【解决方案1】:

    GDScript:

    $CollisionShape
    

    相当于

    get_node("CollisionShape")
    

    转换为 C# 为:

    GetNode("CollisionShape")
    

    但是,C# 关心类型,所以这样做:

    GetNode<CollisionShape>("CollisionShape")
    

    现在它应该显示 Shape 属性:

    GetNode<CollisionShape>("CollisionShape").Shape
    

    Ern...并非所有Shape 都有“身高”。 C# 不会让你使用它,直到它知道它是一个拥有它的类型。我假设它是一个胶囊形状,所以这样做:

    var shape = (CapsuleShape)GetNode<CollisionShape>("CollisionShape").Shape;
    

    如果你不确定它是CapsuleShape,你可以这样做:

    if (GetNode<CollisionShape>("CollisionShape").Shape is CapsuleShape shape)
    {
        // ...
    }
    

    或者像这样(如果不是,它可能会给你 null):

    Shape? shape = GetNode<CollisionShape>("CollisionShape").Shape as CapsuleShape;
    

    现在你应该可以得到Height:

    var height = shape.Height;
    

    不,额外的变量并不总是必要的。


    如果您不想使用类型,则可以使用另一种-不太安全、性能较差-的做事方式:

    var height = (float)GetNode("CollisionShape").Get("Shape").Get("Height");
    

    有时这样写很方便,然后根据需要转换为其他方式。特别是在将代码从 GDScript 转换为 C# 时。


    也可以混合使用这两种方法:

    var height = (float)GetNode<CollisionShape>("CollisionShape").Shape.Get("Height");
    

    我相信这也可以在 C# 中使用 dynamic 来完成,这里:

    var height = ((dynamic)GetNode("CollisionShape").Shape).Height;
    

    或者这里:

    var height = ((dynamic)GetNode("CollisionShape")).Shape.Height;
    

    但是,您不会获得 IntelliSense。

    【讨论】:

    • 为什么 C# 不允许直接引用,aff .. 谢谢 +1
    • @Rubénramirez 简而言之,C# 不允许您使用不属于该类型的内容。 Shape 没有Height,而是一些派生类型拥有它。如果它是一个没有Height 的类型并且您设法运行了尝试访问它的代码,那么您将遇到错误。为了安全起见,虽然 C# 不知道类型,并且类型有 Height,但您不能使用它。好吧,我想这是可能的,我添加了另一个,使用dynamic。那应该让你使用它,但你不会有 IntelliSense。你可以把它想象成“我知道得更清楚,现在让我来”。
    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多