Skip to content

Instantly share code, notes, and snippets.

@HolyMonkey
Forked from Priler/CubeController.cs
Last active August 7, 2021 04:22
Show Gist options
  • Save HolyMonkey/910a23147ef6a41e3aaffa278c2123f3 to your computer and use it in GitHub Desktop.
Save HolyMonkey/910a23147ef6a41e3aaffa278c2123f3 to your computer and use it in GitHub Desktop.
JumpManager.cs
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);
}
}
@EntaltsevSN
Copy link

Строковой литерал не лучше. Даже хуже, ведь нужно постоянно помнить как его писать.

Ну да, тяжело запомнить как пишется английское слово Jump.

Они говорят что можно добавить префиксы "Is", "Can", or "Has", если они имеют силу.

Перечитай мой коммент, чел.

Какую смысловую нагрузку добавит is к названию jumping?

Судя по тому, что ты пишешь комментарии в коде на русском языке (что само по себе bad practice).
Могу сделать предположение, что уровень твоего английского не позволяет тебе понять смысловую нагрузку.
Прикрепляю скриншот, чтобы было понятнее - а про глагол "to be" уже сам потом почитаешь.

is boolean

Да и вообще, получается Jump._jumping :]
Сам себе противоречишь.
Может тогда уже Jump.isGrounded или там Jump.isInAir.

Т.е. ты себя оправдываешь с помощью гугл переводчика, который слово jumping не правильно переводит? Может обратимся к знаниям английского, а не переводчику?
Для особо одарённого англоговорящего, напоминаю: jimp - прыгать, jumping - прыжок, а все производные, is, can, has - условные выражения, которые переводчик никогда правильно не переведёт, так как не понимает.

Го учить английский, мальчишка

@enikey87
Copy link

enikey87 commented Aug 4, 2021

Имхо ебейший оверинжиринг.

@sunnamed434
Copy link

sunnamed434 commented Aug 4, 2021

Роман, я думаю стоит остановиться на видео уроках по юнити, хауди многому научился, пора начать жесткое, давай английский по 300 bucks, ждем курс!

@HolyMonkey

@sappChak
Copy link

sappChak commented Aug 6, 2021

Форчанский появился, ща взглянем )

  1. TryGetComponent на твоем месте я бы по рукам бил за любое использование GetComponent вне Start/Awake.
    И кстати, проверка по слоям работает быстрее этого варианта (примерно в 2 раза).
  2. KeyCode.Space - хардкод, круто )
    Чтобы поменять инпут - придется менять скрипт, браво!
    А это, игроку чтоб поменять бинд - надо декомпилировать игру? :]
    А вообще уже давно есть New Input System.
  3. AddForce в Update, тоже надо по рукам бить за такое.
    Он то может и выполнится нормально, но там очень много но.
    Вообще это Bad Practice писать так код.
  4. Булевы переменные лучше именовать с префиксами "is", "has", "can" (в данном случае оно "adds value" как раз, если что)
    Это рекомендация Microsoft Naming Convention
  5. _self. Конечно это не Python, а C#. Но здесь есть ключевое слово this. Мягко говоря, это не нарушение. Но имхо условный _rb смотрелся бы лучше и был более понятным.
  6. Файлик контроллера лучше называть с постфиксом Controller.
    Например, JumpController, MovementController и т.д.
    Почитай, дружок пирожок.

Какой еще n@xui "дружок пирожок", он же вроде не твоя ежедневная еда

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment