-
-
Save HolyMonkey/910a23147ef6a41e3aaffa278c2123f3 to your computer and use it in GitHub Desktop.
using UnityEngine; | |
//Внезапно хауди списывая код с уроков забыл послушать что он означал | |
//В конечном итоге у него получился просто постоянный скейлинг гравитации | |
[RequireComponent(typeof(Rigidbody))] | |
class GravityScale : MonoBehaviour | |
{ | |
[SerializeField] private float _scale = 10f; | |
private Rigidbody _self; | |
private void Awake() | |
{ | |
_self = transform.GetComponent<Rigidbody>(); | |
} | |
private void FixedUpdate() | |
{ | |
_self.velocity += Physics.gravity * (_scale - 1) * Time.deltaTime; | |
} | |
} |
using UnityEngine; | |
class Ground : MonoBehaviour { } |
using UnityEngine; | |
//Если делаешь GetComponent не забывай про RequireComponent | |
[RequireComponent(typeof(Rigidbody))] | |
public class Jump : MonoBehaviour | |
{ | |
[SerializeField] private float _force; //Jump - Force. А не Jump.JumpForce. | |
private Rigidbody _self; | |
private bool _jumping; | |
private void Awake() | |
{ | |
_self = transform.GetComponent<Rigidbody>(); | |
} | |
private void Update() | |
{ | |
//нет ничего страшного в придание импульса в Update, применится он всё равно в FixedUpdate | |
if (Input.GetKeyDown(KeyCode.Space)) //Использовать строквые литералы в коде плохая идея | |
TryJump(); | |
} | |
private void OnCollisionEnter(Collision collision) | |
{ | |
//В целом идея проверять нахождение на земле через коллизии способ плохой | |
//Но реализовать его можно гораздо лучше, например сделав проверку по наличию компонента а не тега | |
if (collision.gameObject.TryGetComponent(out Ground ground)) | |
_jumping = false; | |
} | |
private void TryJump() | |
{ | |
if (_jumping) | |
return; | |
_self.AddForce(Vector3.up * _force, ForceMode.Impulse); | |
_jumping = true; | |
} | |
} |
using UnityEngine; | |
[RequireComponent(typeof(Rigidbody))] | |
class Movement : MonoBehaviour | |
{ | |
[SerializeField] private float _unitsPerSecond = 15f; | |
private Rigidbody _self; | |
private void Awake() | |
{ | |
_self = transform.GetComponent<Rigidbody>(); | |
} | |
private void FixedUpdate() | |
{ | |
Vector3 offset = transform.forward * _unitsPerSecond * Time.deltaTime; | |
_self.MovePosition(transform.position + offset); | |
} | |
} |
Отличный пример того, что могут сделать с монолитным говном простая декомпозиция и хороший нейминг.
Да, в 10 раз лучше выглядит.
Только в FixedUpdate вместо Time.deltaTime надо использовать Time.fixedDeltaTime
Только в FixedUpdate вместо Time.deltaTime надо использовать Time.fixedDeltaTime
Нет, не нужно. Во время обновления цикла FixedUpdate вместо Time.deltaTime движок подставляет Time.fixedDeltaTime
Только в FixedUpdate вместо Time.deltaTime надо использовать Time.fixedDeltaTime
Нет, не нужно. Во время обновления цикла FixedUpdate вместо Time.deltaTime движок подставляет Time.fixedDeltaTime
Спасибо! Будем знать :)
Только в FixedUpdate вместо Time.deltaTime надо использовать Time.fixedDeltaTime
Нет, не нужно. Во время обновления цикла FixedUpdate вместо Time.deltaTime движок подставляет Time.fixedDeltaTime
Не слышал про подобное, можно пруфы?)
Только в FixedUpdate вместо Time.deltaTime надо использовать Time.fixedDeltaTime
Нет, не нужно. Во время обновления цикла FixedUpdate вместо Time.deltaTime движок подставляет Time.fixedDeltaTime
Не слышал про подобное, можно пруфы?)
https://docs.unity3d.com/2018.4/Documentation/ScriptReference/Time-fixedDeltaTime.html
Только выбери версию 2018.4. В новой документации почему-то убрано пояснение.
Еще я проверил в версии 2021 и действительно Time.deltaTime и Time.fixedDeltaTime в FixedUpdate выдает одно и то же время.
Форчанский появился, ща взглянем )
-
TryGetComponent на твоем месте я бы по рукам бил за любое использование GetComponent вне Start/Awake.
И кстати, проверка по слоям работает быстрее этого варианта (примерно в 2 раза). -
KeyCode.Space - хардкод, круто )
Чтобы поменять инпут - придется менять скрипт, браво!
А это, игроку чтоб поменять бинд - надо декомпилировать игру? :]
А вообще уже давно есть New Input System. -
AddForce в Update, тоже надо по рукам бить за такое.
Он то может и выполнится нормально, но там очень много но.
Вообще это Bad Practice писать так код. -
Булевы переменные лучше именовать с префиксами "is", "has", "can" (в данном случае оно "adds value" как раз, если что)
Это рекомендация Microsoft Naming Convention -
_self. Конечно это не Python, а C#. Но здесь есть ключевое слово this. Мягко говоря, это не нарушение. Но имхо условный _rb смотрелся бы лучше и был более понятным.
-
Файлик контроллера лучше называть с постфиксом Controller.
Например, JumpController, MovementController и т.д.
Почитай, дружок пирожок.
Только в FixedUpdate вместо Time.deltaTime надо использовать Time.fixedDeltaTime
Нет, не нужно. Во время обновления цикла FixedUpdate вместо Time.deltaTime движок подставляет Time.fixedDeltaTime
Не слышал про подобное, можно пруфы?)
https://docs.unity3d.com/2018.4/Documentation/ScriptReference/Time-fixedDeltaTime.html
Только выбери версию 2018.4. В новой документации почему-то убрано пояснение.
Еще я проверил в версии 2021 и действительно Time.deltaTime и Time.fixedDeltaTime в FixedUpdate выдает одно и то же время.
Видимо из-за timescale это было. В ранних версиях небыло fixedUnscaledDeltaTime
- TryGetComponent на твоем месте я бы по рукам бил за любое использование GetComponent вне Start/Awake.
И кстати, проверка по слоям работает быстрее этого варианта (примерно в 2 раза).
Не актуально в данной ситуации. Разницы в производительности не будет (оно появляется только в случаях вызова несколько сотен тысяч раз за обновление). TryGetComponent намного удобней использовать если потом нужно производить какую либо логию со столкнувшимся объектом.
- KeyCode.Space - хардкод, круто )
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Лучше вывести в константу значение литерала и потом использовать её.
- AddForce в Update, тоже надо по рукам бить за такое.
На этот случай распространяется НО. Плохо вызывать физические функции слишком много раз (не важно в Update или FixedUpdate). Так как Update вызывается много раз за секунду (в зависимости от фреймрейта), то это лишние вызовы физики.
- Булевы переменные лучше именовать с префиксами "is", "has", "can".
Это рекомендация Microsoft Naming Convention
Там написано:
DO name Boolean properties with an affirmative phrase (CanSeek instead of CantSeek). Optionally, you can also prefix Boolean properties with "Is", "Can", or "Has", but only where it adds value.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Форчанский появился, ща взглянем )
- TryGetComponent на твоем месте я бы по рукам бил за любое использование GetComponent вне Start/Awake.
И кстати, проверка по слоям работает быстрее этого варианта (примерно в 2 раза).- KeyCode.Space - хардкод, круто )
Чтобы поменять инпут - придется менять скрипт, браво!
А это, игроку чтоб поменять бинд - надо декомпилировать игру? :]
А вообще уже давно есть New Input System.- AddForce в Update, тоже надо по рукам бить за такое.
Он то может и выполнится нормально, но там очень много но.
Вообще это Bad Practice писать так код.- Булевы переменные лучше именовать с префиксами "is", "has", "can" (в данном случае оно "adds value" как раз, если что)
Это рекомендация Microsoft Naming Convention- _self. Конечно это не Python, а C#. Но здесь есть ключевое слово this. Мягко говоря, это не нарушение. Но имхо условный _rb смотрелся бы лучше и был более понятным.
- Что _self что _rb полная херня. Оба не понятно что обозначают. Rigid Body имеет не такое длинное название чтобы его не написать как _rigidBody.
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Ну да, тяжело запомнить как пишется английское слово Jump.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Перечитай мой коммент, чел.
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Ну да, тяжело запомнить как пишется английское слово Jump.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Перечитай мой коммент, чел.
Какую смысловую нагрузку добавит is к названию jumping?
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Ну да, тяжело запомнить как пишется английское слово Jump.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Перечитай мой коммент, чел.
Целые научные работы пишутся про опечатки в коде а тема статического анализа одна из важнейших в программирование.
Но к чему это, если ты точно никогда не ошибёшься. ;)
- AddForce в Update, тоже надо по рукам бить за такое.
Он то может и выполнится нормально, но там очень много но.
Вообще это Bad Practice писать так код.
А как правильно реализовать данный пункт?
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Ну да, тяжело запомнить как пишется английское слово Jump.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Перечитай мой коммент, чел.
Какую смысловую нагрузку добавит is к названию jumping?
Судя по тому, что ты пишешь комментарии в коде на русском языке (что само по себе bad practice).
Могу сделать предположение, что уровень твоего английского не позволяет тебе понять смысловую нагрузку.
Прикрепляю скриншот, чтобы было понятнее - а про глагол "to be" уже сам потом почитаешь.
Да и вообще, получается Jump._jumping :]
Сам себе противоречишь.
Может тогда уже Jump.isGrounded или там Jump.isInAir.
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Ну да, тяжело запомнить как пишется английское слово Jump.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Перечитай мой коммент, чел.
Какую смысловую нагрузку добавит is к названию jumping?
Судя по тому, что ты пишешь комментарии в коде на русском языке (что само по себе bad practice).
Могу сделать предположение, что уровень твоего английского не позволяет тебе понять смысловую нагрузку.
Прикрепляю скриншот, чтобы было понятнее - а про глагол "to be" уже сам потом почитаешь.
У меня на русском, для русскоязычной аудитории, комментарии в тысячу раз информативней твоего акынского «что вижу о том и пою». «Это функция такая-то».
Иди скобки у себя для начало выравни, хоть на колхозника перестанешь смахивать. ;)
В Гугл транслейту ещё хорошо бы почитать правила английского, например про образование герундиев.
В С# нет общего правила что мы обязательно должны использовать Is, даже наоборот в правилах по Event оно отбрасывается как излишнее.
Например CoinsChanging а не CoinsIsChanging
Также если мы проведём исследование C# Source Reference мы не получим явного ответа, на эту тему я кстати писал статью. ;)
К однозначным выводам прийти не удалось, по этому в этом плане все должны договариваться локально при желание.
Да и вообще, получается Jump._jumping :]
Сам себе противоречишь.
Может тогда уже Jump.isGrounded или там Jump.isInAir.
Как ты любишь ломать предметную терминологию. К сожалению да, Jumping я потащил в след за твоим корявым решение проверки заземления по OnCollisionEnter, отдельный компонент с состояние заземленности мне нравится действительно больше.
Давай отойдём от возвышенного скобочко-дрочьства и поговорим о твоей реализации бани хопа. Как это работает?
Форчанский появился, ща взглянем )
- TryGetComponent на твоем месте я бы по рукам бил за любое использование GetComponent вне Start/Awake.
И кстати, проверка по слоям работает быстрее этого варианта (примерно в 2 раза).- KeyCode.Space - хардкод, круто )
Чтобы поменять инпут - придется менять скрипт, браво!
А это, игроку чтоб поменять бинд - надо декомпилировать игру? :]
А вообще уже давно есть New Input System.- AddForce в Update, тоже надо по рукам бить за такое.
Он то может и выполнится нормально, но там очень много но.
Вообще это Bad Practice писать так код.- Булевы переменные лучше именовать с префиксами "is", "has", "can" (в данном случае оно "adds value" как раз, если что)
Это рекомендация Microsoft Naming Convention- _self. Конечно это не Python, а C#. Но здесь есть ключевое слово this. Мягко говоря, это не нарушение. Но имхо условный _rb смотрелся бы лучше и был более понятным.
- Файлик контроллера лучше называть с постфиксом Controller.
Например, JumpController, MovementController и т.д.
Почитай, дружок пирожок.
Нет.
Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.
Ну да, тяжело запомнить как пишется английское слово Jump.
Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.
Перечитай мой коммент, чел.
Какую смысловую нагрузку добавит is к названию jumping?
Судя по тому, что ты пишешь комментарии в коде на русском языке (что само по себе bad practice).
Могу сделать предположение, что уровень твоего английского не позволяет тебе понять смысловую нагрузку.
Прикрепляю скриншот, чтобы было понятнее - а про глагол "to be" уже сам потом почитаешь.Да и вообще, получается Jump._jumping :]
Сам себе противоречишь.
Может тогда уже Jump.isGrounded или там Jump.isInAir.
Т.е. ты себя оправдываешь с помощью гугл переводчика, который слово jumping не правильно переводит? Может обратимся к знаниям английского, а не переводчику?
Для особо одарённого англоговорящего, напоминаю: jimp - прыгать, jumping - прыжок, а все производные, is, can, has - условные выражения, которые переводчик никогда правильно не переведёт, так как не понимает.
Го учить английский, мальчишка
Имхо ебейший оверинжиринг.
Роман, я думаю стоит остановиться на видео уроках по юнити, хауди многому научился, пора начать жесткое, давай английский по 300 bucks, ждем курс!
Форчанский появился, ща взглянем )
- TryGetComponent на твоем месте я бы по рукам бил за любое использование GetComponent вне Start/Awake.
И кстати, проверка по слоям работает быстрее этого варианта (примерно в 2 раза).- KeyCode.Space - хардкод, круто )
Чтобы поменять инпут - придется менять скрипт, браво!
А это, игроку чтоб поменять бинд - надо декомпилировать игру? :]
А вообще уже давно есть New Input System.- AddForce в Update, тоже надо по рукам бить за такое.
Он то может и выполнится нормально, но там очень много но.
Вообще это Bad Practice писать так код.- Булевы переменные лучше именовать с префиксами "is", "has", "can" (в данном случае оно "adds value" как раз, если что)
Это рекомендация Microsoft Naming Convention- _self. Конечно это не Python, а C#. Но здесь есть ключевое слово this. Мягко говоря, это не нарушение. Но имхо условный _rb смотрелся бы лучше и был более понятным.
- Файлик контроллера лучше называть с постфиксом Controller.
Например, JumpController, MovementController и т.д.
Почитай, дружок пирожок.
Какой еще n@xui "дружок пирожок", он же вроде не твоя ежедневная еда
Все вроде хорошо, но наверное стоило бы объяснить что только в данной ситуации AddForce в update работает как должен. Если необходимо будет сделать прыжок например в зависимости от того как долго он удерживается, то такое не покатит.