代码之家  ›  专栏  ›  技术社区  ›  Richard

为什么在BlueprintRead中使用upperty指定符Visible*/Edit**

  •  0
  • Richard  · 技术社区  · 6 年前

    虚幻引擎4提供三个说明符来控制一个C++类成员在蓝图中的可见性和可编辑性。 UPROPERTY()

    中的文档 UE4 source code UE4 wiki , UE4 documentation )关于可编辑性,如下所述:

    • VisibleAnywhere , VisibleInstanceOnly , VisibleDefaultsOnly

      ... 完全不能编辑。

    • 为了 EditAnywhere EditInstanceOnly , EditDefaultsOnly :

    • 为了 BlueprintReadOnly

      BlueprintReadWrite

      ... 可以从蓝图中读或写。

    问题:

    1. Visible* 说明符已将用法限制为 只读 在蓝图中,为什么它与 蓝色打印只读 ? 例子:

      UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly)
      UMyActorComponent* MyActorComponent;
      
    2. 更令人困惑的是 Edit* 说明符,允许 读写 限制在蓝图中只读。不是两个说明符 对立的 彼此?例子:

      UPROPERTY(EditAnywhere, BlueprintReadOnly)
      UMyActorComponent* MyActorComponent;
      
    3. 编辑* 说明符在与 BlueprintRead* InstanceOnly (例如属性窗口), DefaultsOnly (原型的属性窗口)和 Anywhere
    1 回复  |  直到 6 年前
        1
  •  8
  •   Richard    6 年前

    • Visible* / Edit* 说明符允许您(通常是游戏设计者)直接在Blueprint编辑器中访问/修改变量,以便快速配置类属性。
    • BlueprintRead* 事件图 当你在做的时候 可视化脚本 .

    说明:

    官方文件中的一些名称和解释确实有点模棱两可,特别是对初学者来说。简而言之,两者 可见的* / 编辑* 将类中的变量公开给 虚幻引擎

    自从 说明符已将用法限制为 只读 BlueprintReadOnly

    UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly) UMyActorComponent* MyActorComponent;

    在这里你暴露了一个 ActorComponent 到引擎。我来解释一下- Component 组成部分 组成部分

    假设我有一个 TpsCharacter float 变量:

    // The zooming speed
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Camera Zoom")
    float ZoomSpeed;
    
    // The FOV after zoom in
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Camera Zoom")
    float ZoomInFov;
    
    // The default FOV
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Camera Zoom")
    float DefaultFov;
    

    它们都被指定为 EditDefaultsOnly ,这意味着,在我们创建一个名为 TpsCharacter_BP 对于这个Blueprint类,如图所示: Blueprint Editor snapshot for TpsCharacter_BP

    可见的* 说明符,它们是只读的(在 “详细信息”面板

    现在让我们回到你的 MyActorComponent . 就像我说的,指定 组成部分

    1. 组成部分 “组件”面板 “详细信息”面板 组成部分
    2. 当你两个都没有 可见的* 编辑* 组成部分 ,这个 它自己会 总是 出现在编辑器中,但是 无法访问此组件中的属性/变量。 ,和 为了这个 组成部分 将为空。
    3. 说明符允许您访问 的属性 “详细信息”面板 ,就像访问 上课。但是,当你声明 ,和 “详细信息”面板 将显示有线设置,允许您修改 指针值 组成部分 而不是它的内容。这绝对是你应该做的 总是 避免。

    组成部分 : 宣布为 编辑* 组成部分 .

    蓝印本* 说明符。它是 有人在场 可见的* ? 是 对立的 编辑* 说明符?绝对没有。它们在不同的情况下有效吗?对。这个 蓝印本* 事件图 在Blueprint编辑器中,也就是在执行Blueprint可视化脚本时。为了我的 分拆器 上面的类,因为所有3个变量都声明了 蓝色打印只读 ,我可以在 事件图 Get variable from Event Graph

    你也可以为你的 . 通过使用 BlueprintReadWrite ,也可以在中设置这些变量的值 事件图 .