2024. 7. 11. 19:30
Unity/C#
OnDrawGizmos처럼 상시동작하는점이 비슷하지만
OnDrawGizmos는 기즈모 드로우 옵션이 켜져있을때에만 동작하므로
기능코드는 가급적 OnSceneGUI에 넣는것이 좋다
1. Static에서 FindObjectsOfType를 이용해 가져와서 처리하는 방식
gist : https://gist.github.com/ahzkwid/3294e9d4cf3980ae2d1c135123db145c
public class SampleClass : MonoBehaviour
{
static void OnSceneGUI(SceneView sceneView)
{
foreach (var sampleClass in FindObjectsOfType<SampleClass>())
{
if (sceneView.camera != null)
{
var sceneCamera = sceneView.camera;
//CameraCode
}
//otherCode
}
}
}
//OtherSample: https://gist.github.com/ahzkwid/6647d3aec625afe96c54bb38b2671c72
2. SceneView.duringSceneGui에서 이벤트를 받는 방식
아래 코드는 내가 만든게 아니고 위 링크에서 가져와 간소화 한것일뿐이다
[ExecuteInEditMode]
public class SampleClass : MonoBehaviour
{
void OnEnable()
{
SceneView.duringSceneGui += OnSceneGUI;
EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;
}
void OnDisable()
{
SceneView.duringSceneGui -= OnSceneGUI;
EditorApplication.hierarchyWindowItemOnGUI -= OnHierarchyGUI;
}
void OnSceneGUI(SceneView obj)
{
HandleDragAndDropEvents();
}
void OnHierarchyGUI(int instanceID, Rect selectionRect)
{
HandleDragAndDropEvents();
}
void HandleDragAndDropEvents()
{
if (Event.current.type == EventType.DragUpdated)
{
OnDragUpdated();
}
if (Event.current.type == EventType.DragPerform)
{
OnDragPerform();
}
}
void OnDragUpdated()
{
Debug.Log("OnDragUpdated()");
}
void OnDragPerform()
{
Debug.Log("OnDragPerform()");
}
}
'Unity > C#' 카테고리의 다른 글
유니티 오브젝트 경로 관련 (0) | 2024.08.23 |
---|---|
유니티 라이트 레졸루션 개별설정 (0) | 2024.05.12 |
유니티 프리팹 드래그 드랍 (0) | 2024.05.09 |