我的场景中有一个 fadepanel gameobject
,它必须位于所有其他游戏对象之上。但是,当我在编辑器窗口中单击一个对象时,由于此 gameobject
位于所有对象之上,因此它是在层次结构中自动选择的对象。
有没有办法让 gameobject
保持在 Canvas 顶部,就像现在一样,但在我点击我的场景时让它完全无法选择?
最佳答案
您可以在 gameobject
上使用 HideFlags
使其不可选择:
public class HideFlagsSetter : MonoBehaviour
{
public Component target;
public HideFlags customHideFlags;
public enum Mode
{
GameObject,
Component
}
public Mode setOn = Mode.GameObject;
[ContextMenu("Set Flags")]
private void SetFlags()
{
if (setOn == Mode.GameObject)
{
target.gameObject.hideFlags = customHideFlags;
}
else if (setOn == Mode.Component)
{
target.hideFlags = customHideFlags;
}
}
}
将 customHideFlags 设置为 HideInHierarchy
会使其从层次结构中消失,因此您将无法选择它。
编辑: 由于该对象将消失,如果您无法访问脚本,则无法将其取回。所以这个脚本应该附加到一个持久对象,目标对象应该在检查器中设置。
您可以通过单击右上角的齿轮图标并选择“设置标志”来使用上下文菜单选项。它是菜单中的最后一个选项。
希望这有帮助:)
(由提问者添加)
我想要一种在编辑器模式下自动发生这种情况的方法。所以我做了相同的步骤,但我稍微更改了脚本以在编辑器模式下工作。我在类的顶部添加了 [ExecuteInEditMode],还添加了一个 Awake() 方法,该方法执行与 SetFlags 中相同的代码。似乎工作正常。
关于c# - 使游戏对象在编辑器窗口中不可选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48658158/