1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tối ưu hoá một trò chơi Unity Android cho các thiết bị màn hình lớn và thiết bị có thể gập lại. Bạn sẽ dùng dự án mẫu Lost Crypt để triển khai tính năng hỗ trợ tỷ lệ khung hình, mở rộng việc sử dụng toàn màn hình và phản hồi các trạng thái của thiết bị có thể gập lại.
Điều kiện tiên quyết
- Có kiến thức cơ bản về Unity và hoạt động phát triển Android.
- Các thiết bị Android có màn hình lớn như máy tính bảng hoặc điện thoại gập.
Kiến thức bạn sẽ học được
- Cách triển khai tính năng hỗ trợ nhiều tỷ lệ khung hình.
- Cách sử dụng các điểm neo trong giao diện người dùng và chế độ cài đặt camera của trò chơi để tự động điều chỉnh theo kích thước màn hình.
- Cách sử dụng Jetpack Window Manager của Android để phát hiện tư thế gập của thiết bị và điều chỉnh bố cục.
Bạn cần có
- Unity Hub và Editor: Đã cài đặt Unity 2020 LTS hoặc Unity 2022, có hỗ trợ bản dựng Android.
- Phần cứng: Thiết bị Android có màn hình lớn như máy tính bảng hoặc điện thoại gập.
- Nền tảng phát triển tác nhân, chẳng hạn như Google Antigravity nếu bạn dự định sử dụng kỹ năng này.
2. Kỹ năng của nhân viên hỗ trợ
Bạn có thể dùng kỹ năng của tác nhân để đánh giá dự án trò chơi Unity. Kỹ năng này giúp bạn thêm khả năng hỗ trợ đổi kích thước, màn hình lớn và thiết bị có thể gập lại. Để biết thêm thông tin, hãy xem: GitHub
Cách sử dụng kỹ năng này:
- Sao chép tệp SKILL.md vào thư mục tác nhân. Để biết thêm thông tin về cách thêm một kỹ năng, hãy xem bài viết Bắt đầu sử dụng Google Antigravity.
- Nhắc tác nhân trong IDE dựa trên tác nhân (chẳng hạn như Antigravity) bằng các câu hỏi về màn hình lớn, thiết bị có thể gập lại hoặc khả năng đổi kích thước.
- Yêu cầu tác nhân thêm khả năng hỗ trợ màn hình lớn và thiết bị có thể gập lại.
3. Hỗ trợ tỷ lệ khung hình
Để đảm bảo trò chơi của bạn xuất hiện đúng cách trên nhiều kích thước màn hình, hãy bắt đầu bằng cách triển khai tính năng hỗ trợ nhiều tỷ lệ khung hình. Bạn có thể cân nhắc điều chỉnh tỷ lệ khung hình của camera hoặc khung vẽ để phù hợp hơn với nhiều màn hình.
- Đảm bảo ứng dụng của bạn sử dụng chế độ có thể đổi kích thước toàn màn hình.
- Trong
AndroidManifest.xmlcủa bạn (tạiAssets/Plugins/Android/AndroidManifest.xml):- Đặt
android:resizeableActivity="true". - Đặt
android:screenOrientation="fullSensor".
- Đặt
Ví dụ:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity.lostcryptlargescreenexample.LargeScreenPlayableActivity"
android:theme="@style/UnityThemeSelector"
android:screenOrientation="fullSensor"
android:launchMode="singleTask"
android:resizeableActivity="true"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
android:hardwareAccelerated="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
- Kiểm tra Build Settings (Cài đặt bản dựng) trong Unity để biết các cấu hình nền tảng Android.
Lưu ý: Hỗ trợ nhiều tỷ lệ khung hình là bước đầu tiên để trò chơi của bạn trông đẹp mắt trên máy tính bảng và thiết bị có thể gập lại.
4. Sử dụng toàn màn hình
Sau khi điều chỉnh cho phù hợp với nhiều tỷ lệ khung hình, hãy đảm bảo trò chơi của bạn sử dụng toàn bộ màn hình để mang đến trải nghiệm chơi game sống động hơn.
Cách sử dụng toàn bộ màn hình:
- Sử dụng các điểm neo trong giao diện người dùng và chế độ cài đặt camera của trò chơi. Nhờ đó, các phần tử trên giao diện người dùng có thể tự động điều chỉnh vị trí tương ứng với kích thước màn hình.
- Mở cảnh Anchoring (Ghim) trong dự án mẫu để xem cách thiết lập tính năng ghim canvas trên giao diện người dùng.
- Trong cảnh Anchoring (Cố định), khung vẽ được cập nhật để nhận biết khung hình an toàn và các chế độ điều khiển chuyển động được cố định vào các góc của màn hình.
Để duy trì tỷ lệ khung hình cho camera chính, hãy điều chỉnh pixelRect của camera một cách linh hoạt. Tập lệnh CameraAspectLock.cs minh hoạ cách phản hồi các thay đổi về hướng và cách tạo hiệu ứng hòm thư cho khung hiển thị camera:
[SerializeField]
private float minAspectRatio = 4f / 3f;
[SerializeField]
private float maxAspectRatio = 21f / 9f;
public void MaintainAspectRatio() {
int viewWidth = Display.main.systemWidth;
int viewHeight = Display.main.systemHeight;
// 1. Calculate screen aspect ratio
float scaleScreen = viewWidth / (float)viewHeight;
Rect rect = _camera.pixelRect;
// 2. Scale to the fullest of the lower between width or height
if (scaleScreen > maxAspectRatio) {
// use height, lock width to max at aspect scale
rect.width = viewHeight * maxAspectRatio;
rect.height = viewHeight;
} else if (scaleScreen < minAspectRatio) {
// use width, lock height to min at aspect scale
rect.width = viewWidth;
rect.height = viewWidth / minAspectRatio;
} else {
// within allowed aspect ratio range, use full screen
rect.width = viewWidth;
rect.height = viewHeight;
}
// make sure to center the rect within the window
rect.x = Mathf.Floor((viewWidth - rect.width) * 0.5f);
rect.y = Mathf.Floor((viewHeight - rect.height) * 0.5f);
Debug.Log("camera view width = " + rect.width +
" height = " + rect.height +
" x = " + rect.x +
" y = " + rect.y);
// 3. Commit the new size to the camera so that it takes effect
_camera.pixelRect = rect;
}
5. Hỗ trợ thiết bị có thể gập lại
Với thiết bị có thể gập lại, bạn nên điều chỉnh bố cục trò chơi dựa trên tư thế gập của thiết bị (ví dụ: HALF_OPENED, FLAT) và kích thước màn hình ngay lập tức.
- Sử dụng Jetpack Window Manager của Android để phát hiện trạng thái của thiết bị.
- Trong dự án mẫu, hãy mở cảnh HingeAware.
- Cảnh này chứa một MonoBehaviour
ConfigurationManagerkết nối các sự kiện Jetpack WindowManager của Android với Unity và phản hồi các trạng thái gập thông qua các lệnh gọi lạiUnityEvent. HingeSensor.csđọc góc bản lề bằng trình bổ trợ Javacom.unity.lostcryptlargescreenexample.HingeAngleSensor.
Sử dụng ConfigurationManager
ConfigurationManager.cs giao tiếp với một hoạt động tuỳ chỉnh trên Android và phân tích cú pháp các chuỗi JSON đại diện cho trạng thái. Nó lắng nghe các lệnh gọi lại onConfigurationChanged và onFoldChanged từ Hoạt động Android.
[System.Serializable]
public class FoldInfo {
public string orientation;
public string state;
public int isSeparating;
public int boundsLeft;
public int boundsTop;
public int boundsRight;
public int boundsBottom;
}
public void onFoldChanged(string strFoldInfo) {
FoldInfo info = JsonUtility.FromJson<FoldInfo>(strFoldInfo);
// Always call the refresh from the main Unity thread
StartCoroutine(ExecuteOnMainUnityThread(ActionOnFoldChange, info));
}
Bạn cũng có thể truy vấn trạng thái một cách đồng bộ bằng cách sử dụng thuộc tính getFoldableState:
public static string getFoldableState {
get {
if (Application.platform == RuntimePlatform.Android) {
var foldingFeatureObject = foldablePlayerActivity.Call<AndroidJavaObject>("getFoldingFeature");
if (foldingFeatureObject != null) {
var state = foldingFeatureObject.Call<AndroidJavaObject>("getState");
return state.Call<string>("toString");
}
}
return "NONE";
}
}
6. Sử dụng HingeSensor
Một số thiết bị có thể gập lại có cảm biến bản lề vật lý cung cấp góc gập chính xác (từ 0 đến 360 độ). Bạn có thể dùng chế độ này để điều khiển lối chơi hoặc điều chỉnh camera.
Trong HingeSensor.cs, một Plugin Android được khởi chạy để đọc cảm biến phần cứng. Bạn cũng có thể kiểm tra xem bản lề có đang bật hay không:
public class HingeSensor : IDisposable {
AndroidJavaObject plugin;
public static HingeSensor Start() {
if (Application.platform == RuntimePlatform.Android) {
return OnPlayer.Run(p => {
var context = p.GetStatic<AndroidJavaObject>("currentActivity");
var plugin = new AndroidJavaClass("com.unity.lostcryptlargescreenexample.HingeAngleSensor")
.CallStatic<AndroidJavaObject>("getInstance", context);
if (plugin != null) {
plugin.Call("setupSensor");
return new HingeSensor(plugin);
}
return null;
});
}
return null;
}
public float GetHingeAngle() {
return (Application.platform == RuntimePlatform.Android && plugin != null) ? plugin.Call<float>("getHingeAngle") : -1.0f;
}
public bool IsHingeEnabled() {
return Application.platform == RuntimePlatform.Android && plugin != null && plugin.Call<int>("isHingeEnabled") > 0;
}
}
Lưu ý: Nhớ gọi Dispose() hoặc StopSensing() trên thực thể HingeSensor khi ứng dụng của bạn tạm dừng hoặc bị huỷ để tránh hao pin.
7. Tạo tệp AAB
Để tạo tệp AAB trong Unity Editor, hãy làm theo các bước sau:
- Trong Trình chỉnh sửa Unity, hãy nhấp vào File > Build settings (Tệp > Cài đặt bản dựng).
- Chọn Build App Bundle ( Google Play ) (Tạo gói ứng dụng (Google Play)). Để biết thêm thông tin, hãy xem Tài liệu tham khảo về chế độ cài đặt bản dựng Android.
- Nhấp vào Build (Bản dựng).
- Tải tệp AAB xuống từ Unity Editor.
Tạo một bản phát hành kiểm thử nội bộ
Để tạo một bản phát hành kiểm thử nội bộ và thêm người kiểm thử trong Play Console, hãy làm theo các bước sau:
- Trong Google Play Console, hãy chọn một trò chơi.
- Chuyển đến trang Thử nghiệm và phát hành (Thử nghiệm > Thử nghiệm nội bộ).
- Nhấp vào Tải lên rồi chọn tệp AAB.
- Trong trường Thông tin phát hành, hãy nhập tên.
- Nhấp vào Tiếp theo rồi xem lại thông tin chi tiết về bản phát hành.
- Nhấp vào Lưu và xuất bản.
8. Tạo bản dựng và chạy dự án
Giờ đây, bạn đã sẵn sàng tạo dự án và kiểm thử dự án đó trên thiết bị của mình.
- Đảm bảo bạn đã mở trò chơi.
- Trong Play Console, hãy chuyển đến File > Build Profile (hoặc Build Settings) (Tệp > Hồ sơ bản dựng (hoặc Cài đặt bản dựng)).
- Đảm bảo bạn đã chọn Build App Bundle (Google Play) nếu muốn tải lên Play Console, hoặc nhấp vào Build and Run để triển khai trực tiếp vào thiết bị đã kết nối.
- Xác minh các thiết bị có thể gập lại, bạn nên điều chỉnh bố cục của trò chơi dựa trên tư thế gập của thiết bị (Ví dụ: HALF_OPENED, FLAT) và kích thước màn hình ngay lập tức.
9. Xin chúc mừng
Bạn đã học thành công các nguyên tắc điều chỉnh một trò chơi Android trên Unity cho màn hình lớn và thiết bị có thể gập lại!
Khảo sát
Chúng tôi rất coi trọng ý kiến phản hồi của bạn về lớp học lập trình này. Hãy cân nhắc dành vài phút để hoàn thành bản khảo sát của chúng tôi.