GraphView에서 TextureNode를 만드는 방법
7437 단어 GraphViewUIElementsUnity
을 한번 시도한 후에, 그럼 "텍스처를 가진 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으로 축소 표시하려고 했습니다만, 아무래도 잘 축소할 수 없기 때문에 조사중입니다.
차례차례 미리보기는 노드로부터 제외하는 것이 좋을지도? ?
Reference
이 문제에 관하여(GraphView에서 TextureNode를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ScreenPocket/items/99b2fe07dccf844e1a07텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)