Google Play Games Beta 官方手遊模擬器下載與安裝紀錄

提出申請後過了數個星期,今天總算收到 Google Play Games 的開通信,下課後就馬上來安裝並進行初步測試。

以下為 Google 提供的電腦規格需求:

  • Windows 10 (v2004)
  • 固態硬碟 (SSD)
  • 遊戲級 GPU
  • 8 邏輯核心 CPU
  • 8 GB RAM
  • 20 GB 的可用儲存空間
  • Windows 管理員帳戶
  • 必須開啟硬體虛擬化功能
  • 相容的電腦裝置和設定

使用瀏覽器登入 Google 帳戶後前往 Google Play 遊戲 網頁即可看到「下載電腦檢查」的按鈕出現,點擊後即可下載一支很小的 play-games-pc-check.exe 檢查程式。

開啟 play-games-pc-check.exe 後點擊「執行」。

等待程式開始檢查數秒後,即可點按「查看結果」開啟網頁。

這時剛剛的 Google Play 遊戲 就會從下載電腦檢查變成主程式載點了。

與 Chrome 一樣,一開始抓下來的 Install-GooglePlayGames-Beta.exe 只是個啟動器,執行後需下載近 700 MB 的資料,將視網速影響下載時間。

完成後啟動主程式,並使用 Google 帳戶登入。

例行的條款與隱私權流程,快速通過。

Google Play 遊戲的主畫面非常的簡潔,目前也僅有 25 款遊戲可以玩:

  • 一拳超人:最強之男(官方正版授權)
  • 三國志・戰略版
  • 三國殺名將傳
  • 三國群英傳M
  • 口袋奇兵-超休閒的策略遊戲
  • 大福娛樂城-全球國際老虎機拉霸賭城
  • 天堂2M
  • 天堂W
  • 全面屍控
  • 狂野飆車9:競速傳奇
  • 奇蹟MU:跨時代
  • 放置奇兵(Idle Heroes)
  • 明日方舟
  • 帝國曙光
  • 跑跑薑餅人:烤箱大逃亡
  • 雲上城之歌
  • 夢幻花園 (Gardenscapes)
  • 夢幻家園 (Homescapes)
  • 夢想小鎮
  • 戰爭星球Online:即時模擬戰略MMO遊戲
  • 龍迷傳奇
  • 殭屍來了:保命要緊
  • 魔法英雄
  • 魔靈召喚: 天空之役
  • Mobile Legends: Bang Bang

進入遊戲後預設是全螢幕,使用者隨時可以按下鍵盤 Shift+Tab 開啟遊戲選項,點擊「結束全螢幕模式」切換成視窗化,或退出遊戲。

原本想去玩玩看魔靈召喚,但自從數年前註冊後這次是第二次登入,帳號被鎖了。😂

目前能玩的遊戲真的很少,如果有測試出個什麼所以然的話會再進行文章內容更新。

[Unity] 開啟 Enter Play Mode Options,減少進入播放模式等待時間

Unity 編輯器預設會在你按下 Play 按鈕後,將場景與腳本進行重新載入,以確保所有物件與屬性資料皆為預設值,例如執行時間定義的靜態變數。

而這個重新載入的時間會因為場景與腳本的複雜度影響而延長,長久下來會占了很大一部份的開發時間,我想大多數開發者應該都有遇過卡在 Application.EnterPlayMode 很長一段時間的經驗。

這個 Enter Play Mode Options 設定就是為了解決這個問題而存在,當你勾選後,之後按下播放時,編輯器就不會重載場景和腳本,而是直接執行無需等待。但出現的副作用就是前一次執行時定義的靜態變數 (包含事件) 都不會被撤銷,所以要記得在 Start 或 Awake 時將這些變數全部設定回預設值


Enter Play Mode Options 選項開關實測影片:


Enter Play Mode Options 設定位置在 Edit > Project Settings 的 Editor 中,其中還有 Reload Domain 與 Reload Scene 兩個設定可選,分別是開啟重載腳本與場景,可視目前專案開發情況進行選擇。


