Unity에서 데스크톱 마스코트 창 통과

개시하다


요즘 취미로 데스크톱 마스코트를 만들고 있어요.
그 과정에서 필요한 것은 창 투과다.
제작 과정에서 많이 막혔어요. 적어 놓을게요.

개발 환경

  • Unity 2017.4.15f1
  • Microsoft Visual Studio
  • Windows 10 Home
  • 개발 및 실행


    다음 코드를 기술했습니다.
    WindowTransparent.cs
    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
    
        }
    
    }
    
    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

    좋은 웹페이지 즐겨찾기