Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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
C# (Unity)在更改layermask时向游戏对象添加脚本_C#_Unity3d - Fatal编程技术网

C# (Unity)在更改layermask时向游戏对象添加脚本

C# (Unity)在更改layermask时向游戏对象添加脚本,c#,unity3d,C#,Unity3d,我想能够添加一个脚本到一个游戏对象时,改变其LayerMask。我希望在编辑器中更改它时发生这种情况,而不仅仅是在运行时 我该怎么做?我无法在谷歌上找到任何可能对我有帮助的必要信息 提前谢谢。我不认为有任何内置功能,但您可以使用、存储和比较它 使用可以使组件也在编辑器中执行某些方法: [ExecuteInEditMode] public class LayerChecker : MonoBehaviour { private int lastLayer; // could e.

我想能够添加一个脚本到一个游戏对象时,改变其LayerMask。我希望在编辑器中更改它时发生这种情况,而不仅仅是在运行时

我该怎么做?我无法在谷歌上找到任何可能对我有帮助的必要信息


提前谢谢。

我不认为有任何内置功能,但您可以使用、存储和比较它

使用可以使组件也在编辑器中执行某些方法:

[ExecuteInEditMode]
public class LayerChecker : MonoBehaviour
{
    private int lastLayer;

    // could e.g be a UnityEvent (like onClick of buttons)
    public UnityEvent OnLayerChanged;

    private void Update()
    {
        // if layer didn't change do nothing
        if(lastLayer == gameObject.layer) return;

        // changed! -> what ever you want to happen 
        // e.g. invoke the event or call another method
        OnLayerChanged.Invoke();

        // store the new layer
        lastLayer = gameObject.layer;
    }    
}


如果您想限制这种情况发生的位置,您还可以检查和/或

我认为没有任何内置功能,但您可以使用、存储和比较它

使用可以使组件也在编辑器中执行某些方法:

[ExecuteInEditMode]
public class LayerChecker : MonoBehaviour
{
    private int lastLayer;

    // could e.g be a UnityEvent (like onClick of buttons)
    public UnityEvent OnLayerChanged;

    private void Update()
    {
        // if layer didn't change do nothing
        if(lastLayer == gameObject.layer) return;

        // changed! -> what ever you want to happen 
        // e.g. invoke the event or call another method
        OnLayerChanged.Invoke();

        // store the new layer
        lastLayer = gameObject.layer;
    }    
}


如果您想限制这种情况发生的位置,还可以检查和/或

我不确定在更改LayerMask时编辑器是否使用了回调方法。但这是一种可能性。您还可以添加一个自定义脚本,该脚本具有属性
ExecuteInEditMode
将其附加到每个游戏对象,并让它检查图层任务是否已更改,可能正在更新中,然后根据它更改为的LayerMask添加相应的脚本…我不确定当LayerMask更改时编辑器是否使用回调方法。但这是一种可能性。您还可以添加一个自定义脚本,该脚本具有属性
ExecuteInEditMode
将其附加到每个游戏对象,并让它检查图层任务是否已更改(可能在更新中),然后根据其更改为的图层任务添加相应的脚本。。。