Avatar
0
tvd12 Enlightened
tvd12 Enlightened
Ý 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>
Answer
Avatar
0
nhân lê tuấn Beginner
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>
Answer
Avatar
0
tvd12 Enlightened
tvd12 Enlightened
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>
Answer
Avatar
0
tvd12 Enlightened
tvd12 Enlightened
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 &amp; 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>
Answer
Avatar
0
tvd12 Enlightened
tvd12 Enlightened
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 += _ =&gt; { 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>
Answer
Avatar
0
Chu Đức Beginner
Chu Đức Beginner
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>
Answer