【问题标题】:How do I make changing any of 4 variables change 3 others?如何更改 4 个变量中的任何一个来更改其他 3 个变量?
【发布时间】:2017-01-02 14:21:38
【问题描述】:

我有 4 个变量可以链接,让用户链接在一起以便快速调整,如下所示:

screenshot

这就是我使链接 2 像这样工作的方式:

bool lockLeft, lockTop, lockRight, lockBottom;

if (lockLeft)
{
    if (radius.topLeft!= oldRadius.topLeft))
        radius.bottomLeft = radius.topLeft;
    if (radius.bottomLeft!= oldRadius.bottomLeft))
        radius.topLeft = radius.
}

//if(lockRight)...similar

oldRadius=radius;

问题是这只能按照它的编码顺序工作。

例如,如果我先比较topLeftbottomLeft,然后比较topLefttopRight,那么如果用户更改topRight,那么bottomLeft将不会更新,除非我比较topLeftbottomLeft 再次。

有没有更优雅的方法来做到这一点?

【问题讨论】:

  • 根据您的屏幕截图,用户可以将其中任何一个链接在一起吗?就像例如只有前两个和后两个或例如全部?
  • 什么时候执行上面的代码?直接在您更改字段时或在持续运行的更新中?
  • 我想让用户选择链接他们喜欢的任何一对,比如只有顶部/顶部和底部/左上角/所有 4 个。
  • 每当用户编辑文本字段时都会执行代码
  • 这些价值观是如何组织的?我认为更新链(或者更确切地说是两个,一个顺时针,一个逆时针)将是要走的路。像if(isConnectedClockwise) neighbor.UpdateClockwise(newVal) 这样的东西是可能的。然后该邻居将检查该值是否已经相同(=停止/返回)或设置它,并检查它是否也有顺时针连接。逆时针方向相同(值检查防止无限循环)。

标签: c# user-interface unity3d user-controls user-input


【解决方案1】:

确保serializedObject.Update(); 位于OnInspectorGUI() 方法的顶部

【讨论】:

  • 这与这里无关。我需要的是某种方法将 4 个变量锁定在一起,而不是在编辑器中显示它们
【解决方案2】:

尝试 2 个数组 - 一个值和一个布尔值,然后您可以在两个方向上递归检查值之间的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多