Last active
August 16, 2022 17:44
-
-
Save bienpx224/2f8b19add8ff1c4a82e753294e001d30 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Build UNITY IOS | |
1. Switch to IOS platform. | |
2. Add firebase file to asset folder | |
3. Để ý thay đổi id quảng cáo admob | |
4. Builder Player Setting Config, xem lại 1 lượt. | |
5. Build ra folder Xcode | |
6. mở terminal folder đó, chạy pod install | |
7. Mở folder đó bằng Xcode với .xcodeproject | |
8. Check lại signature, project team trong Hirearchy | |
9. Build máy thật. | |
Build android, ko cần x86 -> giảm dung lượng app | |
standard assets của Unity có sẵn model, texture, … dùng sẵn | |
Smart Localization giúp multi language dễ dàng. Import thôi | |
Bạn có thể tham khảo mô hình của Valorant ở đây: https://technology.riotgames.com/.../peeking-valorants... | |
Họ áp dụng 1 số kỹ thuật như: | |
. | |
NHÓM CƠ SỞ HẠ TẦNG: | |
- Tự xây dựng hệ thống "internet" với tên gọi Riot Direct để giảm tần suất thất lạc gói tin UDP và giảm delay: https://technology.riotgames.com/.../fixing-internet-real... | |
- Đặt server ở nhiều nơi trên Thế giới dựa vào dữ liệu thu thập được, mục tiêu để giúp 70% player có mức ping 35ms | |
. | |
NHÓM BACKEND TECHNIQUES: | |
- Tối ưu server để update 128 lần / giây, giảm thời gian round-trip của gói tin: https://technology.riotgames.com/.../valorants-128-tick... | |
- Đồng bộ hóa đồng hồ ở server và client, server có thể lội frame history để validate hit | |
- Buffer tối thiểu (mục tiêu chỉ 1/2 frame trễ ở server và chỉ 1 frame trễ ở remote-client) | |
- Áp dụng Line-of-sight ở server để đảm bảo player nhìn thấy nhau thật thì mới cho bắn: https://technology.riotgames.com/.../demolishing... | |
- Mở rộng bounding-box THEO HƯỚNG DI CHUYỂN để dự đoán trước vị trí có thể dính đạn của player trên server: https://technology.riotgames.com/.../demolishing... | |
- Áp dụng Occlusion Culling (theo PVS Grid) trên server để quick-check xem player có thấy nhau thật không: https://technology.riotgames.com/.../demolishing... | |
- Lưu vị trí của các collider theo animation pose trong N frame gần nhất để nội suy xem tại thời điểm "trúng đạn", có đúng là collider bị hit hay không: https://technology.riotgames.com/.../valorants-128-tick... | |
. | |
NHÓM GAME DESIGN: | |
- Design level sao cho giảm thiểu các vị trí camping tầm xa thuận lợi cho camper | |
- Súng bắn sẽ giảm độ chính xác khi di chuyển, buộc peeker phải dừng lại, đồng thời tăng thời gian phản ứng cho đối phương | |
- Khi trúng đạn không vào chỗ hiểm, mỗi step di chuyển sẽ nhỏ hơn, giúp player đó dễ nhắm bắn shooter ở không gian mở (còn camper thì chịu) | |
NHÓM OPTIMIZE GAME : | |
- 1 comment hay về phần Profiler : Nhìn qua thì thấy phần màu xanh lá chiếm tỉ lệ lớn trong mỗi khung hình, bạn nhìn qua cột bên trái sẽ thấy màu đó tương ứng với phần Rendering. Vậy nghĩa là bạn đang tốn quá nhiều thời gian để dựng hình. | |
Chi tiết hơn, bạn nhìn xuống phần Overview bên dưới và chú ý cột Total và Self. Rất nhanh, bạn thấy ngay Gfx.WaitForPresentOnGfxThread chiếm gần 90% thời lượng của mỗi frame. Vậy đây chính là thao tác tiêu tốn nhiều thời gian nhất, hay dân chuyên gọi là thắt cổ chai (bottleneck). | |
Gfx.WaitForPresentOnGfxThread là 1 marker thường gặp khi profile game Unity. Nó đo thời gian mà CPU phải chờ GPU dựng hình xong để sang frame tiếp theo. Trong trường hợp này, CPU đã gửi lệnh vẽ sang GPU từ rất lâu, nhưng GPU vẫn chưa dựng hình xong, tức là game của bạn đang bị GPU-bound. Có thể số lệnh vẽ quá nhiều, cũng có thể các lệnh vẽ quá phức tạp, hoặc chỉ đơn giản là CPU của bạn mạnh vượt trội so với GPU. Bạn cần xem các chỉ số khác để tìm hiểu sâu hơn. | |
Trong trường hợp bạn muốn biết thêm về các marker phổ biến của Unity: https://docs.unity3d.com/Manual/profiler-markers.html | |
Còn nếu muốn check nhanh thì 1 số nguyên nhân phổ biến gây GPU-bound ở mobile là: | |
- Độ phân giải màn hình (RESOLUTION) quá cao -> số pixel phải render quá nhiều | |
- Kích thước sprite / texture quá lớn -> số pixel phải sample quá nhiều | |
- Tỉ lệ ảnh so với camera quá cao, dẫn tới 1 ảnh trải dài trên 1 khu vực rộng (FILL RATE) -> số pixel phải xử lý mỗi frame quá nhiều | |
- Số pixel bị chồng lấn lên nhau quá nhiều -> số lần vẽ đè lên 1 pixel đã có màu sẵn quá nhiều -> OVERDRAW (đặc biệt với các ảnh có nhiều phần trong suốt) | |
. | |
Good luck. | |
# My note | |
## Lưu đệm các tìm kiếm component | |
Sử dụng trigger | |
Thay vì tạo thể hiện và huỷ hết đối tượng này đến đối tượng khác thì một mảng các mô hình đối tượng game làm sẵn sẽ được tạo ra dưới dạng "pool" (bể chứa) để có thẻ lấy ra đối tượng khi cần rồi trả lại đối tượng khi không sử dụng nữa . | |
- Far Clip Plane của Camera: Những object nằm ngoài khoảng cách này sẽ không được Render. | |
- Rendering Path là một thuật ngữ cho việc cài đặt thứ tự tính toán khi draw scene và sự khác biệt chính giữa các Rendering Path là cách mà chúng xử lý realtime lights, shadows và reflections (Forward Rendering có thể sẽ phù hợp hơn với các thiết bị phần cứng yếu (smartphone).) | |
- Optimize Doc for St : https://docs.unity3d.com/Manual/MecanimPeformanceandOptimization.html | |
- Luôn tối ưu hoá animation bằng cách thiết lập mục Culling Mode của animator về thành Based on Renderers , và vô hiệu hoá thuộc tính Update when offscreen của trình render lưới da (skinned mesh renderer) . . Theo đó thì cách animation sẽ không phải cập nhật khi nhân vật chưa hiện ra . | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
First commit exper Unity