參考資料

Discord.NET V3 音樂機器人開發筆記:新增斜線指令與加入語音頻道

接續前篇文章,這次要在 OnReady 中完成斜線指令初始化,並在輸入指令時讓機器人可以進入你所在的語音頻道。

新增斜線指令

斜線指令有分為全域與伺服器兩種,但目前我們僅會使用伺服器版的斜線指令。

我們將要在 OnReady 中新增「play」和「stop」斜線指令,功能分別為加入語音頻道與退出,並且要考慮到多伺服器共用機器人的情況。

操作步驟如下:

  1. 建立 ApplicationCommandProperties 陣列,以方便一次性加入多筆指令。
  2. 使用 SlashCommandBuilder 分別建立 play 與 stop 的指令,WithName 與 WithDescription 是必須的不可省略。
  3. 使用 commands.Add 將命令加入陣列。
  4. 最後透過迴圈讀取 client.Guilds 機器人已加入的所有伺服器陣列,呼叫 BulkOverwriteApplicationCommandAsync 將指令資料批次設置。
async Task OnReady()
{
    var commands = new List<ApplicationCommandProperties>();

    var playCommnad = new SlashCommandBuilder()
           .WithName("play")
           .WithDescription("Play music")
    commands.Add(playCommnad.Build());

    var stopCommnad = new SlashCommandBuilder()
        .WithName("stop")
        .WithDescription("Stop music");
    commands.Add(stopCommnad.Build());

    foreach (var e in client.Guilds)
    {
        var guild = client.GetGuild(e.Id);
        
        try
        {
            await guild.BulkOverwriteApplicationCommandAsync(commands.ToArray());
        }
        catch (HttpException exception)
        {
            var json = JsonConvert.SerializeObject(exception.Errors, Formatting.Indented);
            Console.WriteLine(json);
        }
    }
}

F5 建置並啟動機器人後,於 Discord 伺服器中輸入「/」即可找到建立好的斜線指令。

但現在執行指令後不會有任何作用,接下來我們要來撰寫「加入與退出語音頻道」的功能。

設計指令行為

機器人接收到斜線指令後,會呼叫 OnReceiveSlashCommand 方法,我們可以用一個簡單的 switch 判斷來設計。

  1. 使用 cmd.User as SocketGuildUser 來取得伺服器使用者。
  2. 使用 cmd.Data.Name.ToLower() 方法來強制指令轉小寫,免除大小寫差別。
  3. 判斷使用者是否在語音頻道中,如否就直接發送回應並中斷。
  4. 發送加入語音頻道的回應訊息。
  5. 建立新 Task,防止卡到主執行緒。
  6. 使用 VoiceChannel.ConnectAsync 加入語音頻道,並開啟拒聽。
  7. 設計 stop 指令,使機器人退出語音頻道。
  8. 完成。
async Task OnReceiveSlashCommand(SocketSlashCommand cmd)
{
    var user = cmd.User as SocketGuildUser;
    var method = cmd.Data.Name.ToLower();

    try
    {
        switch (method)
        {
            case "play":
                if (user.VoiceChannel == null)
                {
                    await cmd.RespondAsync($"Please join a voice channel");
                    break;
                }
                await cmd.RespondAsync("Join the voice channel");
                var task = Task.Run(async () =>
                {
                    var audioClient = await user.VoiceChannel.ConnectAsync(selfDeaf: true);

                    while (true)
                    {
                        await Task.Yield();
                    }
                });
                break;
            case "stop":
                await user.VoiceChannel.DisconnectAsync();
                await cmd.RespondAsync("Stopped");
                break;
        }
    }
    catch (ArgumentNullException)
    {}
}

Discord.NET V3 音樂機器人開發筆記:建立專案與初始化

這邊搭配 Discord.NET V3 的框架並使用 .NET 6.0 主控台程式來進行 Discord 機器人開發,目標是讓使用者透過文字指令來控制機器人播放、停止存在本機的音樂。

