本文介紹如何透過 PlayCanvas 設計可以在 VIVERSE World 中以滿版畫面顯示的方法。在 VIVERSE World 裡,你也許希望玩家在進入世界之前,先看到一個漂亮的開場畫面──可能是品牌 Logo、遊戲名稱,或是一個「點擊開始」的提示。這樣的設計不僅能提升沉浸感,也能讓整個體驗更有專業感。
一般來說,我們可能會採用 PlayCanvas 內建的 2D Screen + Image 的設計來達成,如果只要在 PlayCanvas 上呈現的話確實可以,但當你上傳到 VIVERSE World 上後,你會發現 VIVERSE 的預設介面(例如 Logo、聊天室、角色名稱)權重會比你設計 2D Screen 更高,因此你的滿版畫面上,就會顯示 VIVERSE 的 UI(例如角色名稱),這會讓玩家很困惑,怎麼我還沒按下開始遊戲的按鈕,就可以看到角色名稱在移動了。
為了解決這個困擾,我們要擺脫 2D Screen + Image 的概念,改用 HTML DOM 的方式來製作。這篇筆記中,我透過 PlayCanvas 腳本結合 HTML DOM,建立一個能覆蓋整個 VIVERSE 畫面的開場遮罩。當玩家點擊「開始遊戲」後,遮罩會淡出消失,才真正進入你的世界。這樣的做法不僅能完全隱藏 VIVERSE 的預設介面,還能讓你完全掌控開場的節奏與視覺風格。當你確實關閉這個遮罩後,那些 VIVERSE 的 UI 才會再次被看見。
![[PlayCanvas + VIVERSE] 滿版畫面設計 [PlayCanvas + VIVERSE] 滿版畫面設計](https://img.jfsblog.com/2026/01/20260111173300_0_7739d6-1200x630.jpg)
效果展示
概念說明
在 PlayCanvas 中,我們平常要顯示一張 2D 圖片或按鈕,的確可以用 Screen 元件 搭配 Image / Button 元件來製作。但這樣做有個限制:它的範圍只存在於「遊戲畫面內」。換句話說,這些 UI 元素無法覆蓋整個瀏覽器畫面,也沒辦法蓋住 VIVERSE World 的預設介面。
相對地,這篇教學採用的是 HTML DOM 的方式來建立一個全螢幕遮罩。這個遮罩並不是 PlayCanvas 的一部分,而是直接存在於整個網頁的最上層。因此,它可以完全蓋住 VIVERSE 的 Logo、聊天室圖示、角色名稱等預設 UI,讓玩家看到的只有你設計的開場畫面。
打個比方,使用 Screen 元件 搭配 Image / Button 元件,就好像在遊戲裡掛上一張透明的螢幕,你能在螢幕上放圖片、按鈕或文字,但它仍然被限制在遊戲畫面裡,無法超出邊界,這代表它只能顯示在 PlayCanvas 的世界中,卻蓋不住 VIVERSE World 的預設介面,像是 Logo 或聊天室;而使用 HTML DOM 遮罩,就好像在整個螢幕外面拉上一層黑色布幕,這張布幕覆蓋在最上層,所以能完全擋住所有原有的畫面,包括 VIVERSE 的 UI 元素,等玩家點擊「開始遊戲」後,布幕才會被移除。
此外,使用 HTML 的方式可以更靈活地調整樣式。例如你可以使用 CSS 做出淡入淡出、漸層背景、滑鼠懸停變色等互動效果,也能更自由地加入字體、動畫或品牌元素。我們只要知道概念,就能由 AI 協助完成程式碼的編纂。
| 比較項目 | Screen 元件 | HTML 遮罩 (本篇方法) |
|---|---|---|
| 顯示層級 | 無法覆蓋 VIVERSE 預設 UI(例如聊天、Logo) | 可蓋住整個網頁,包括所有 VIVERSE 元素 |
| 控制權限 | 僅限 PlayCanvas 遊戲畫面內 | 能直接操作整個 HTML DOM(包括外層 UI) |
| 互動效果 | 需要透過 UI 組件處理點擊事件 | 可使用原生 HTML / CSS / JS 效果(例如滑鼠 hover、淡出動畫) |
| 靈活度 | 受限於 PlayCanvas 的 UI 系統 | 可自由使用網頁技術(字型、背景圖、動畫等) |
| 整合性 | 適合遊戲內的介面(血條、按鈕) | 適合「載入畫面」、「開場動畫」、「品牌 Logo 進場」等效果 |
操作流程
VIVERSE EXTENSION
本操作需要使用 VIVERSE EXTENSION 的功能,並於 VIVERSE WORLD 使用,因此需要先下載 VIVERSE EXTENSION。請參考教學〈如何為瀏覽器安裝 VIVERSE EXTENSION〉。
ASSETS
- 新增檔案:
startOverlay.js–> 掛載到 Root 上
如何掛載 Script 到 Root 上?
- 在左側的 Hierarchy 面板(層級結構)
- 點選最上層的 Root 實體
- 在右側的 Inspector 面板 往下滾
- 點 Add Component → Script
- 點 Add Script
- 選擇剛才建立的
startOverlay.js - 儲存
SCRIPTS
將剛剛新增的 startOverlay.js 貼入以下的程式碼後儲存
var StartOverlay = pc.createScript('startOverlay');
// 初始化
StartOverlay.prototype.initialize = function() {
console.log('開場遮罩已初始化');
this.app.on('game:start', this.onGameStart, this);
setTimeout(() => {
this.createOverlay();
}, 100);
};
// 創建遮罩畫面
StartOverlay.prototype.createOverlay = function() {
if (typeof document === 'undefined') return;
var overlay = document.createElement('div');
overlay.id = 'start-overlay';
overlay.style.cssText = `
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, 0.95);
z-index: 999999;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: Arial, sans-serif;
`;
var title = document.createElement('div');
title.textContent = '歡迎進入遊戲';
title.style.cssText = `
color: white;
font-size: 72px;
font-weight: bold;
margin-bottom: 100px;
text-align: center;
`;
var button = document.createElement('button');
button.textContent = '開始遊戲';
button.style.cssText = `
background-color: rgb(51,153,255);
color: white;
font-size: 42px;
font-weight: bold;
padding: 20px 60px;
border: none;
border-radius: 10px;
cursor: pointer;
transition: all 0.3s ease;
`;
button.addEventListener('click', () => {
overlay.style.transition = 'opacity 0.5s ease';
overlay.style.opacity = '0';
setTimeout(() => {
overlay.remove();
this.app.fire('game:start');
}, 500);
});
overlay.appendChild(title);
overlay.appendChild(button);
document.body.appendChild(overlay);
};
// 遊戲開始
StartOverlay.prototype.onGameStart = function() {
console.log('遊戲開始!');
};發布測試
- 回到 PlayCanvas Editor
- 點擊「Save」儲存專案
- 回到 VIVERSE World 後台
- 點擊「Publish(發布)」
- 等待 1~3 分鐘即可測試成品
相關文章
PlayCanvas & Viverse World
| 類型 | 文章 |
|---|---|
| 相關文件 | Viverse Docs.PlayCanvas Docs |
| 基礎操作 | Viverse World.Claude Playcanvas Editor MCP Server.Viverse PlayCanvas Extension (安裝.觸發.媒體.撿拾.坐下) |
| 開發者工具 | 登入與身分驗證.排行榜 |
| 開發筆記 | 滿版畫面.場景切換.密碼面板.模組化迷宮.科技感效果.對話框.碰撞計分.碰撞計分+遊戲重生.子彈閃避 |


![[PlayCanvas 筆記 02] Claude MCP Server 設定教學 [PlayCanvas 筆記 02] Claude MCP Server 設定教學](https://i1.wp.com/img.jfsblog.com/2025/11/20251206160632_0_7ed12c.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)
![[PlayCanvas 筆記 01] 前置作業-環境與帳號 [PlayCanvas 筆記 01] 前置作業-環境與帳號](https://i1.wp.com/img.jfsblog.com/2026/01/20260112000122_0_4eee0a.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)




![[PlayCanvas + VIVERSE] 一次性 NPC 對話框 [PlayCanvas + VIVERSE] 一次性 NPC 對話框](https://i0.wp.com/img.jfsblog.com/2025/11/20251109212442_0_e7359a.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)

![[PlayCanvas 筆記 03] 如何為瀏覽器安裝 VIVERSE Extension 外掛 [PlayCanvas 筆記 03] 如何為瀏覽器安裝 VIVERSE Extension 外掛](https://i2.wp.com/img.jfsblog.com/2026/01/20260112005243_0_efac5b.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)