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, 否則會在關閉程式時才會把資料傳給後台

2022年9月8日 星期四

[雜記]搬Discord bot到Azure上

 原本是把Discord bot放到Replit上跑, 不過最近常遇到Replit上還在跑但bot已經下線的情況, 即使重新執行了、也沒報錯, bot還是沒有上線的奇怪情況


經過友人的指點, 才知道這是類似429 too many requests的問題, 是由於共享ip被用太多而造成的, 只能透過kill 1之後重新執行來換ip解決

後來實在太頻繁發生了, 於是就有了把bot搬到其它雲端的想法, 後來就決定試試搬到Azure
不過畢竟對server不熟, 花了好多時間採坑才弄好, 特此紀錄

2022年8月25日 星期四

[Discord]機器人的的login與接收訊息/反應(discord.js:14.3)

 最近又開始寫起Discord機器人, 用的discord.js是14.3的版本, 跟上次寫的時候用的12.3版有一些差異, 於此記錄一下


Login

12.3的login:
const { Client } = require('discord.js'); const client = new Client({ partials: [/*需要的partial字串, ex:'CHANNEL'*/] }); client.login(/*機器人的token*/);

14.3的login:
const { Client, GatewayIntentBits, Partials } = require('discord.js'); const client = new Client({ intents: [/*需要的GatewayIntentBits列舉, ex:GatewayIntentBits.Guilds*/], partials: [/*需要的Partials列舉, ex: Partials.Channel*/] }); client.login(/*機器人的token*/);