本系列會分成多篇撰寫,最後統整於每篇的開頭後。


框架資訊


安裝框架

一、使用 Visual Studio 2022 建立一個 .NET 6.0 的主控台應用程式專案。

二、於專案上滑鼠右鍵 > 管理 NuGet 套件。

三、搜尋「Discord.NET」並完成安裝。

建立機器人

一、前往 Discord Developer Portal — My Applications 建立一個新的機器人,進入「Bot」分頁將「Public Bot」啟用。

二、切換到「OAuth2」分頁,設定 Authorization Method 為「In-app Authorization」,並勾選 Scopes 的「bot、applications.commands」和 Bot Permissions 的「Administrator」。前者的權限範圍分別是機器人和之後會用到的斜線指令,後者是機器人要開啟的權限,設定 Administrator 代表全開。

三、切換到 URL Generator 分頁,一樣勾選「bot、applications.commands、Administrator」後用下方給的網址開新分頁,將此機器人邀請到自己的伺服器中。

初始化連線

接下來編輯 Program.cs,在開始寫功能前要先做好以下幾樣事情:

  1. Discord Developer Portal — My Applications 的 Bot 分頁複製你的機器人 Token,並放到程式中 (一開始先 Hard Code 沒關係,未來再把它改寫到 JSON 檔案中即可)。
  2. 建立 DiscordSocketClient。
  3. 監聽 Log、Ready、MessageReceived 與 SlashCommandExecuted 四個常用的事件,分別是紀錄、初始化完成、接收到頻道文字訊息與偵測到這隻機器人的斜線指令。
  4. 執行 client.LoginAsync 與 client.StartAsync 完成機器人初始化。

LogAsync 我們直接使用官方範例,是個不錯的樣板。

using Discord;
using Discord.Commands;
using Discord.WebSocket;

var token = "YOUR BOT TOKEN";
var client = new DiscordSocketClient();

client.Log += LogAsync;
client.Ready += OnReady;
client.MessageReceived += OnReceiveMessage;
client.SlashCommandExecuted += OnReceiveSlashCommand;

await client.LoginAsync(TokenType.Bot, token);
await client.StartAsync();

Task LogAsync(LogMessage message)
{
    if (message.Exception is CommandException cmdException)
    {
        Console.WriteLine($"[Command/{message.Severity}] {cmdException.Command.Aliases.First()}"
            + $" failed to execute in {cmdException.Context.Channel}.");
        Console.WriteLine(cmdException);
    }
    else
        Console.WriteLine($"[General/{message.Severity}] {message}");

    return Task.CompletedTask;
}

async Task OnReady() { }
async Task OnReceiveMessage(SocketMessage msg) { }
async Task OnReceiveSlashCommand(SocketSlashCommand cmd) { }

按下 F5 建置專案後即可看到你的機器人已於 Discord 中上線。

常用功能寫法統整

以下語法皆是以上方的初始化連線範例為基礎。

列出機器人已加入的伺服器

foreach (var e in client.Guilds)
{
    var guild = client.GetGuild(e.Id);
    // TODO
}

取得指令發送者的資料

可用於 OnReceiveMessage 與 OnReceiveSlashCommand 中。

OnReceiveMessage:

var user = msg.Author as SocketGuildUser;

OnReceiveSlashCommand:

var user = cmd.User as SocketGuildUser;

取得指令發送者所在的語音頻道

var voiceChannel = user.VoiceChannel;

檢查機器人是否存在於指令發送者所在的語音頻道

var isExist = user.VoiceChannel.GetUser(client.CurrentUser.Id) == null;

回覆斜線指令訊息

每次的斜線指令執行後必須要回覆一次,否則 Discord 上會顯示錯誤。

await cmd.RespondAsync("TEXT HERE");

取得回覆的斜線指令訊息

var lastMsg = await cmd.GetOriginalResponseAsync();

