右键单击时更改3d对象属性的面板

时间:2015-05-25 18:39:18

标签: unity3d

我正在构建一个用于编辑所选3D对象的UI系统。我在屏幕上有球体,我希望能够编辑它们的属性(例如半径)。为了做到这一点,我希望用户能够点击一个球体,然后它会在对象旁边显示一个面板。当用户更改滑块值时,单击的球体半径会发生变化。使用新的统一事件系统,我认为它很容易实现,但我是团结的新手,即使我知道基本的我不知道如何正确组织这个。

最后我的目标是选择多个球体,右键单击并将半径编辑到所有选定的球体。 关于如何做到这一点的任何提示?抱歉我的英语不好。感谢

1 个答案:

答案 0 :(得分:0)

以下是如何做到的:

  • 如果选择了对象,请保留bool进行跟踪,例如bool _isSelected
  • OnMouseUpAsButton()函数中切换此布尔值。单击对象并释放单击同一对象时,将调用此函数。 Unity的OnMouseXXX()接口非常适合处理鼠标事件。您只需要在球体对象中定义此功能即可。脚本。
  • 组合Slider并从编辑器中排列其值间隔。定义一个函数,该函数将编辑球体的比例值并将该功能与该滑块相关联。

下面你可以看到我在我的游戏中如何做到这一点的例子。

enter image description here

如果你提供public void _f(float val),Unity只会捕获滑块的值。它将显示在列表的顶部作为"动态浮动"。因此,在您的情况下,您的滑块更新功能应如下所示:

public void SphereScaleSliderUpdate(float val)
{
    foreach (GameObject sphere in GameObject.FindGameObjectsWithTag("your tag here"))
    {
        if (sphere.IsSelected) // don't forget to provide a public getter for _isSphere variable
        {
            sphere.transform.localScale = new Vector3(val, val, val);
        }
    }
}
  • 此外,您需要创建另一个脚本来切换包含滑块的菜单(Canvas / Panel (可选)),您可以将其添加到另一个对象,如UIManager。将游戏层次结构中的Canvas分配给该脚本中的变量,然后在UIManager的Update()函数中扫描RClick。

void Update()
{
    if (Input.GetMouseButtonDown(1)   // RClick event
    {
        // makes the slider appear through enabling canvas
        _canvasHandle.enabled = true; 
    }
}
相关问题