Debug.Log(string.Join(", ", node.GetClasses()));로 실제로 붙어있는 클래스 확인 가능.
(굳이 이렇게 안 해도 디버거에서 확인 가능)
RegisterCallback<GeometryChangedEvent>(OnGeometryChanged);
: UI 요소의 크기나 위치가 변경될 때 OnGeometryChanged 콜백을 호출
generateVisualContent += OnGenerate;
: custom geometry VisualElement를 그릴 때 사용한다.
맨 처음 그려질 때나 repaint가 필요할 때 호출됨.
매 프레임마다 호출되진 않음.
MarkDirtyRepaint() 호출하면 OnGenerate()도 호출됨.
private Vector2 _currentMousePos;
public Vector2 currentMousePos => _currentMousePos;
get 프로퍼티를 별도로 선언하면 향후 로직 추가 가능.
public Vector2 currentMousePos { get; private set; } 간단하게 자동 구현 프로퍼티 쓰면 그런거 불가능.
메뉴 만드는 법
ContextualMenuManipulatorcontextualMenuPopulateEventGenericMenugpt는 마우스 로직을 화살표 로직 안에 넣어버리길래, window 클래스에서 이벤트로 빼냄.
프로퍼티로 선언해놓고, callback은 delegate에 넣어놓고 필요할 때만 register
아예 의존성 덜 만들기 위해 모든 화살표가 window class를 참조로 갖고 있는 것이 아니라
Window class에서 지금 움직이고 있는 화살표에다가 SetMousePosition()을 호출
마우스 위치 추적으로 사용하는게 아니라 connection용으로 특화시켜서 굳이 필드 선언 안 하고 바로 현재 마우스 포지션 넣는 걸로 바꿈
EventCallback<MouseMoveEvent> 이런 식으로 delegate 선언해놓으면 Register할 때 무슨 콜백인지 명시 안 하고 바로 구독된다.
근데 굳이 delegate 선언하는게 더 귀찮아서 어떤 이벤트인지 명시하는 대신 바로 함수 넣어버림
TextField 문제
nodeTextField.verticalScrollerVisibility = ScrollerVisibility.AlwaysVisible;input.style.unityTextAlign = TextAnchor.UpperLeft;TextField 문제를 해결하려다 App UI에 대해 알게됨. 훨씬 깔끔하고 Customization도 가능한듯. 무엇보다 TextArea가 있음. 내일 시도해보기.

오늘 결과

양쪽에서 맞춰가려고 하다간 둘 다 어긋난다.
한쪽에서부터 시작해야 한다.
본 그대로를 가져오려고 하는게 아니라 형태를 가져와야 한다.
길이까지 그대로 그리려고 하면 원본 비율과 섞이면서 이상하게 그려질 수밖에 없다.
눈 위쪽에 희끄무레한 색을 바르면 깊이감이 살아난다