刪除回覆的斜線指令訊息

var lastMsg = await cmd.GetOriginalResponseAsync();
lastMsg.DeleteAsync();

發送訊息至文字頻道

可用於 OnReceiveMessage 與 OnReceiveSlashCommand 中。

OnReceiveMessage:

await msg.Channel.SendMessageAsync("TEXT HERE");

OnReceiveSlashCommand:

await cmd.Channel.SendMessageAsync("TEXT HERE");

重啟機器人

重新啟動整支控制台應用程式。

System.Diagnostics.Process.Start(AppDomain.CurrentDomain.FriendlyName);
Environment.Exit(0);

運用 WebP Express 外掛打造支援 Next-Gen 圖檔格式的 WordPress 網站

現在網站中的所使用的圖片格式大多都採用 JPEG 與 PNG 兩種,而圖片檔案的載入速度一直都是網站優化的一道關卡。為了能同時兼顧圖片的檔案大小與解析度,Google 在 2010 年釋出了全新的 WebP 圖片檔案格式,內容完全相同的圖片在 WebP 與 PNG 的測試後最高能節省近 48% 檔案大小,轉換 JPEG 格式的話還能節省更多空間,且能使轉換後的圖檔維持著轉換前的水準。

然而當前版本的 WordPress 內建媒體櫃尚不支援 WebP 圖檔格式的上傳,所以我們要來借用「WebP Express」外掛之手來打造可相容 WebP 格式的環境。

如下圖,當使用 Google PageSpeed Insights 服務來檢測尚未支援 WebP 圖檔的網站時都會出現「提供 next-gen 格式的圖片」提示,修正這個問題即是本文的主軸。

確認瀏覽器支援程度

我們為了要來做 WebP 格式支援當然要先使用支援此格式的瀏覽器來操作,這邊我拿已被原廠拋棄的 IE 瀏覽器來做示範。當你將 WebP 格式的圖片位址直接輸入到網址列中,不支援 WebP 格式的瀏覽器會直接下載 WebP 檔案而不是顯示圖片。


外掛資訊



設定說明

接下來從 WordPress 控制台進入 WebP Express 設定頁面,開始進行設定調整:

一、Operation mode

因不同環境需設置不一樣值,Operation mode 可以幫我們隱藏無用途的欄位。例如網站有使用 CDN 時,將 Operation mode 設定為「CDN friendly」可隱藏數個不必要的欄位,並提示需啟用 Alter HTML。

名稱說明
Varied image responses預設值,自動在支援 WebP 的瀏覽器中重導原非 WebP 影像至 WebP 格式,無支援此格式的瀏覽器不影響。
CDN friendly必需啟用 Alter HTML,自動於原始碼中插入 <source> 標示 WebP 影像路徑,
No conversion僅用於 WebP 位址重導,不進行轉檔。如網站使用其他方法轉檔至 WebP 格式者可用此設置。
Tweaked顯示所有欄位。

二、General

名稱說明
ScopeWebP Express 作用範圍:
1. Uploads Only:僅已上傳的影像。
2. Themes Only:僅佈景主題。
3. Uploads and themes:僅已上傳的影像與佈景主題。
4. All content:wp-content 資料夾下的所有影像。
5. Everything:所有影像,包含 wp-admin 資料夾下的圖檔。
Image types to work on需轉檔的影像格式:
1. None:不轉檔。
2. Only Jpegs:僅轉換 JPEG。
3. Only pngs:僅轉換 PNG。
4. Both jpegs and pngs:轉換 JPEG 與 PNG。
Destination folder轉檔後的影像資料夾位置,僅 wp-content/uploads 資料夾下影像有效:
1. In separate folder:單獨資料夾,位置為 wp-content/webp-express/webp-images/doc-root/wp-content/uploads
2. Mingled:與原圖檔同一資料夾。
File extension副檔名格式,僅 Destination folder 為 Mingled 模式可用:
1. Append “.webp”:轉換後的影像名稱會變成 123.png.webp 或 123.jpeg.webp。
2. Set to “.webp”:直接設定為 123.webp。
Destination structure轉檔後影像資料夾結構:
1. Document root:建議值,所有轉檔後影像將會按照原結構移動至 wp-content/webp-express/webp-images/doc-root
2. Image roots:使用原影像的結構,例如 wp-content/uploads/123.jpg 會變成 wp-content/uploads/123.webp,但如果 Destination folder 設定為 In separate folder 則會改置於 wp-content/webp-express/webp-images
Cache-Control header快取標頭設定,一般會在伺服器上完成設定,故省略。
Prevent using webps larger than original防止轉檔後的檔案比原影像還大,如果網站以效能取向請啟用,如只是要提升 SEO 分數則取消。

