2026年1月4日 星期日

按鈕的加減法

 在Discord的應用開發中,原生UI的排版限制非常嚴苛,像一行Action Row最多只能放5個按鈕


這可苦了我


在《鍊金術師與瓶中獸》的主控介面裡,第三行是寵物相關的按鈕,完整的應該是


[進化][緊急救治][餵食][交換][瓶中獸煉成][歸原]

不光是塞不下的問題,即使塞的下,一排看來也是又臭又長


如果換行的話,又會斷開行跟按鈕類型的關聯,而且Discord規定最多5行,實在不好放開說換就換


因此這裡就得花點心思:

1. 把平常不會用到的按鈕藏起來

2. 確保同行按鈕數不會超過5


在歸納後,把[進化][緊急救治][交換][歸原]這些使用條件較高且使用頻率較低的按鈕設為條件顯示


因此最初能看到的按鈕只有:


[餵食][瓶中獸煉成]


但最多的按鈕有6個,因此需要設計互斥按鈕


所以就有了"寵物瀕死時不能進化"的規則,使[進化]跟[緊急救治]只能同時出現一個,以達到確保最多5個按鈕的目的,敘事上也說得過去



以上,就是《鍊金術師與瓶中獸》的按鈕設計心路歷程


如果以後有更多的功能,可能就要放在二階頁面裡了吧,當然我是希望盡量避免太多層的操作就是了


2025年12月26日 星期五

AI主理開發,又如何?

 《鍊金術師與瓶中獸》是我第一款AI主理開發的作品

這裡的"AI主理"是指:由AI負責發想內容、調數值、生成程式碼、產出圖片等牛馬工作

而我則負責出腳、眼睛跟手,也就是決定方向、審查與調修

這個案子不大、也不難做,但要說一句話AI就咻咻咻幫你搞定到這種程度,是不可能的


我的主要背景是程式,就講講這部分吧

本案的程式碼99.9%都是AI生的,但不是AI搞定的

什麼意思?

AI確實能照我要求生出程式碼,絕大部分也確實能運行

但其實在走的過程裡它動不動就給你暴力解、時不時就起乩神理解

而且你必須規劃階段,畢竟有些東西要先出來後面的東西才能實現

還有許多效能或架構上的問題,後續發現了才叫它改進


有人可能會說阿你跑SDD啊,用AGENT、工作流、Skills、巴拉巴拉啊

孩子,你不會真的覺得我都沒用吧?不會真的覺得用了就不會有問題吧?

天真!太天真了!

確實,比起單純的下提示詞,加上這些能讓AI更聽話有效

但實際上跑起來抽的風還是不會少

你若沒能力去糾錯、修正,嘖嘖,我是不太敢想會變怎樣

可能以後會越來越好吧,但現在跑起來就是很多雞毛


所以我很好奇,讓沒有程式背景/概念的人來跑這些會怎樣

真的能像網上說的那樣,人人都能出產品嗎?

MVP我想問題不大,但完整的VP呢?後續的維護、疊代呢?



看起來我對AI意見很多,但我必須承認我能接受這些毛病,比接受前妻還能接受

喔對我沒有前妻


回歸正題,上面提的毛病,今天換成人類隊友也是有可能發生,甚至自己也有可能犯

但不同的是AI它快、太快了!

我平均3小時才能出來,AI往往不到3分鐘就出來了

(我說的是正經的產出內容,不要亂想)

再說它不會跟你鬧脾氣耍心眼、不會管你是藍是綠、不會看你是黑是白

甚至你真要這種設定它也可以!

如此,有那麼點毛病好像也不是不能接受


順帶一提我跑這案子開始沒多久就遇上Gemini 3 Flash發布, 之後就一直用,到出版本當天額度剛好用光(當天真的一堆破事,該死的出版詛咒!)

所以其實用挺兇的,雖然也有一部分是我太懶的關係


在美術/企劃方面也是一樣,它能幫我產出不錯的模樣,但我還是得花心力修整

我這兩邊比較不專業,但我想兩方專業人員在用AI協助創作時也是這樣吧

終究還是要靠創作者本人


所以我實在不理解「使用AI而被取消獎項」、「AI就是盜竊」之類的現象跟言論是怎樣

