前言:
最近好久沒有寫文章了
話說最近一直想要做一個....
好吧,目前專案內容先不說好了
.
總之需要像圖片這樣,不要是視窗那副德性,而是一個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
.
- 4樓. koki2018/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) - 3樓. 豪子2018/10/25 11:51
感謝您的分享~在下也關注這個功能一段時間了
測試了一下發現Unity2017版本似乎沒辦法作用了
假如還沒有解決方法的話就只能先退回5加減用囉
(a451201@gmail.com) - 2樓. ㄚ修2016/07/02 16:18
我把透明視窗拿掉後,再執行是可以拖曳的,
而使用透明視窗,再執行EXE檔時,只能點擊到桌面,
無法點擊人物
(hew6615@yahoo.com.tw) - 1樓. ㄚ修2016/06/20 13:22
哈囉 哈囉
我想請問執行exe後,點擊不到角色的問題該如何解決?
目前我做了拖曳的功能,但在執行exe無法拖曳,
再麻煩您有空時回覆我!
謝謝~
(hew6615@gmail.com)