三、Redirection rules

名稱說明
Enable redirection to converter?是否一律重導影像檔至轉換器,如已存在 WebP 版本與瀏覽器支援時回傳轉檔後圖檔,否則回傳原圖檔。
Do not pass source in Query String是否要忽略查詢字串,查詢字串為網址中 ? 後的所有文字。
Enable direct redirection to existing converted images?如已存在轉檔後影像,是否要直接重導至目標圖檔。
Create webp files upon request?是否要於請求時進行 WebP 轉檔,如已存在轉檔後圖檔時會直接回傳圖檔,否則回傳 404 錯誤並執行轉檔,待轉檔完成後即可正常運行。

四、Conversion

名稱說明
Jpeg optionsJPEG 圖檔壓縮方式、品質。
PNG optionsPNG 圖檔壓縮方式、品質。
Metadata元資料處理方式:
1. No metadata in webp:於 WebP 中移除所有元資料。
2. Copy all metadata to webp:保留所有元資料,多用於攝影作品,可記錄光圈、焦距等資料。
Conversion method是否要於請求時進行 WebP 轉檔,如已存在轉檔後圖檔時會直接回傳圖檔,否則回傳 404 錯誤並執行轉檔,待轉檔完成後即可正常運行。
Convert on upload是否要於上傳圖片時進行轉檔,啟用後會拖慢上傳的時間。
Enable logging是否啟用記錄檔。
Bulk convert批次轉檔。

五、Serve options

名稱說明
Response on failure失敗時回傳內容:
1. Original image:原圖檔。
2. 404:Error Not Found 錯誤。
3. Error report:錯誤報告
Response on success成功時回傳內容:
1. Original image:原圖檔。
2. Converted image:轉檔後影像。

六、Alter HTML

名稱說明
Replace tags with tags, adding the webp to srcset.預設值,以 <picture> 取代原圖程式碼,將 WebP 版本圖檔嵌入,由瀏覽器決定顯示何種圖片。
Replace image URLs直接取代圖檔位址,如網站有快取機制時可能不可用。

參考設定

上線測試

新增一篇文章並上傳一張圖片,並開啟瀏覽器開發人員介面檢視圖片程式碼,可發現已有 <source> 標籤位於 <img> 上方,內容中也有轉檔後的 WebP 影像位址。

參考資料

Minecraft 1.18 版本光影著色器資源列表

前置作業

在開始使用光影著色器前,需先完成 OptiFine 模組安裝。使用官方啟動器的玩家,直接前往 OptiFine Downloads 網頁下載對應遊戲版本的 JAR 檔後直接執行,按下「Install」並等待安裝完成後即可於官方啟動器中開始遊戲。

如使用非官方啟動器 (如 MultiMC) 或自訂義模組載入器的玩家,請參考以下文章完成 OptiFine 的安裝作業:


光影列表

