Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Для начала давай-ка пройдемся по классам
- Класс PlayController
- нейминг:
- лучше не писать названия такими
- public Rigidbody2D playerRb;
- лучше их писать полностью, так легче читать и понимать код
- public Rigidbody2D playerRigidbody;
- В целом по названиям почитай какие есть соглашения о наименованиях (про кодстайл и все остальное ещё в конце написал):
- https://docs.microsoft.com/ru-ru/dotnet/csharp/fundamentals/coding-style/coding-conventions
- два вот этих метода:
- void FixedUpdate()
- {
- Vector2 movement = new Vector2(movementX * playerSpeed, playerRb.velocity.y);
- playerRb.velocity = movement;
- }
- void Jump()
- {
- Vector2 movement = new Vector2(playerRb.velocity.x, jumpForce);
- playerRb.velocity = movement;
- }
- в целом ты можешь писать и так, но лучше не расписывать и просто писать следующим образом:
- void FixedUpdate()
- {
- playerRigidBody.velocity = new Vector2(movementX * playerSpeed, playerRigidBody.velocity.y);
- }
- void Jump()
- {
- playerRigidBody.velocity = new Vector2(playerRigidBody.velocity.x, jumpForce);
- }
- метод isGrounded()
- Тут довольно-таки стандартная ошибка новичка при работе с булевыми операциями, как ты увидишь их можно спокойно сокращать и
- делать свой код более читаемым
- вместо
- if (checkGround != null)
- {
- return true;
- }
- return false;
- лучше писать
- return
- checkGroung != null;
- Теперь вот такой момент с дублированием классов
- public class rotaProf : MonoBehaviour
- {
- void OnTriggerEnter2D(Collider2D Enemy)
- {
- SceneManager.LoadScene(1);
- }
- }
- public class rotaProf1 : MonoBehaviour
- {
- void OnTriggerEnter2D(Collider2D Enemy)
- {
- SceneManager.LoadScene(2);
- }
- }
- Как я правильно понял, ты ещё не до конца научился правильно обращаться с классами и всем остальным, но это норма для новичка
- Суть твоей ошибки тут в том, что у тебя два класса выполняют одно и то же действие, но только лишь с небольшим различием.
- Самый лучший способ решения такой проблемы это задание в классе поля, допустим какое-то id, и использование его значения в методе:
- public class rotaProf : MonoBehaviour
- {
- public int id {private get; set;}
- void OnTriggerEnter2D(Collider2D Enemy)
- {
- SceneManager.LoadScene(id);
- }
- }
- Все что тебе останется это просто взять и задать ему какое-то значение через редактор в юньке или ещё каким-либо образом
- Аналогично с SceneSwap и SceneSwap1:
- public class SceneSwap : MonoBehaviour
- {
- private void OnGUI()
- {
- int xCenter = (Screen.width / 2);
- int yCenter = (Screen.height / 2);
- int width = 100;
- int height = 50;
- GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button"));
- fontSize.fontSize = 25;
- Scene scene = SceneManager.GetActiveScene();
- if (scene.name == "3")
- {
- // Show a button to allow scene2 to be switched to.
- if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Play!", fontSize))
- {
- SceneManager.LoadScene("1");
- }
- }
- else
- {
- // Show a button to allow scene1 to be returned to.
- if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Заново", fontSize))
- {
- SceneManager.LoadScene("1");
- }
- }
- }
- }
- public class SceneSwap1 : MonoBehaviour
- {
- private void OnGUI()
- {
- int xCenter = (Screen.width / 8);
- int yCenter = (Screen.height / 8);
- int width = 80;
- int height = 40;
- GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button"));
- fontSize.fontSize = 14;
- Scene scene = SceneManager.GetActiveScene();
- if (scene.name == "3")
- {
- // Show a button to allow scene2 to be switched to.
- if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Play!", fontSize))
- {
- SceneManager.LoadScene("1");
- }
- }
- else
- {
- // Show a button to allow scene1 to be returned to.
- if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Заново", fontSize))
- {
- SceneManager.LoadScene("1");
- }
- }
- }
- }
- Как тут можно заметить, разнятся только лишь две переменные: width и height, проделаем для них то же самое, что и для id в rotaProf:
- public class SceneSwap : MonoBehaviour
- {
- public buttonWidth { get; set; }
- public buttonHeight { get; set; }
- private void OnGUI()
- {
- int xCenter = (Screen.width / 2);
- int yCenter = (Screen.height / 2);
- GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button"));
- fontSize.fontSize = 14;
- Scene scene = SceneManager.GetActiveScene();
- if (scene.name == "3")
- {
- // Show a button to allow scene2 to be switched to.
- if (GUI.Button(new Rect(xCenter - buttonWidth / 2, yCenter - buttonHeight / 2, buttonWidth, buttonHeight), "Play!", fontSize))
- {
- SceneManager.LoadScene("1");
- }
- }
- else
- {
- // Show a button to allow scene1 to be returned to.
- if (GUI.Button(new Rect(xCenter - buttonWidth / 2, yCenter - buttonHeight / 2, buttonWidth, buttonHeight), "Заново", fontSize))
- {
- SceneManager.LoadScene("1");
- }
- }
- }
- }
- В целом если ещё и есть какие-то ошибки, то они скорее всего заключаются в том же, что я описал выше, поэтому не буду лишний раз повторяться.
- Скорее всего будут какие-то ошибки в коде с методами и функциями из юньки, но по ним ничего не могу сказать, ибо с юнити давно не работал
- Итак, что могу посоветовать:
- 1. Пункт про кодстайл. Прочитай книгу "Чистый код", она может быть чуток и устарела, но на примере Java тебе объяснят как правильно
- работать с кодом, оформлять его и т.д.
- Вот тут вроде бы рабочая ссылка
- https://download.blackball.lv/data/library/Chistyj_kod_-_Sozdanie_analiz_i_refaktoring_%282013%29.pdf
- 2. Читай книги. Да, это никому не интересно, но в программировании чтение книг это один из самых доступных и надежных путей для
- получения новых знаний
- 3. Разберись в ООП, т.е. это очень важная штука в программировании, по началу ты может быть и не будешь её так много использовать в
- проектах, но все это будет продолжаться до тех пор, пока ты не научишься мыслить абстракциями
- Материалы по ООП хорошие на метаните: ( https://metanit.com/sharp/tutorial/3.7.php )
- 4. Математика. Не знаю как тебе, но лично мне в классе 7-9 математика была не особо интересна, но в геймдеве она может пригодится и ещё
- как, поэтому не забивай на нее в школе. Если есть желание, советую интересоваться темами из матеши, которые связаны с геймдевом.
- Большинство из этих тем скорее всего будут из высшей математики, но ты можешь попробовать в них разобраться, они только по началу
- кажутся страшными и неподъемными
- Вот статья про геймдев и математику: https://proglib.io/p/math-for-game-development
- 5. Как можно больше практикуйся и тренируйся работать с алгоритмами
- На этом сайте, например, ты можешь тренироваться в решении всяких задач ( https://edabit.com/ )
Add Comment
Please, Sign In to add comment