Với trình bao bọc này, bạn có thể truy cập vào SDK Chơi game trên YouTube trong Unity C#. Trình bao bọc này có một trình bổ trợ .jslib và một tệp C# để giúp bạn phát triển nhanh hơn. Ngoài ra còn có một dự án mẫu cho biết cách bạn có thể sử dụng các tệp này trong dự án của mình.
Bạn có thể tải Gói Unity xuống từ kho lưu trữ mẫu Playables sample repo.
Cách sử dụng
- Xác minh rằng Nền tảng dự án Unity được đặt thành
WebGL. Bạn có thể tìm thấy chế độ cài đặt này trongBuild Settings(Cài đặt bản dựng). - Bạn có thể sử dụng
WebGLTemplateđể tạo trò chơi cho web hoặc làm theo phần Sử dụng tệp index.html của riêng bạn và xác minh rằng bạn đã thiết lập và khởi chạy SDK web trong tệpindex.htmlcủa mình.WebGLTemplatecó thể được tìm thấy trong góiGoogle-WebGLTemplate-only.unitypackagehoặcGoogleYTGameWrapper-with-sample.unitypackage. Để thiết lập và sử dụng mẫu này, hãy làm theo các bước trong phần Mẫu WebGL.- Để sử dụng tệp Web và
index.htmlcủa riêng bạn, bạn cần thêm hai dòng vào tập lệnh tạo Unityindex.html. Hãy xem phần Sử dụng tệp index.html của riêng bạn để biết cách tích hợp.
- Mở dự án trong Unity, sau đó mở và nhập một trong hai gói vào dự án của bạn.
GoogleYTGameWrapper.unitypackage: Chứa Trình bổ trợ JS để kết nối Chơi game trên YouTube SDK và trình bao bọc C# để giúp kết nối trình bổ trợ này với sản phẩm của bạn.GoogleYTGameWrapper-with-sample.unitypackage: Chứa nội dung tệp giống như trong gói GoogleYTGameWrapper và một mẫu cho biết cách sử dụng SDK Chơi game trên YouTube trong C#.
- QUAN TRỌNG: Trong cảnh chính, hãy tạo một gameobject mới và đặt tên là
YTGameWrapper. Đối tượng trò chơi này được dùng để giao tiếp với cầu nối JS. - QUAN TRỌNG: Thêm mã đã nhập
YTGameWrapper.cslàm thành phần tập lệnh vào GameObjectYTGameWrapper. Nếu dự án của bạn có nhiều cảnh, hãy nhớ thêm
DontDestroyOnLoadvào tập lệnhYTGameWrapper.cs(lưu ý: các phiên bản mới của tập lệnh có nút chuyểnDontDestroyOnSceneChangeđược bật theo mặc định). Điều này sẽ đảm bảo tập lệnh và GameObject vẫn tồn tại trong suốt trò chơi.GameObject.DontDestroyOnLoad(this.gameObject);Thành phần
YTGameWrapper.csvà GameObjectYTGameWrapperđược dùng để kết nối với SDK Chơi game trên YouTube. Hãy sử dụng các thành phần này để kết nối với YouTube. Bạn có thể sử dụng Tập lệnh để tìm đối tượng và thành phần hoặc thêm các thành phần này vào mã trò chơi theo cách thủ công thông qua Trình chỉnh sửa Unity.Xác minh rằng bạn đang tuân thủ các yêu cầu kỹ thuật đối với dự án của mình.
Sử dụng tệp index.html của riêng bạn
Nếu không sử dụng ví dụ index.html được cung cấp, bạn cần thêm 2 dòng mã vào tập lệnh tạo Unity index.html.
Trước tiên, hãy thêm dòng này vào cùng một vị trí mà dự án của bạn thiết lập các biến cho vùng chứa Unity, canvas, v.v.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
Thứ hai, bên trong hàm createUnityInstance, hãy thêm dòng này.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Ví dụ
Phần này có một số ví dụ về cách sử dụng trình bao bọc C#. Đây không phải là danh sách đầy đủ các API hiện có. Để xem danh sách đầy đủ các API hiện có, hãy tham khảo YouTube Playables SDK.
sendScore
Ví dụ này cho thấy cách triển khai sendScore(int points) trong C#:
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
public int battleScore = 0;
...
// Update the total score and send this to the YouTube Game Wrapper.
public void UpdateScores(int scoreAmt)
{
battleScore += scoreAmt;
// ytGameWrapper should be a reference to your YTGameWrapper component.
ytGameWrapper.SendGameScore(battleScore);
}
onPause
Đây là ví dụ về cách một trò chơi có thể nghe các sự kiện Pause đến từ YT Playables để tạm dừng công cụ của trò chơi khi cần:
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
public bool gameIsPaused = false;
...
void Start()
{
// Sets the OnPause callback with the YT Playables SDK
ytGameWrapper.SetOnPauseCallback(PauseTheGameCallback);
}
// Pause game callback, will pause the game when called.
public void PauseTheGameCallback()
{
gameIsPaused = true;
}
saveData
Đây là ví dụ về cách sử dụng saveData, gửi dữ liệu đó đến YT Playables SDK:
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
...
// Saves the current score of the game and converts it to a JSON format.
public void SaveScore(int scoreAmt)
{
SaveGameData("{\"BestScore\": \"" + scoreAmt.ToString() + "\"}");
}
public void SaveGameData(string saveString)
{
if (string.IsNullOrEmpty(saveString)) return;
// Sends save data to the YT Playables SDK
ytGameWrapper.SendGameSaveData(saveString);
}
loadData
Đây là ví dụ về cách sử dụng loadData, gửi dữ liệu đó đến YT Playables SDK:
...
using UnityEngine;
using YTGameSDK;
...
[Serializable]
public class LoadedScores
{
public int BestScore;
public float BestTime;
}
public YTGameWrapper ytGameWrapper;
...
void Start()
{
ytGameWrapper.LoadGameSaveData(LoadSaveGameDataReturned);
}
public void LoadSaveGameDataReturned(string data)
{
if (!string.IsNullOrEmpty(data))
{
LoadedScores loadedScores = JsonUtility.FromJson<LoadedScores>(data);
Debug.Log("LoadSaveGameDataReturned > Score <" + loadedScores.BestScore.ToString()
+ "> Time <" + loadedScores.BestTime.ToString("0.00"));
}
}
requestInterstitialAd
Đây là ví dụ về cách sử dụng requestInterstitialAd, cho biết đây là thời điểm thích hợp để hiển thị Quảng cáo xen kẽ (nếu có). Để có kết quả tốt nhất, hãy thực hiện lệnh gọi này trong thời gian nghỉ giữa trò chơi, chẳng hạn như ở cuối một cấp độ.
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
...
// At the end of a round send a request to show an interstitial Ad, if one is
// available an Ad will be shown and Pause Game Callback should be called.
// EXAMPLE: send and forget
public void RequestInterstitialAd()
{
ytGameWrapper.RequestInterstitialAd();
}
// EXAMPLE: send and react to if an Ad was shown
public void RequestInterstitialAd()
{
int status = ytGameWrapper.RequestInterstitialAd();
if (status == 0)
{
// Ad request was successful, do some action.
}
}
requestRewardedAd
Đây là ví dụ về cách sử dụng requestRewardedAd. Lệnh này được dùng khi người dùng chọn xem Quảng cáo có tặng thưởng để đổi lấy phần thưởng trong trò chơi của bạn. Nếu có quảng cáo, người dùng sẽ thấy quảng cáo đó.
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
...
public void RequestRewardedAd()
{
// Register callback for Rewarded Ads. If an Ad is available one will be
// shown. Pause Game Callback should be called. Any ID is fine as long as
// its identifyable for your game.
ytGameWrapper.RequestRewardedAd("my-reward-ad-id-123", (rewardEarned) => {
if (rewardEarned) {
// Rewarded Ad is earned, reward the user.
} else {
// Rewarded Ad not earned, take the appropriate action
}
});
}
Cách sử dụng Mẫu WebGL mẫu của YouTube
Trừ phi bạn có một dự án Unity rất nặng, các tệp .wasm và .data đã tạo của bạn
phải nằm trong giới hạn kích thước tệp riêng lẻ của chúng tôi. Nếu đúng như vậy, bạn không cần nén thêm các tệp này vì chúng sẽ tự động được nén khi bạn gửi tệp Playable.
Quá trình nén tự động này cũng sẽ xác minh rằng tệp .wasm của bạn phù hợp với yêu cầu về kích thước gói ban đầu.
Ví dụ: tệp .wasm có kích thước ~25 MiB sẽ nén thành ~7 MiB.
Nếu vì lý do nào đó mà các tệp của bạn vượt quá giới hạn kích thước tệp riêng lẻ tối đa, thì tốt nhất là bạn nên sử dụng tính năng nén ZIP để xác minh rằng các tệp đó phù hợp với giới hạn này. Tính năng nén Playable sẽ không nén lại các tệp này.
Mẫu WebGL
- Làm theo hướng dẫn về gói Unity ở trên để thiết lập ban đầu.
Hãy nhớ sử dụng
Google-WebGLTemplate-only.unitypackagehoặcGoogleYTGameWrapper-with-sample.unitypackagevà nhập tất cả các tệp trong thư mụcWebGLTemplates/YTGameWrapperTemplate/.- Lưu ý: nếu bạn chưa nhập
YTGameWrapper.csvàUnityYTGameSDKLib.jslib, bạn cũng nên nhập các tệp đó.
- Lưu ý: nếu bạn chưa nhập
- Đặt Mẫu WebGL để sử dụng
YTGameWrapperTemplate. Bạn có thể tìm thấy chế độ cài đặt này trongEdit(Chỉnh sửa) ->Project settings(Cài đặt dự án) ->Player(Trình phát) -> thẻWebGL-> phầnResolution and Presentation(Độ phân giải và bản trình bày).- Lưu ý: Chiều rộng và chiều cao của Canvas mặc định được đặt thành 100% trong mẫu, vì vậy, các chế độ cài đặt Unity này sẽ không điều chỉnh bất kỳ thông tin nào.
- Đảm bảo rằng
Compression Format(Định dạng nén) được đặt thành Tắt. Bạn có thể tìm thấy chế độ cài đặt này trongProject settings(Cài đặt dự án) ->Player(Trình phát) -> thẻWebGL-> phầnPublishing Settings(Cài đặt xuất bản). - Tạo bản dựng cho
WebGLtrong cửa sổBuild Settings(Cài đặt bản dựng), sau đó chuyển đến bước 7 hoặc 5 dựa trên nhu cầu của dự án. - Chỉ làm theo các bước 5 và 6 nếu bạn sử dụng tính năng nén: Sau khi tạo dự án, hãy chuyển đến vị trí thư mục bản dựng và mở thư mục
Build. Tìm các tệp.wasmhoặc.datacủa dự án cần nén để phù hợp với giới hạn kích thước tệp riêng lẻ và nén các tệp này. Hãy nhớ xoá các tệp.wasm/.datagốc đã được nén vì bạn sẽ gửi các tệp*.wasm.zipvà*.data.zipthay thế.- Lưu ý: nếu bạn đang sử dụng máy Mac, bạn có thể nhấp chuột phải vào tệp rồi chọn "Compress *" (Nén *). Trên PC, bạn có thể nhấp chuột phải vào tệp rồi chọn "Compress to ZIP file" (Nén thành tệp ZIP).
- Chỉ làm theo nếu bạn đã thực hiện bước 5: Cập nhật tệp
index.htmlđược tạo từYTGameWrapperTemplateđể tải các tệp đã nén và giải nén các tệp đó.- Gần cuối tệp
index.html, bạn sẽ thấyPath 1và nhận xét dòng sauInitUnitySection();. - Gần cuối tệp
index.html, bạn sẽ thấyPath 2và nhận xét dòng sauloadResources(InitUnitySection);.
- Gần cuối tệp
- Khi gửi dự án của bạn để được Chứng nhận, bạn cần gửi tất cả các tệp được tạo từ Unity đến vị trí bản dựng của bạn từ Bước 4. Nếu bạn đã làm theo các bước 5 và 6, hãy thêm cả các tệp này.
Nâng cấp các mẫu được cung cấp để sử dụng Universal Render Pipeline (URP)
Một trong những tiến bộ mới nhất của các phiên bản Unity mới hơn là chúng sử dụng Universal Render Pipeline (URP). Để nâng cấp mẫu sao cho mọi thứ hiển thị chính xác.
- Bắt đầu bằng cách nhập gói
GoogleYTGameWrapper-with-sample.unitypackagevào một dự án mới hoặc hiện có. - Chuyển đến cửa sổ
Render Pipeline Converter(Trình chuyển đổi quy trình kết xuất):Window(Cửa sổ) ->Rendering(Kết xuất) ->Render Pipeline Converter(Trình chuyển đổi quy trình kết xuất). - Chọn
Rendering Settings(Cài đặt kết xuất),Material Upgrade(Nâng cấp thành phần) vàReadonly Material Converter(Trình chuyển đổi thành phần chỉ đọc). - Tiếp theo, hãy chọn
Initialize and Convert(Khởi chạy và chuyển đổi), đợi quá trình này hoàn tất và mẫu sẽ sẵn sàng cho URP.
Cách chia nhỏ thành phần trong dự án Unity (Tải từng phần)
Một trong những vấn đề chính mà nhà phát triển nêu bật khi sử dụng Unity là tuân thủ các yêu cầu về kích thước tệp riêng lẻ và tổng kích thước gói.
Tính năng tải từng phần thành phần là một phương pháp tối ưu hoá tuyệt vời mà bạn có thể thực hiện cho dự án của mình vì bạn có thể tải thành phần, cấp độ và dữ liệu khi cần. Nhóm chứng nhận của chúng tôi có thể miễn các hạn chế về kích thước tệp tổng thể nếu bạn thực hiện đúng cách, vì toàn bộ trò chơi của bạn sẽ không được tải trước mà sẽ tải khi người dùng di chuyển trong sản phẩm của bạn.
Để giúp tải đúng cách, Unity có một số cách để chia nhỏ thành phần, xác minh rằng các nhóm thành phần riêng lẻ của bạn nằm trong giới hạn kích thước và bạn tải nội dung theo thời gian. Bạn nên sử dụng Addressable hoặc Gói thành phần.
Addressable
Addressable cho phép bạn xác định các tệp khác nhau cần được tải cùng nhau và Unity sẽ xử lý hầu hết việc đóng gói cho bạn. Unity cũng cung cấp một số công cụ để quản lý kích thước tệp và giúp đảm bảo bạn không sao chép thành phần.
Để sử dụng Addressable, bạn cần nhập gói Addressable thông qua Trình quản lý gói trong Unity, sau đó gắn thẻ thành phần của bạn vào Nhóm Addressable. Bạn có thể tìm thêm thông tin chi tiết trong tài liệu của Unity.
Gói thành phần
Gói thành phần rất hữu ích vì bạn có thể chia nhỏ dự án và tải các phần tử ngay lập tức. Các gói này hữu ích cho Nội dung có thể tải xuống (DLC), gói cấp độ, nhân vật mới, v.v. Gói thành phần rất phù hợp để tải và đóng gói nội dung tự quản lý. Bạn có thể sử dụng các gói này bằng cách gắn thẻ thành phần của bạn vào các gói cụ thể, sau đó tải các gói khi cần. Bạn có thể tìm thêm thông tin chi tiết trong tài liệu về Gói thành phần của Unity.
Xem tài liệu tham khảo đầy đủ về YT Playables API.