名稱預覽畫面下載連結備註
AstraLexAstraLex Shaders (BSL Shaders Edit) – YouTubeCurseForge
Tea ShadersVanilla vs Tea Shaders | Shader Comparison – YouTubeCurseForge草木動畫、原版光影改進
BSLBITSLABLAB – BSL ShadersCurseForge
ComplementaryMinecraft With Complementary Shaders v4 – YouTubeCurseForge
DrDestensDrDestens MinecraftShaders 1.0 Release – YouTubeCurseForge
EpochWoMspace/Epoch-Shader: noun: epoch; a particular period of time in history or a person’s life. (github.com)GitHub濾鏡
MakeUpMakeUp – Ultra Fast | 5.x Official Showcase | Low end Minecraft shaders – YouTubeCurseForge
NostalgiaBest Custom Settings For Nostalgia Shaders! – YouTubeCurseForge有漏光問題
Sildur’s VibrantScreenshots | Sildurs Shaders (sildurs-shaders.github.io)CurseForge
StracciatellaStracciatella Shaders Release Trailer – YouTubeCurseForge原版光影改進
Super Duper VanillaSuper Duper Vanilla Shader Release v1.2.0 | Trailer – YouTubeCurseForge暗處超暗

安裝光影

在已安裝 OptiFine 的遊戲中按下 ESC,進入「選項 > 顯示設定 > 光影」後,點擊「光影資料夾」即可開啟 %appdata%/.minecraft/shaderpacks 資料夾。在取得光影著色器壓縮檔後,移動目標檔案至此資料夾後即可於此畫面中套用光影。

參考資料

[PNGTuber] 免插件為 OBS 直播加入 Discord 語音狀態圖片切換效果

如果你有看過 VTuber 的直播,會發現他們有時候不會開 Live2D,而是用兩張圖交替顯示的方式來表示語音的有無狀態。且與其他直播主連動時,會在畫面上加入對方的圖片,且一樣有語音狀態切換的效果。

目前已知直播主連動時是使用 Discord,為簡單達到效果,我們可以使用國外工程師製作的服務「Discord Reactive Images」。


平台資訊


Discord Reactive Images 能達成的效果類似以下片段:

設定步驟

一、前往 Discord Reactive Images (fugi.tech) 網站,點擊右上或下方的「Login」。

二、登入 Discord 後,點擊「授權」使平台可偵測帳號的語音狀態。

三、接下來平台預設會自動帶入你的 Discord 頭貼,你可以自訂非活躍 (Inactive) 與說話中 (Speaking) 兩狀態的圖片,僅支援靜態圖片,如上傳 GIF 會被轉成靜態圖。可勾選 Config 區塊中的「Bounce Effect」使狀態切換時會有個跳動效果。
在這邊如果有出現「Disconnected from Discord. Ensure Discord is running and try refreshing.」警告,請確保你的 Discord 客戶端有在正常運作,且已加入任一語音頻道。

四、最後複製 Links 區塊中的「Individual Browser Source (You)」提供的網址,準備進入 OBS 進行設定。如果要進行連動,請對方將此連結傳給你後,重複進行後續步驟即可。

五、啟動 OBS,在「來源」中新增一個「瀏覽器」。

六、將剛才複製的網址貼上至「網址」欄位,按下「確定」。

七、調整大小與位置,須先加入任一 Discord 語音頻道後才會顯示大頭照。

八、實測效果:

Pixelmon 創世神版寶可夢模組包安裝教學 (CurseForge / MultiMC / 手動安裝)

目前 Pixelmon 於 CurseForge 的排名僅次於 RLCraft,是目前在 Minecraft 中還原度最高的精靈寶可夢模組包。最近看到朋友都在玩這包就打算也來嘗試看看,順便整理出這個模組包的三種安裝方法。

一般玩家通常會用 CurseForge 客戶端 (Beta 版本) 或 MultiMC 啟動器來快速安裝,進階或習慣自行管理模組包的玩家有可能會選擇最後一種的全手動安裝,操作習慣因人而異。


模組包資訊


使用 CurseForge 客戶端安裝

一、啟動 CurseForge 客戶端,找到 The Pixelmon Modpack 後點擊「Install」。CurseForge 的安裝步驟可參考 使用 CurseForge 客戶端下載 Minecraft 模組包,更簡單快速的遊戲安裝

