Unity에서 데스크톱 마스코트 창 통과
7186 단어 테이블 마스코트WindowsAPIUnityC#
개시하다
요즘 취미로 데스크톱 마스코트를 만들고 있어요.
그 과정에서 필요한 것은 창 투과다.
제작 과정에서 많이 막혔어요. 적어 놓을게요.
개발 환경
개발 및 실행
다음 코드를 기술했습니다.
WindowTransparent.csusing UnityEngine;
using System;
using System.Runtime.InteropServices;
public class WindowTransparent : MonoBehaviour
{
[DllImport("user32.dll")]
private static extern int GetForegroundWindow();
[DllImport("user32.dll", EntryPoint = "SetLayeredWindowAttributes")]
private static extern Boolean SetLayeredWindowAttributes(int hwnd, uint crKey, byte bAlpha, uint dwFlags);
[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
private static extern int GetWindowLong(int hWnd, int nIndex);
[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong(int hWnd, int nIndex, int dwNewLong);
const int LWA_COLORKEY = 0x1; // SetLayeredWindowAttributesで第2引数を使う場合
const int LWA_ALPHA = 0x2; // SetLayeredWindowAttributesで第3引数を使う場合
const int GWL_EXSTYLE = -20; // 拡張ウィンドウスタイルを書き換えるためのオフセット
const int WS_EX_LAYERED = 0x80000;
const uint TRANSPARENT_COLOR = 0x00000000; // 透過する色
void Start()
{
#if UNITY_EDITOR
#else
int handle = GetForegroundWindow(); // ウィンドウを指定
int extStyle = GetWindowLong(handle, GWL_EXSTYLE); // ウィンドウの情報を取得
SetWindowLong(handle, GWL_EXSTYLE, extStyle | WS_EX_LAYERED); // ウィンドウの属性を変更
SetLayeredWindowAttributes(handle, TRANSPARENT_COLOR, 0, LWA_COLORKEY); // ウィンドウの特定の色を透過
#endif
}
}
Unity Editor에서 실행하면 귀찮아요.
빌더에서만 투명합니다.
또한 투명 창은 실행할 때 가장 앞의 창입니다.
상기 코드를 사용하여 실행할 때
* Solid Color로 MainCamera의 ClearFlags 사용
*MainCamera의 Background 블랙(#000000)
필요
또한 윈도우 API를 사용하여 창을 꾸밀 수 있으므로user 32.dll 상태를 참고할 수 있도록 설정해야 합니다.
Unity 프로그램에서 dll 파일을 참조할 때 Assets 폴더 바로 아래에 Plugins 폴더를 만들고 dll 파일을 넣을 수 있습니다.이번에는 user 32입니다.dll을 넣으세요.
(상기 코드를 시도해 보았지만 순조롭지 못하면 시도해 보세요.)
최후
UI 버튼에 지정된 색상이 포함되어 있어 조금만 더 통과하면
가끔 버튼이 잘 작동하지 않아서 조정이 필요합니다.
또한 데스크톱 마스코트로 사용하려면 창의 테두리를 삭제하십시오
투명 창을 종료하는 방법을 고려해야 합니다.
참고 자료
[참조]
https://answers.unity.com/questions/869378/viewing-desktop-in-scene.html
http://www.pinvoke.net/default.aspx/user32.setlayeredwindowattributes
Reference
이 문제에 관하여(Unity에서 데스크톱 마스코트 창 통과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gatosyocora/items/7cbe14914f8e603f2eab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using UnityEngine;
using System;
using System.Runtime.InteropServices;
public class WindowTransparent : MonoBehaviour
{
[DllImport("user32.dll")]
private static extern int GetForegroundWindow();
[DllImport("user32.dll", EntryPoint = "SetLayeredWindowAttributes")]
private static extern Boolean SetLayeredWindowAttributes(int hwnd, uint crKey, byte bAlpha, uint dwFlags);
[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
private static extern int GetWindowLong(int hWnd, int nIndex);
[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong(int hWnd, int nIndex, int dwNewLong);
const int LWA_COLORKEY = 0x1; // SetLayeredWindowAttributesで第2引数を使う場合
const int LWA_ALPHA = 0x2; // SetLayeredWindowAttributesで第3引数を使う場合
const int GWL_EXSTYLE = -20; // 拡張ウィンドウスタイルを書き換えるためのオフセット
const int WS_EX_LAYERED = 0x80000;
const uint TRANSPARENT_COLOR = 0x00000000; // 透過する色
void Start()
{
#if UNITY_EDITOR
#else
int handle = GetForegroundWindow(); // ウィンドウを指定
int extStyle = GetWindowLong(handle, GWL_EXSTYLE); // ウィンドウの情報を取得
SetWindowLong(handle, GWL_EXSTYLE, extStyle | WS_EX_LAYERED); // ウィンドウの属性を変更
SetLayeredWindowAttributes(handle, TRANSPARENT_COLOR, 0, LWA_COLORKEY); // ウィンドウの特定の色を透過
#endif
}
}
UI 버튼에 지정된 색상이 포함되어 있어 조금만 더 통과하면
가끔 버튼이 잘 작동하지 않아서 조정이 필요합니다.
또한 데스크톱 마스코트로 사용하려면 창의 테두리를 삭제하십시오
투명 창을 종료하는 방법을 고려해야 합니다.
참고 자료
[참조]
https://answers.unity.com/questions/869378/viewing-desktop-in-scene.html
http://www.pinvoke.net/default.aspx/user32.setlayeredwindowattributes
Reference
이 문제에 관하여(Unity에서 데스크톱 마스코트 창 통과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gatosyocora/items/7cbe14914f8e603f2eab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Unity에서 데스크톱 마스코트 창 통과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gatosyocora/items/7cbe14914f8e603f2eab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)