網路城邦
上一篇 回創作列表 下一篇   字體:
[unity經驗分享] 如何把視窗背景設定成透明 C#
2015/08/11 21:06:47瀏覽5802|回應4|推薦1

前言:

最近好久沒有寫文章了

話說最近一直想要做一個....

好吧,目前專案內容先不說好了

.

總之需要像圖片這樣,不要是視窗那副德性,而是一個3D模組在顯示器前面跳舞這樣。

原本以為相當麻煩,可能要用其他3D引擎在VisualStudio上面才能完成

不過後來發現Unity就可以辦到了

省了很多時間

.

https://drive.google.com/open?id=0B3hpPe6AAVmzUU9VNHZ2Nk5hZVk

另外推薦一下上面這個軟體

MMD_DM

可以Loady自己的PMD檔(目前好像不支援PMX有點可惜)

也可以載入Pose 和 VMD

是個相當好玩的調教工具

.

https://www.youtube.com/watch?v=oNx4lleka6s

網路上也有很多範本

這個exe可以開很多個,可以個分別載入不同的人物來玩w

.


正文:

前面的匯入3D模組啥的不才就先不說明了

目前就先以 "YYB式桜ミクv1.00"  這個模組,轉成unity 可以吃的格式作為範例

.

https://drive.google.com/open?id=0B3hpPe6AAVmzbF93aWhVMWFnbGM

然後下載這段程式碼

修改取自網路

.

把它丟進Unity裡面

再套用在隨便一個GameObject裡

.

SetLayeredWindowAttributes(hwnd, 0x000000, 240, 2);// Transparency=51=20%, LWA_ALPHA=2

整段裡面比較要提的是這一行

0x000000 類似Key Color(R G B A)(紅 綠 藍 透明),會過濾掉這個顏色

也就是R G B 都是0(黑色) A 也是0(也就是透明度為完全透明)

.

240 是整體透明度,簡單說是過濾掉Key Color 後剩餘人物的透明度

介於0(完全透明)~255(完全不透明)

如果改成255在unity中的人物就會在桌面上顯示就會是實心的,人物中間不會有點透光

.

然後到Camera的Background裡面

.

R G B A 都設定成 0,符合SetLayeredWindowAttributes裡面的key值

簡單來說是為了讓背景能夠過濾掉

A(透明度) 雖然設定成 0 就圖片意思來說也是透明的,但如果跟SetLayeredWindowAttributes裡面該濾掉的顏色的key值不一樣最後還是會被顯示出來

.

如果這個Script正在使用,要執行的時候不能夠按下Play,之後Game 和 Scene的視窗有一定的機率會不見(變成透明了XD)

要Buile成exe在看結果才行

.

執行exe後就可以看到原本是整個視窗

現在變成只有人物在上面了

.

即使操作其他視窗人物也會顯示最上層,剛好符合不才之後的需求w

.

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=andy840119&aid=27684594

 回應文章

koki
2018/10/26 11:34
可參考這篇
https://www.cnblogs.com/Jason-c/p/9414573.html

void Awake()
{
Screen.fullScreen = false;
hwnd = GetActiveWindow();

//测试效果
RemoveRim();

SetTransparency();
}

//去掉边框
void RemoveRim()
{
uint nFlag = (uint)(GetWindowLong(hwnd, GWL_STYLE) & ~WS_BORDER & ~WS_CAPTION);
SetWindowLong(hwnd, GWL_STYLE, nFlag);
}

//设置透明:注意
//1、一定要先调用去掉边框的函数
//2、将camera 设置为Solid color,并将颜色设置为黑色
void SetTransparency()
{
var margins = new MARGINS() { cxLeftWidth = -1 };
DwmExtendFrameIntoClientArea(hwnd, ref margins);
}
(ncnukoki@gmail.com)

豪子
2018/10/25 11:51

感謝您的分享~在下也關注這個功能一段時間了

測試了一下發現Unity2017版本似乎沒辦法作用了

假如還沒有解決方法的話就只能先退回5加減用囉

(a451201@gmail.com)

ㄚ修
2016/07/02 16:18

我把透明視窗拿掉後,再執行是可以拖曳的,

而使用透明視窗,再執行EXE檔時,只能點擊到桌面,

無法點擊人物

(hew6615@yahoo.com.tw)

ㄚ修
2016/06/20 13:22

哈囉 哈囉

我想請問執行exe後,點擊不到角色的問題該如何解決?

目前我做了拖曳的功能,但在執行exe無法拖曳,

再麻煩您有空時回覆我!

謝謝~

(hew6615@gmail.com)
他喵的(andy840119) 於 2016-06-22 10:10 回覆:

滑鼠點擊的部分不才就沒有研究到了Orz....

先從input那邊去檢查滑鼠的click或是移動動作Unity有沒有抓到吧 : )