二、等待他下載完成後點擊「Play」就可以開始遊戲。

使用 MultiMC 啟動器安裝

一、開啟 MultiMC 啟動器,點擊「新增實例」。

二、切換到 CurseForge 分頁,找到 The Pixelmon Modpack,並且確認右下角的選擇版本內容是否正確,這裡有時候會有 BUG,點擊其他模組包再點回來即可解決。確認沒問題後按下「OK」。

三、等待模組包下載完成後,雙點擊 The Pixelmon Modpack 實例就可以啟動遊戲。

全手動安裝

一、先從 Pixelmon – Mods – Minecraft – CurseForge 下載模組包的組態檔,但他只有啟動 CurseForge 客戶端的 Install 按鈕。我們需要先切換到 Files 分頁,再點擊當前版本的模組包標題進入詳細資訊頁面。

二、進入詳細資訊頁面後點擊「Download」下載組態檔。

三、組態檔是一個 ZIP 壓縮檔,解壓縮後分別用任一文字編輯器與瀏覽器開啟裡面的 manifest.json 與 modlist.html。

四、從 manifest.json 中可取得 Pixelmon 所使用的 Forge 版本,請前往 Downloads for Minecraft Forge for Minecraft 1.12.2 下載對應版本後安裝。

五、modlist.html 網頁中列出了你需要自己下載的模組,下載時要注意所有模組的 Minecraft 版本號都要相同 (1.12.2),且有些模組本身的版本也會影響遊戲 (可能會遊戲異常或無法啟動遊戲)。這邊的偵錯會比較麻煩,出錯時要會看 Log。簡單點則可以先用 MultiMC 安裝好模組包後直接複製他的模組檔。

六、最後將所有下載的模組檔移動到 .minecraft/mods 資料夾中 (如果沒有 mods 就自己新建一個)。

七、將組態檔內 overrides 資料夾下的所有內容解壓縮到 .minecraft 中。

八、最後打開 Minecraft 官方啟動器,點擊「開始遊戲」後即可遊玩。

解決 Dissonance 於 Quest 2 平台麥克風無作動問題

Dissonance (全名:Dissonance Voice Chat) 是一個運作於 Unity Engine 的線上多人語音系統插件,他本身沒有多人連線功能,而是依附於常見的 UNET、Photon、Mirror、Steamworks.NET 或最新的 Netcode 多人連線架構,讓多人遊戲可同時擁有語音聊天功能。這支插件原價 75 美金,如非急需的話可在特殊節日或黑五等特價日以 35 美元或更低的價格購入。


插件資訊


Dissonance 配置完成後,在 PC 端啟動後可以直接運作,但在 Quest 2 上卻沒有任何反應 (可聽不可說),因為 Quest 2 的作業系統是 Android。現在的 Android 為保障安全性,對於「權限」的使用鎖得很緊,何況是能作為監聽使用的麥克風。

照理說 Unity Engine 應該要在編譯時偵測到 Dissonance 有使用到麥克風時,自動在 APK 中加入麥克風權限的需求。但目前的狀況是,在用 Quest 2 啟動程式時,並不會有任何的權限同意視窗供你選擇,導致此硬體不會有任何作動。

為解決此問題,我們就需要在遊戲啟動時 (可放在 Splash 或登入場景) 讓他執行一個腳本來請求權限,可使用 Unity Engine 的 Application.HasUserAuthorization 與 Application.RequestUserAuthorization 來實作。

using System.Collections;
using System.Linq;
using UnityEngine;

public class DissonanceMicrophoneChecker : MonoBehaviour
{
    private IEnumerator Start()
    {
        // 檢查是否有麥克風權限,否則提出權限請求
        if (!Application.HasUserAuthorization(UserAuthorization.Microphone))
        {
            yield return Application.RequestUserAuthorization(UserAuthorization.Microphone);
        }

        // 再次檢查,如仍然無權限則將遊戲關閉
        if (Application.HasUserAuthorization(UserAuthorization.Microphone))
        {
            Debug.Log("Device: " + Microphone.devices.Select(x => x.ToString()));
        }
        else
        {
            Application.Quit();
        }
    }
}

