Ý nghĩa của [Serializable] attribute là gì?
Ví dụ trong đoạn code này thì [Serializable] attribute có nghĩa là gì?<div class="markdown-block position-relative overflow-auto source-csharp">
<pre>
<span class="pl-k">using</span> System;
<span class="pl-k">using</span> UnityEngine;
<span class="pl-k">public</span> <span class="pl-k">class</span> Player : MonoBehaviour
{
//Create a custom <span class="pl-k">struct</span> and apply [Serializable] attribute to it
[Serializable]
<span class="pl-k">public</span> <span class="pl-k">struct</span> PlayerStats
{
<span class="pl-k">public</span> <span class="pl-k">int</span> movementSpeed;
<span class="pl-k">public</span> <span class="pl-k">int</span> hitPoints;
<span class="pl-k">public</span> <span class="pl-k">bool</span> hasHealthPotion;
}
//Make the <span class="pl-k">private</span> field of our PlayerStats <span class="pl-k">struct</span> visible <span class="pl-k">in</span> the Inspector
//by applying [SerializeField] attribute to it
[SerializeField]
<span class="pl-k">private</span> PlayerStats stats;
}
</pre>
</div>
[Ezyfox Server] Unity game client không gửi được command khi build ra android
<ul>
<li>Như tiêu đề, em có thử build unity client ra android app. Em chạy thử bằng giả lập ld player, nhập tài khoản mật khẩu như bình thường và bấm login thì không có gì xảy ra hết. Em nghĩ nó không gửi được các command đến BE ezyfox server vì ở bên Server cũng không thấy có session nào gửi request đến hết.
</li></ul>
<p>
</p>
<ul>
<li>Khi e build ra exe thì vẫn hoạt động bình thường.
</li></ul>
<p>
</p>
<ul>
<li>Vậy có phải là do LD player k ạ nhỉ? A giúp em với.
</li></ul>
<p>
</p>
<p>
Em cảm ơn ạ!
</p>
[Ezyfox Server] Cách sử dụng kết hợp Ezyfox Server và EzyHttp cho Unity game
<ul>
<li>Em đang làm một game bằng EzyFox Server và Unity client. Em đang validate đăng nhập bằng tài khoản, mật khẩu bình thường.
</li></ul>
<p>
</p>
<ul>
<li>Giờ em muốn sử dụng Ezy Http để đăng nhập bằng access token, tích hợp thêm các phương thức đăng nhập khác ( vd: google). Và thêm tính năng thanh toán thử bằng paypal sandbox. Em đã tìm hiểu thử về gọi rest api trong unity, cụ thể là paypal sandbox nhưng tìm thấy rất ít tài liệu về phần này.
</li></ul>
<p>
</p>
<ul>
<li>Nên em đã nghĩ đến ý tưởng build game ra webgl và nhúng vào trang web. Em sẽ đăng nhập và thanh toán bằng paypal trên web. Nhưng em lại có vấn đề mới là làm thế nào để game unity được nhúng trên web có thể lấy được access token hay là kết quả của request thanh toán paypal được thực hiện trên web.
</li></ul>
<p>
</p>
<p>
A tư vấn cho em một hướng giải quyết với ạ.
</p>
<p>
</p>
<p>
Em xin cảm ơn!
</p>
[Ezyfox Server] Làm sao để lấy thông tin user đang đăng nhập vào zone
Em đang làm 1 box chat đơn giản trong game (game không có room, không có lobby). Giờ em cần lấy danh sách user đang login realtime để gửi tin nhắn đến các user khác khi có tin nhắn mới.
<p>
</p>
<p>
Theo em nghĩ thì mình sẽ phải tạo một list lưu tên user ngay sau khi đăng nhập. Khi có tin nhắn mới sẽ gọi responseFactory.newObjectResponse().usernames() để gửi. Vậy làm thế nào để xóa user khỏi list khi họ tắt game?
</p>
<p>
</p>
<p>
Em nghĩ EzyFoxServer đã có sẵn hàm để lấy danh sách user đang đăng nhập nhưng vẫn chưa biết gọi thế nào. A chỉ em với ạ.
</p>
<p>
</p>
<p>
Em cảm ơn ạ!
</p>
<p>
</p>
Lựa chọn giao thức cho game idle/simulator: Websocket hay HTTP hay cả hai?
Em đang làm một game dạng idle/simulator/defense - thể loại SPRG.
<p>
</p>
<p>
Game mechanic là xếp formation một lượng character cho trước vào grid[row,column] tương ứng. Sau khi có được dữ liệu formation,
</p>
<p>
Lựa chọn đối thủ (có formation) và nhấn Tấn công. (xếp đội hình trước hoặc sau match tùy trường hợp - hoặc vào ranking thấy formation của đối thủ rồi mới tấn công, hoặc đi arena thì random chọn ra 1 đối thủ same ELO để tấn công - lúc này chỉ thấy id đối thủ, người chơi không thấy formation)
</p>
<p>
</p>
<p>
Request để tiến hành tấn công lần lượt theo turn cho đến khi một trong hai bên không còn character nào trong formation.
</p>
<p>
Response là kết quả thắng thua và Queue của mỗi turn (data của attacker và victims)
</p>
<p>
</p>
<p>
Client chỉ diễn hoạt lại Queue này.
</p>
<p>
</p>
<p>
Ý tưởng là vậy, nhìn chung em định làm HTTP vì nghĩ đến việc dễ test bằng dữ liệu thô mà không cần client side.
</p>
<p>
Nhưng rồi em thấy trong game-box nói riêng và ezyfox-server nói chung được thiết kế theo phương thức websocket.
</p>
<p>
Em nghĩ làm websocket cũng được thôi!? Nhưng vậy:
</p>
<ul>
<li>Liệu có test được không? (bằng postman chẳng hạn)
</li>
<li>Liệu có cách nào vừa websocket (mọi hoạt động khác trừ battle) và chỉ HTTP cho battle? (như vậy có rườm rà không?)
</li>
<li>Và còn vấn đề gì không?
</li></ul>
<p>
.
</p>
<p>
Em cảm ơn
</p>
Lỗi khi chạy server của project EzySmashers
Khi chạy thử server của project EzySmashers em có gặp các lỗi như sau:<img class="alignnone size-full wp-image-5253" src="https://stackask.com/wp-content/uploads/2022/04/Untitled.png" alt="" />
<p>
</p>
<p>
Ai giúp em với ạ.
</p>
<p>
</p>
<p>
Em xin cảm ơn!
</p>
Xây dựng game MMORPG
Hiện tại nhóm em đang làm đồ án đề tài game MMORPG , và em đang tìm hướng để phát triển phần multiplayer theo cấu trúc Client-Server (Dedicated Server) .
<ul>
<li>Các vấn đề cần tìm hiểu là draff kiến trúc tổng thể của hệ thống và các đối sách đánh giá hệ thống (Ping, Lantency, CCU ,..)
</li>
<li>Hiện tại em tìm hiểu các document và tutorial trên mạng như Photon Engine, Azure Prefab đều rất sơ sài và chỉ xử lý các bước cơ bản như join vào cùng room và đồng bộ được state giữa các client .
</li>
<li>Các vấn đề em chưa tìm được hướng xử lý :
</li></ul>
<p>
+ Player tạo tài khoản và lưu DB tài khoản ở đâu
</p>
<p>
+ Mỗi player sẽ có 1 bộ asset riêng (Item, tóc ,quần áo ,..) vậy các asset này sẽ lưu ở đâu và làm thế nào để các client đồng bộ được
</p>
<p>
</p>
<p>
Không biết anh có thể giới thiệu giúp em ebook hay tài liêuj nào để có hướng giải quyết các vấn đề trên không ạ
</p>
[Ezyfox Server] Quản lý logic phòng chơi trong game dạng turnbase
Em đang thử làm game tá lả bằng ezyfox server. Em muốn xử lý tất cả logic ở bên server. Các client chỉ đc nhận thông tin về bài trên tay mình và các quân bài được đánh để chống hack. Theo logic trên, "nọc" bài để bốc ở giữa trong mỗi ván chơi sẽ phải được lưu ở phía server. Chẳng hạn có nhiều ván chơi cùng một thời điểm, thì phía server sẽ lưu dữ liệu của từng ván như thế nào?
Unity dùng thư viện gì để gọi qua lại giữa C<h1>và Javascript khi build bản web</h1>
Sử dụng <a href="https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html">WebGL</a>. Hãy cố gắng code nhiều nhất trên javascript nếu có thể. Bởi vì trên C<h1>có thể sẽ có nhiều thư viện không thể chạy được với web dẫn đến tình trạng treo game.</h1>
Unity Login qua HTTP với username và password
Code Unity Login qua HTTP với username và password:
<p>
</p>
<pre>
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class LoginHttps : MonoBehaviour {
public void Login(string userName, string password, string url, Action onSuccess, Action onFailed) {
// TODO: do somethings to validate user name & password from client
//...
StartCoroutine(IELogin(userName, password, url, onSuccess, onFailed));
}
IEnumerator IELogin(string userName, string password, string url, Action onSuccess, Action onFailed) {
WWWForm form = new WWWForm();
form.AddField("uid", userName);
form.AddField("pass", password);
using (UnityWebRequest www = UnityWebRequest.Post(url, form)) {
yield return www.SendWebRequest();
if (www.isDone) {
string response = www.downloadHandler.text; // response is a json string like: {code:0,err:"wrong password"}
if (!string.IsNullOrEmpty(response)) {
ResponseData result = JsonUtility.FromJson(response);
if (result != null) {
if (result.code == 1) {
Debug.Log("Login Successfully.");
onSuccess?.Invoke();
}
else {
Debug.LogError($"Login Failure: {result.err}");
onFailed?.Invoke();
}
}
}
else {
Debug.LogError("Something wrong from response, check your backend!");
onFailed?.Invoke();
}
}
else {
Debug.LogError(www.error); // Network error or something wrong which can not post to url.
onFailed?.Invoke();
}
}
}
[System.Serializable]
class ResponseData {
public int code; // 0: Login Failed, 1: Login Success
public string err; // Such as: Username is not exist, Wrong password...
}
}
</pre>
Unity sử dụng UnityWebRequest gọi post request
Ví dụ Unity sử dụng UnityWebRequest gọi post request:
<p>
</p>
<pre>
using System;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
public class Example : MonoBehaviour
{
[Serializable]
private sealed class Data
{
public int id = 25;
public string name = "Hello World";
}
private void Awake()
{
var url = "https://httpbin.org/post";
var data = new Data();
var json = JsonUtility.ToJson( data );
var postData = Encoding.UTF8.GetBytes( json );
var request = new UnityWebRequest( url, UnityWebRequest.kHttpVerbPOST )
{
uploadHandler = new UploadHandlerRaw( postData ),
downloadHandler = new DownloadHandlerBuffer()
};
request.SetRequestHeader( "Content-Type", "application/json" );
var operation = request.SendWebRequest();
operation.completed += _ =>
{
Debug.Log( operation.isDone );
Debug.Log( operation.webRequest.downloadHandler.text );
Debug.Log( operation.webRequest.isHttpError );
Debug.Log( operation.webRequest.isNetworkError );
};
}
}
</pre>
<p>
</p>
<p>
Nguồn: <a href="https://baba-s.hatenablog.com/entry/2020/11/16/080000_9" target="_blank" rel="noopener">https://baba-s.hatenablog.com/entry/2020/11/16/080000_9</a>
</p>
Animation Sprite trong unity bị lệch vị trí
Em đang làm một enemy cho game của em và em đã làm đến bước tìm được player và tấn công, và giờ em muốn nó sẽ có thể detect được player khi player đang đứng ở platform trên cao ý ạ, và khi đó thì enemy sẽ có thể jump lên platform đó và tiếp tục tấn công. Trong việc detect và move tới player em sử dụng hàm Movetoward của vector2. Mà em không biết nên làm jump như thế nào. Mong mọi người chỉ giáo ạ
<p>
</p>
<p>
//Chuyện là em có 1 animation được tạo ra từ 4 sprite, nhưng ở frame số 2 thì sprite có vị trí y thấp hơn các frame khác. Vậy cho em hỏi làm cách nào để sữa lại cho y của frame đó bằng y của những frame còn lại ạ. Em đã thử nhiều cách nhưng mà nó lại tạo ra những lỗi khác nhau. Em cảm ơn// - Câu này đã làm được.
</p>