GraphView에서 TextureNode를 만드는 방법

GraphView를 공부 중입니다.

을 한번 시도한 후에, 그럼 "텍스처를 가진 TextureNode를 만들려고했을 때 어떻게 할까?"라고 여러가지 시행착오한 결과, 우선 실장할 수 있었으므로 메모해 둡니다



TextureNode.cs
using UnityEditor.Experimental.GraphView;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;

namespace ScreenPocket
{
    /// <summary>
    /// テクスチャノード
    /// </summary>
    public sealed class TextureNode : NodeBase
    {
        private Image _image;
        public Texture texture => _image.image;

        public TextureNode() : base()
        {
            title = "Texture";

            var outputPort = Port.Create<Edge>(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(Texture2D));
            outputContainer.Add(outputPort);

            var objectField = new ObjectField
            {
                objectType = typeof(Texture2D),
                allowSceneObjects = false
            };

            _image = new Image(); //表示用

            objectField.RegisterCallback<ChangeEvent<Object>>(e =>
            {
                _image.image = (Texture2D)e.newValue;
            });

            mainContainer.Add(objectField);
            mainContainer.Add(_image);
        }
    }
}


포인트는 RegisterCallback입니까?
텍스처를 다루는 ObjectField를 원했던 것도 있습니다.
objectField.RegisterCallback<ChangeEvent<Texture2D>>(e =>
            {
                _image.image = e.newValue;
            });

하려고 했던 곳, 콜백이 불리지 않고,
objectField.RegisterCallback<ChangeEvent<Object>>(e =>
            {
                _image.image = (Texture2D)e.newValue;
            });

이렇게 해야 했던 점에서 조금 시간을 먹었습니다.

덧붙여서이 상태라면 텍스처가 원래 크기로 표시되어 버려 1024x1024라고 너무 커서
objectField.RegisterCallback<ChangeEvent<Object>>(e =>
            {
                _image.image = (Texture2D)e.newValue;
                _image.sourceRect = new Rect(0f,0f,100f,100f);
            });

로 100x100으로 축소 표시하려고 했습니다만, 아무래도 잘 축소할 수 없기 때문에 조사중입니다.
차례차례 미리보기는 노드로부터 제외하는 것이 좋을지도? ?

좋은 웹페이지 즐겨찾기