Unity의 GameView에 좋아하는 이미지 탑재 확장을 만들었다
7313 단어 Unity 확장AdventCalendarUnity우이C#
이번, 약간의 Unity의 확장 기능을 만들었으므로 소개합니다.
만든 것
Unity의 GameWindow에 좋아하는 이미지를 겹칠 수 있는 기능입니다.
위 이미지처럼 드래그 앤 드롭으로
GameView의 표시에 딱 맞도록 해
수중이 좋아하는 이미지가 겹쳐져
투명도를 변경하여 각 이미지를 볼 수 있습니다.
미리 GameView의 크기를 이미지의 종횡비와 일치시켜야 합니다.
왜 만들었어?
개발을 할 때 UI의 임시 배치를 할 때 맞는 것이 필요합니다.
지금까지는
1. UI 디자인 이미지 가져오기
2. 새롭게 Image 객체를 만든다
3. 크기와 위치, 표시 순서 등 조정
4. UI 이미지 연결
5. 알파 바꾸면서 이미지 보고 조정
6. 다른 아스비로 해도 괜찮거나 3-4를 반복한다
7. 더 이상 필요하지 않은 이미지와 GameObject 삭제
8. 끝!
내가하고 있었지만이 방법으로 많은 수의
임시 이미지를 가득 채우거나 불필요한 GameObject를 남기거나
불편했습니다.
그래서 이번 기능을 만들어 보았습니다.
이것으로
1. Window 열기
2. 이미지 드래그 앤 드롭
3. 알파 바꾸면서 이미지 보고 조정한다
4. 다른 아스비로 해도 괜찮거나 2-3을 반복한다
5. 끝!
느낌으로 그렇게 번거롭지 않고 프로젝트를 더럽히지 않고
확인할 수 있습니다.
사용법
개발을 할 때 UI의 임시 배치를 할 때 맞는 것이 필요합니다.
지금까지는
1. UI 디자인 이미지 가져오기
2. 새롭게 Image 객체를 만든다
3. 크기와 위치, 표시 순서 등 조정
4. UI 이미지 연결
5. 알파 바꾸면서 이미지 보고 조정
6. 다른 아스비로 해도 괜찮거나 3-4를 반복한다
7. 더 이상 필요하지 않은 이미지와 GameObject 삭제
8. 끝!
내가하고 있었지만이 방법으로 많은 수의
임시 이미지를 가득 채우거나 불필요한 GameObject를 남기거나
불편했습니다.
그래서 이번 기능을 만들어 보았습니다.
이것으로
1. Window 열기
2. 이미지 드래그 앤 드롭
3. 알파 바꾸면서 이미지 보고 조정한다
4. 다른 아스비로 해도 괜찮거나 2-3을 반복한다
5. 끝!
느낌으로 그렇게 번거롭지 않고 프로젝트를 더럽히지 않고
확인할 수 있습니다.
사용법
* 미리 GameView의 크기를 이미지의 종횡비와 맞추어 둘 필요가 있습니다.
내부 구현 정보
RenderTexture GetGameTexture()
{
var gameMainView = GetMainGameView();
if (gameMainView == null)
{
return null;
}
var t = System.Type.GetType("UnityEditor.GameView,UnityEditor");
if (t == null) return null;
var renderTexture = t.GetField("m_TargetTexture",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField | BindingFlags.FlattenHierarchy |
BindingFlags.SetField);
if (renderTexture == null)
{
return null;
}
return (RenderTexture) renderTexture.GetValue(gameMainView);
}
public static EditorWindow GetMainGameView()
{
var t = System.Type.GetType("UnityEditor.GameView,UnityEditor");
if (t == null) return null;
var getMainGameView = t.GetMethod("GetMainGameView", BindingFlags.NonPublic | BindingFlags.Static);
if (getMainGameView == null) return null;
var res = getMainGameView.Invoke(null, null) ?? GetWindow(t);
return (EditorWindow)res;
}
위와 같이 Reflection에서 얻어 GameView의 RenderTexture를 무리하게 집어 와서 표시하고 있습니다.
리플렉션으로 GameView를 내고있는 Window를 취득하고
그 중의 RenderTexture를 취득하고 있는 느낌이 됩니다.
따라서 탭 전환 등으로 GameView가 숨겨지면 표시가 업데이트되지 않습니다.
또한 OS에 따라 UV가 반전되기 때문에
셰이더로 그 근처에 다시 두 장 합성하여 표시하고 있습니다.
전체 코드는 여기에서 DL 할 수 있습니다.
반향
사내에서 디자이너가 UI 배치 조정을하고 있기 때문에
이 툴을 이용해 꽤 편하게 배치할 수 있는 것 같습니다.
만들어서 좋았다! 생각합니다.
패키지로 원하는 사람은 이쪽
*화상을 거듭할 때에 전용의 쉐이더를 이용하고 있으므로 그쪽도 필요하게 됩니다
참고로 한 사이트
htp // d. 하테나. 네. jp/신리요/20140807/p2
Reference
이 문제에 관하여(Unity의 GameView에 좋아하는 이미지 탑재 확장을 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nari-nari/items/d80ddf15b2f8a32238db
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
RenderTexture GetGameTexture()
{
var gameMainView = GetMainGameView();
if (gameMainView == null)
{
return null;
}
var t = System.Type.GetType("UnityEditor.GameView,UnityEditor");
if (t == null) return null;
var renderTexture = t.GetField("m_TargetTexture",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField | BindingFlags.FlattenHierarchy |
BindingFlags.SetField);
if (renderTexture == null)
{
return null;
}
return (RenderTexture) renderTexture.GetValue(gameMainView);
}
public static EditorWindow GetMainGameView()
{
var t = System.Type.GetType("UnityEditor.GameView,UnityEditor");
if (t == null) return null;
var getMainGameView = t.GetMethod("GetMainGameView", BindingFlags.NonPublic | BindingFlags.Static);
if (getMainGameView == null) return null;
var res = getMainGameView.Invoke(null, null) ?? GetWindow(t);
return (EditorWindow)res;
}
사내에서 디자이너가 UI 배치 조정을하고 있기 때문에
이 툴을 이용해 꽤 편하게 배치할 수 있는 것 같습니다.
만들어서 좋았다! 생각합니다.
패키지로 원하는 사람은 이쪽
*화상을 거듭할 때에 전용의 쉐이더를 이용하고 있으므로 그쪽도 필요하게 됩니다
참고로 한 사이트
htp // d. 하테나. 네. jp/신리요/20140807/p2
Reference
이 문제에 관하여(Unity의 GameView에 좋아하는 이미지 탑재 확장을 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nari-nari/items/d80ddf15b2f8a32238db텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)