Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 在面板上单击鼠标右键时更改三维对象特性的面板_Unity3d - Fatal编程技术网

Unity3d 在面板上单击鼠标右键时更改三维对象特性的面板

Unity3d 在面板上单击鼠标右键时更改三维对象特性的面板,unity3d,Unity3d,我正在构建一个UI系统来编辑选定的3D对象。我在屏幕上有球体,我希望能够编辑它们的属性(例如半径)。为了做到这一点,我希望用户能够点击一个球体,然后它显示一个面板旁边的对象。当用户更改滑块值时,单击的球体半径将更改。使用新的unity活动系统,我认为这很容易实现,但我是unity的新手,即使我知道基本原理,我也不知道如何正确组织 最后,我的目标是选择多个球体,右键单击并编辑所有选定球体的半径。! 有什么建议吗?对不起,我的英语很差。谢谢以下是您的方法: 如果选择了对象,则保留一个bool用于跟

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

最后,我的目标是选择多个球体,右键单击并编辑所有选定球体的半径。!
有什么建议吗?对不起,我的英语很差。谢谢

以下是您的方法:

  • 如果选择了对象,则保留一个
    bool
    用于跟踪,例如,
    bool\u被选中
  • 在函数中切换此布尔值。当您单击一个对象并释放该对象时,将调用此函数。Unity的接口非常适合处理鼠标事件。您只需要在球体对象的脚本中定义此函数
  • 从编辑器中组合并排列其值间隔。定义一个函数,该函数将编辑球体的比例值,并将该函数绑定到该滑块
下面你可以看到我在一个游戏中是如何做到这一点的

如果为Unity提供了一个
public void\u 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);
        }
    }
}
  • 此外,还需要创建另一个脚本来切换包含滑块的菜单(画布/面板(可选)),您可以将其添加到另一个对象,如UIManager。将游戏层次结构中的
    Canvas
    分配给该脚本中的变量,然后在UIManager的
    Update()
    函数中扫描RClick


哦,刚刚实现,屏幕截图中显示的函数和分配给滑块值的函数不一样。假设这正是分配函数的方式:定义的函数需要是
public void
,并接收类型为
float
的参数。然后从下拉菜单中选择。非常感谢,非常清楚,但它只适用于一个特定的球体。我错了吗?现在,如果选择了多个球体,我需要使其工作。@另一个Noobdev是否使其他球体具有与球体相同的脚本,您可以更改其比例?是的,但滑块将仅链接到一个球体,我认为。。。因为我选择了一个球体作为滑块的目标,而不是在inspector中选择了SphereScaleSliderUpdate(float val)。您是否可以确保成功切换球体的
bool\u isSelected
?尝试删除
if(_isSelected)
条件,查看是否可以更改所有球体的比例。如果有效,这意味着您只选择了一个球体。在这种情况下,将bool公开,并从场景视图中检查变量以进行调试(查看出现了什么问题)。请查看编辑。
void Update()
{
    if (Input.GetMouseButtonDown(1)   // RClick event
    {
        // makes the slider appear through enabling canvas
        _canvasHandle.enabled = true; 
    }
}