有問題到底是AI,還是人?


好啦,抒發差不多了

最後我必須承認你現在看到的文章是AI

一個字都沒有產生,由我一個字一個字打的,你看我還不小心斷錯行了呢

你信嗎?

信又如何?不信又如何?

是不是AI,又如何?

2025年7月17日 星期四

Unity串廣告 - Unity實作篇

 一段時間沒在Unity串廣告, Unity又升級做法了

寫這篇時是2025年7月,這時新版的做法是用LevelPlay與Ads Mediation

新版可以選擇的廣告商變得更多了, 但是設定也更複雜了


在開始之前提一下,以前的Unity Ads還是可以使用,不過官方不再更新支援,想用可以參考:https://www.goostudio.tw/post/介接unity-ads


接下來就是在Unity專案裡實做廣告串接:

連接Unity Cloud

Unity專案需要連接Unity Cloud才能運行Ads Mediation,連接設定可以參考:https://goocoding.blogspot.com/2025/07/unity-cloud.html

安裝Ads Mediation

在PackageManager中的Unity Registry可以找到Ads Mediation安裝

本篇的版本用的是8.10.0

實作初始化LevelPlay

創建一個腳本運行LevelPlay的初始化,程式碼範例如下圖:

要注意的是,UnityServices初始化完成後才能進行LevelPlay的初始化

