Unity3d 在面板上单击鼠标右键时更改三维对象特性的面板
我正在构建一个UI系统来编辑选定的3D对象。我在屏幕上有球体,我希望能够编辑它们的属性(例如半径)。为了做到这一点,我希望用户能够点击一个球体,然后它显示一个面板旁边的对象。当用户更改滑块值时,单击的球体半径将更改。使用新的unity活动系统,我认为这很容易实现,但我是unity的新手,即使我知道基本原理,我也不知道如何正确组织 最后,我的目标是选择多个球体,右键单击并编辑所有选定球体的半径。!Unity3d 在面板上单击鼠标右键时更改三维对象特性的面板,unity3d,Unity3d,我正在构建一个UI系统来编辑选定的3D对象。我在屏幕上有球体,我希望能够编辑它们的属性(例如半径)。为了做到这一点,我希望用户能够点击一个球体,然后它显示一个面板旁边的对象。当用户更改滑块值时,单击的球体半径将更改。使用新的unity活动系统,我认为这很容易实现,但我是unity的新手,即使我知道基本原理,我也不知道如何正确组织 最后,我的目标是选择多个球体,右键单击并编辑所有选定球体的半径。! 有什么建议吗?对不起,我的英语很差。谢谢以下是您的方法: 如果选择了对象,则保留一个bool用于跟
有什么建议吗?对不起,我的英语很差。谢谢以下是您的方法:
- 如果选择了对象,则保留一个
用于跟踪,例如,bool
bool\u被选中
- 在函数中切换此布尔值。当您单击一个对象并释放该对象时,将调用此函数。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。将游戏层次结构中的
分配给该脚本中的变量,然后在UIManager的Canvas
函数中扫描RClickUpdate()
哦,刚刚实现,屏幕截图中显示的函数和分配给滑块值的函数不一样。假设这正是分配函数的方式:定义的函数需要是
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;
}
}