把這支腳本掛在遊戲啟動後的第一個場景中,在執行程式時就可以看到允許權限的視窗,點選允許後 Dissonance 的語音系統將能正常作動。

《魔物獵人:崛起》切換 PS4 搖桿遊戲按鈕圖示設定

《魔物獵人:崛起》預設為 XBOX 的手把按鈕顯示,如果想要用 PS4 搖桿則需要事先進行設定:

設定步驟

一、使用藍牙或 Micro USB 將搖桿連接至電腦。

二、開啟 Steam,進入「檢視 > 設定」。

三、切換至「控制器」分頁,點擊「一般控制器設定」。

四、勾選「PlayStation 配置支援」,順便確認下方「偵測到的控制器」中是否有你的 PS4 搖桿,如果沒有出現的話可嘗試重新連接搖桿已解決。

五、開啟《魔物獵人:崛起》,進入遊戲世界 (不能在主畫面),開啟「選項」。

六、選擇「遊戲設定」,並將「手把專用按鍵圖示設定」改成「類型 3」。

七、完成。

New Google Tab 將 Edge 的新分頁改成 Google 首頁

以我個人為例,無論是課業還是工作,只要啟動瀏覽器,Google 是一定會開的服務。在前陣子因為耗電問題從 Chrome 轉換至 Edge 後,Edge 的新分頁只能使用 Microsoft Bing 搜尋引擎,且不能使用熟悉的 Google 選單,非常的不適應。

目前的解決辦法就是透過這次介紹的「New Google Tab」擴充功能,來強制將 Edge 預設的新分頁修改成 Google。

圖 1. 我需要這個酷選單
圖 2. 預設的分頁真的不夠用

軟體資訊


安裝步驟

一、使用 Edge 瀏覽器前往 Microsoft Edge 外掛程式 網頁,點擊「取得」開始安裝。

二、點擊「新增擴充功能」。

三、前往 edge://extensions 並將 New Google Tab 的開關打開。

四、最後開個新分頁試試,如果 Edge 有跳出「這是您想要的新分頁嗎?」請點擊「保留變更」。

五、完成。

使用遠端桌面於 Windows Server 2019 安裝 Edge 瀏覽器

現在所以人都可以免費下載到 Windows Server 各版本的 180 天評估版,供開發者或個人使用。非常適合來模擬 .NET 伺服器的生產環境,或架設個人使用的小伺服器、Minecraft 伺服器。

而因為這個作業系統是伺服器專用,網頁瀏覽器只有內裝一個老 IE,且安全性鎖得很嚴,很難用。所以我們要來給他另外安裝一個瀏覽器,在這篇文章內我以新版 Edge 作為範例。

我的作法是透過 Windows 內建的「遠端桌面連線」來實行,先在自己的電腦下載好 Edge 安裝檔後,再透過複製的方式將檔案傳輸至伺服器,讓伺服器可以不用開 IE 就能進行安裝。

下載適用於 Windows Server 的 Edge

前往 Microsoft Edge 官網,點擊網頁中的「使用 Windows Server?請在這裡下載 Microsoft Edge」來取得伺服器用得安裝檔。

選擇語言與接受 Microsoft 軟體授權條款,即可開始下載檔案。

複製 MicrosoftEdgeSetup.exe 至伺服器

選中剛才取得的安裝檔,按下 Ctrl + C 或右鍵選單進行複製。

使用 Windows 內建的遠端桌面連線程式連線至伺服器,於桌面右鍵選單進行貼上,安裝檔即可順利傳輸過去。

安裝 Edge 瀏覽器

滑鼠雙點擊啟動 MicrosoftEdgeSetup.exe,等待數分鐘後即可開始使用 Edge 瀏覽器。

Exit mobile version