還有LevelPlay.Init需要的appKey可以從LevelPlay的後台->Apps( https://platform.ironsrc.com/partners/home )找到

如果後台沒有的話,可以參考此篇設定:https://goocoding.blogspot.com/2025/07/unity-levelplay.html

實作廣告呼叫

接著實作廣告的讀取與呼叫

本範例的腳本是綁在(UGUI的)Button物件上,點擊時呼叫ShowAd()

如果你沒有Button物件的話,我建議你有

程式碼範例如下圖:

其中new LevelPlayRewardedAd時要用到的adUnitId可以從LevelPlay的後台->Setup->Ad units

( https://platform.ironsrc.com/partners/next/adUnits/ )找到

後台的ad unit設定可以參考此篇: https://goocoding.blogspot.com/2025/07/unity-levelplay.html

在這個範例中,你可以利用AdsCompleteEvent來呼叫廣告播放完成後的遊戲邏輯(ex: 復活、給次數、etc...)

2025年7月16日 星期三

Unity串廣告 - LevelPlay設定篇

 一段時間沒在Unity串廣告, Unity又升級做法了

寫這篇時是2025年7月,這時新版的做法是用LevelPlay與Ads Mediation

新版可以選擇的廣告商變得更多了, 但是設定也更複雜了

在開始之前提一下,以前的Unity Ads還是可以使用,不過官方不再更新支援,想用可以參考:https://www.goostudio.tw/post/介接unity-ads

那麼接下來是正式的串接內容:

LevelPlay設定

LevelPlay 是 Unity 與 ironSource 合作推出的 廣告變現與媒合平台,也是新板作法所用的平台

用Unity帳號登入:https://platform.supersonic.com/partners

新增App

由Apps -> Add app新增你的App

頁面選項如圖:

2025年7月13日 星期日

使專案連接Unity Cloud

 Unity Cloud 是 Unity 推出的雲端平台服務總稱,整合了開發、測試、部署、營運與協作等功能

一般來說在創建Unity專案時預設是開啟的



如果你沒開但在事後想使專案連接Unity Cloud,那有兩種方法:

1.使用Unity Hub

在Unity Hub中,點選專案的雲端圖標或按右鍵,皆可設定連接Unity Cloud


2.在Editor中設定

點選 Editor-> Project Setting->Servies,即可選擇連結已有的cloud專案或(以此專案)創建新的cloud專案



2023年7月5日 星期三

介接Unity Ads

在行動平台中, 放廣告是一種常見的收益方式

而用Unity開發時除了使用一些插件來植入廣告外, 其官方本身也有提供廣告插放的服務

本篇將介紹如何介接Unity Ads, 並實作一個獎勵式廣告作為範例


另外本篇是使用Unity 2023.3版本為範例, 不過這個功能很早之前就有了, 相信早幾個版本的也是大同小異


1.啟用Server與創建Unity Project

要使用Unity Ads, 首先必須啟用Unity Gaminig Services


打開你的Unity專案, 在Project Setting中選擇Services

選好組織機構(Organizations)後, 即可點選Create project ID, 在Unity Gaminig Services中就會創建一個跟你專案目錄一樣名稱的專案並與本地專案檔聯繫起來


2.取得Game ID

Game ID是產品在各平台中對應的ID, 要有這個才能初始化Unity Ads


開啟 https://dashboard.unity3d.com/  , 選擇Monetization後選擇要設定的專案

點選Get Started後會開啟設定視窗, 第一頁是選擇你的中介方案與廣告商

第二頁是選擇廣告設定, 有關用設定的可以沿用先前專案的設定, 本篇是用新的開始

第三頁是選擇投放策略, 選你喜歡的就好

第四頁是設定設定產品在平台中的商店ID

還沒上架時可以先選"My app is not live in an app store yet", 不過上架完要記得回來補齊喔

接下來按下Add project就可以取得Game ID了

於此後台就設定的差不多了, 回到Unity Editor繼續作業


3.導入Advertisement

Advertisement就是Unity Ads的SDK, 支援Android跟iOS平台

開啟 Window > Package Manager, 搜尋Advertisement並安裝(Install)



4.初始化

Runtime時要先初始化Unity Ads才能運作

創建設定Game Id與初始化的腳本AdsInitializer



5.實作獎勵式廣告

所謂的獎勵式廣告就是使用者在觀看完廣告後能夠獲得一些獎勵


本篇將實作一個獎勵式廣告按鈕腳本(示範平台為Android), 其正常流程為:

讀取廣告->使用者按下廣告按鈕->顯示廣告->廣告播放完成->使用者獲得獎勵


創建廣告按鈕腳本RewardedAdsButton


在場景上建立一個UGUI的按鈕, 先關掉該按鈕物件


將AdsInitializer掛在Main Camera上, 設定Game Id與InitializationCompleteEvent(把按鈕開啟)

P.S. 在產品上線時記得把Test Mode勾掉

將RewardedAdsButton掛在Button上, AdsCompleteEvent就是設定廣告播完後你要做的事


以上, 順利的話在run time按下廣告按鈕後會看到:


參考資料: https://docs.unity.com/ads/manual/UnityAdsHome 

2023年4月28日 星期五

利用Steam統計來實作Steam成就

Steamworks有提供統計功能, 讓開發者可以便捷的將玩家遊玩的數據紀錄下來(ex: 破關次數、通關時間, etc...)

此功能同時也能連動於Steam成就, 也就是可以實現"當玩家的某個統計數據達到某個值後, 解鎖某個成就"

應用此機制, 開發者可以於程式中只實作統計紀錄, 將資料儲存、成就達成判斷、和成就解鎖這些事交給後台

下面將說明如何實作:

後台設置

本篇假設開發者已於Steamworks建立應用程式
1. 從Steamworks的主控台選擇要設置的應用程式, 進入其 技術工具->編輯Steamworks設定 頁面
2. 進入 統計與成就->統計 頁面, 新增統計欄位, 設置API名稱等資料
3. 進入 統計與成就->成就 頁面, 新增成就欄位, 設置API名稱等資料
4. 於成就欄位中的 進度數據 一欄選擇要參考的統計API
5. 將解所成就的條件值設定於最高欄位, 當參考的統計API數值達到其以上時, 即解鎖成就
(比如你希望玩家的T1_COUNT達到10以上實獲得成就, 就設定10)
(筆者一開始搞錯設定在最小值, 最高沒設定, 結果就造成了悲劇)

6. 發佈變更使設定生效

程式實作

本篇是於Unity中使用Steamworks.NET來實作, Steamworks.NET的導入與初始化不於本篇贅敘, 直接進入API使用環節
1. 使用SteamUserStats.SetStat, 設定值於指定的統計API
2. 如希望在玩家能即時得到成就解鎖, 設定完Stat後要呼叫SteamUserStats.StoreStats, 否則會在關閉程式時才會把資料傳給後台