edward4324

code review

May 7th, 2022 (edited)
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.50 KB | None | 0 0
  1. Для начала давай-ка пройдемся по классам
  2.  
  3. Класс PlayController
  4.     нейминг:
  5.     лучше не писать названия такими
  6.     public Rigidbody2D playerRb;
  7.     лучше их писать полностью, так легче читать и понимать код
  8.     public Rigidbody2D playerRigidbody;
  9.     В целом по названиям почитай какие есть соглашения о наименованиях (про кодстайл и все остальное ещё в конце написал):
  10.     https://docs.microsoft.com/ru-ru/dotnet/csharp/fundamentals/coding-style/coding-conventions
  11.  
  12.     два вот этих метода:
  13.     void FixedUpdate()
  14.     {
  15.         Vector2 movement = new Vector2(movementX * playerSpeed, playerRb.velocity.y);
  16.         playerRb.velocity = movement;
  17.     }
  18.     void Jump()
  19.     {
  20.         Vector2 movement = new Vector2(playerRb.velocity.x, jumpForce);
  21.         playerRb.velocity = movement;
  22.     }
  23.     в целом ты можешь писать и так, но лучше не расписывать и просто писать следующим образом:
  24.     void FixedUpdate()
  25.     {
  26.         playerRigidBody.velocity = new Vector2(movementX * playerSpeed, playerRigidBody.velocity.y);
  27.     }
  28.     void Jump()
  29.     {
  30.         playerRigidBody.velocity = new Vector2(playerRigidBody.velocity.x, jumpForce);
  31.     }
  32.  
  33.     метод isGrounded()
  34.         Тут довольно-таки стандартная ошибка новичка при работе с булевыми операциями, как ты увидишь их можно спокойно сокращать и
  35.         делать свой код более читаемым
  36.     вместо
  37.     if (checkGround != null)
  38.     {
  39.         return true;
  40.     }
  41.     return false;
  42.     лучше писать
  43.     return
  44.         checkGroung != null;
  45.  
  46. Теперь вот такой момент с дублированием классов
  47. public class rotaProf : MonoBehaviour
  48. {
  49.     void OnTriggerEnter2D(Collider2D Enemy)
  50.     {
  51.         SceneManager.LoadScene(1);
  52.     }
  53. }
  54. public class rotaProf1 : MonoBehaviour
  55. {
  56.     void OnTriggerEnter2D(Collider2D Enemy)
  57.     {
  58.         SceneManager.LoadScene(2);
  59.     }
  60. }
  61. Как я правильно понял, ты ещё не до конца научился правильно обращаться с классами и всем остальным, но это норма для новичка
  62. Суть твоей ошибки тут в том, что у тебя два класса выполняют одно и то же действие, но только лишь с небольшим различием.
  63. Самый лучший способ решения такой проблемы это задание в классе поля, допустим какое-то id, и использование его значения в методе:
  64. public class rotaProf : MonoBehaviour
  65. {
  66.     public int id {private get; set;}
  67.  
  68.     void OnTriggerEnter2D(Collider2D Enemy)
  69.     {
  70.         SceneManager.LoadScene(id);
  71.     }
  72. }
  73. Все что тебе останется это просто взять и задать ему какое-то значение через редактор в юньке или ещё каким-либо образом
  74.  
  75. Аналогично с SceneSwap и SceneSwap1:
  76. public class SceneSwap : MonoBehaviour
  77. {
  78.     private void OnGUI()
  79.     {
  80.         int xCenter = (Screen.width / 2);
  81.         int yCenter = (Screen.height / 2);
  82.         int width = 100;
  83.         int height = 50;
  84.  
  85.         GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button"));
  86.         fontSize.fontSize = 25;
  87.  
  88.         Scene scene = SceneManager.GetActiveScene();
  89.  
  90.         if (scene.name == "3")
  91.         {
  92.             // Show a button to allow scene2 to be switched to.
  93.             if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Play!", fontSize))
  94.             {
  95.                 SceneManager.LoadScene("1");
  96.             }
  97.         }
  98.         else
  99.         {
  100.             // Show a button to allow scene1 to be returned to.
  101.             if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Заново", fontSize))
  102.             {
  103.                 SceneManager.LoadScene("1");
  104.             }
  105.         }
  106.     }
  107. }
  108.  
  109. public class SceneSwap1 : MonoBehaviour
  110. {
  111.     private void OnGUI()
  112.     {
  113.         int xCenter = (Screen.width / 8);
  114.         int yCenter = (Screen.height / 8);
  115.         int width = 80;
  116.         int height = 40;
  117.  
  118.         GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button"));
  119.         fontSize.fontSize = 14;
  120.  
  121.         Scene scene = SceneManager.GetActiveScene();
  122.  
  123.         if (scene.name == "3")
  124.         {
  125.             // Show a button to allow scene2 to be switched to.
  126.             if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Play!", fontSize))
  127.             {
  128.                 SceneManager.LoadScene("1");
  129.             }
  130.         }
  131.         else
  132.         {
  133.             // Show a button to allow scene1 to be returned to.
  134.             if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Заново", fontSize))
  135.             {
  136.                 SceneManager.LoadScene("1");
  137.             }
  138.         }
  139.     }
  140. }
  141.  
  142. Как тут можно заметить, разнятся только лишь две переменные: width и height, проделаем для них то же самое, что и для id в rotaProf:
  143. public class SceneSwap : MonoBehaviour
  144. {
  145.  
  146.     public buttonWidth { get; set; }
  147.     public buttonHeight { get; set; }
  148.  
  149.     private void OnGUI()
  150.     {
  151.         int xCenter = (Screen.width / 2);
  152.         int yCenter = (Screen.height / 2);
  153.  
  154.         GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button"));
  155.         fontSize.fontSize = 14;
  156.  
  157.         Scene scene = SceneManager.GetActiveScene();
  158.  
  159.         if (scene.name == "3")
  160.         {
  161.             // Show a button to allow scene2 to be switched to.
  162.             if (GUI.Button(new Rect(xCenter - buttonWidth / 2, yCenter - buttonHeight / 2, buttonWidth, buttonHeight), "Play!", fontSize))
  163.             {
  164.                 SceneManager.LoadScene("1");
  165.             }
  166.         }
  167.         else
  168.         {
  169.             // Show a button to allow scene1 to be returned to.
  170.             if (GUI.Button(new Rect(xCenter - buttonWidth / 2, yCenter - buttonHeight / 2, buttonWidth, buttonHeight), "Заново", fontSize))
  171.             {
  172.                 SceneManager.LoadScene("1");
  173.             }
  174.         }
  175.     }
  176. }
  177.  
  178. В целом если ещё и есть какие-то ошибки, то они скорее всего заключаются в том же, что я описал выше, поэтому не буду лишний раз повторяться.
  179. Скорее всего будут какие-то ошибки в коде с методами и функциями из юньки, но по ним ничего не могу сказать, ибо с юнити давно не работал
  180.  
  181.  
  182. Итак, что могу посоветовать:
  183. 1. Пункт про кодстайл. Прочитай книгу "Чистый код", она может быть чуток и устарела, но на примере Java тебе объяснят как правильно
  184.    работать с кодом, оформлять его и т.д.
  185.    Вот тут вроде бы рабочая ссылка
  186.    https://download.blackball.lv/data/library/Chistyj_kod_-_Sozdanie_analiz_i_refaktoring_%282013%29.pdf
  187. 2. Читай книги. Да, это никому не интересно, но в программировании чтение книг это один из самых доступных и надежных путей для
  188.    получения новых знаний
  189. 3. Разберись в ООП, т.е. это очень важная штука в программировании, по началу ты может быть и не будешь её так много использовать в
  190.    проектах, но все это будет продолжаться до тех пор, пока ты не научишься мыслить абстракциями
  191.    Материалы по ООП хорошие на метаните: ( https://metanit.com/sharp/tutorial/3.7.php )
  192. 4. Математика. Не знаю как тебе, но лично мне в классе 7-9 математика была не особо интересна, но в геймдеве она может пригодится и ещё
  193.    как, поэтому не забивай на нее в школе. Если есть желание, советую интересоваться темами из матеши, которые связаны с геймдевом.
  194.    Большинство из этих тем скорее всего будут из высшей математики, но ты можешь попробовать в них разобраться, они только по началу
  195.    кажутся страшными и неподъемными
  196.    Вот статья про геймдев и математику: https://proglib.io/p/math-for-game-development
  197. 5. Как можно больше практикуйся и тренируйся работать с алгоритмами
  198.    На этом сайте, например, ты можешь тренироваться в решении всяких задач ( https://edabit.com/ )                                          
Add Comment
Please, Sign In to add comment