Немного подушню.
В проекте у меня несколько канвасов. Для создания функции OnClick нужно перемещать сам конвас на кнопку, чтобы появились методы, которые вы накодили.
Эммммм… что? OnClick у Button'a позволяет вызвать публичные методы скормленного ему Object'a. Это необязательно должен быть именно Canvas. Да и вообще в идеале нужно подписываться и отписываться непосредственно в коде. Тогда если в игре что-нибудь отвалится можно будет быстро найти место возникновения бага, т.к. подписки и отписки будут находится в одном месте, а не будут разбросаны по кнопкам.
Здесь я столкнулся с одной проблемой — у меня лагала игра. Я не мог понять в чем проблема, но потом выяснил, что в Project Settings — Physics 2D стоит Fixed Update, а у меня все вызовы перемещения через Update, поэтому игра лагала, но не только.
Довольно странно, что из-за этого игра лагала. Но менять из-за этого FixedUpdate на Update в Physics2D… Вообще все просчёты физики, перемещения в том числе, выполняют именно в FixedUpdate для того, чтобы симуляция не зависела от FPS. FixedUpdate, в отличие от Update, вызывается фиксированное количество раз в секунду и из-за этого физика рассчитывается адекватно. Перемещения в Update не должны вызывать просадок FPS, вероятно дело в чём-то другом. Если бы я посмотрел весь код, то мог бы предположить почему игра лагала.
void Update()
{
if (cameraTransform.position.x >= 0)
{
transform.Translate(Vector2.right * speed * Time.deltaTime);
}
if (player.speed == 0)
{
speed = 0;
}
}
То есть слой «параллакса» будет перемещаться только если изначальная позиция камеры по «x» больше 0 и скорость игрока != 0? В игру не играл, но как понял — игра раннер, где персонаж бежит автоматически. Можно включать «слежение» параллакса за игроком в начале уровня и отключать в конце, либо при проигрыше. Если уровни маленькие, то можно тупо переключить режим отображения спрайта задника на «Tiled» и растянуть на всю длину уровня. Тогда следить вообще не надо будет.
Немного по стилистике кода. Названия классов, публичные поля, коих в идеале быть не должно, свойства, методы и прочее следует называть с заглавной буквы. Приватные же члены должны начинаться с "_" (например "_movementSpeed").
Ну и в конце субъективная вкусовщина. Прыжок. Лично мне кажется странным трогать гравитацию при расчётах прыжка. Гораздо удобнее вручную рассчитывать velocity у RigidBody. Например вот так:
private async UniTask UpdateAsync(CancellationToken token = default)
{
while (token.IsCancellationRequested == false)
{
if (_rigidbody.velocity.y < 0)
{
_rigidbody.velocity -= _gravityVector * Constants.FALL_MULTIPLIER * Time.fixedDeltaTime;
}
else if (_rigidbody.velocity.y > 0)
{
_rigidbody.velocity *= Constants.LINEAR_VELOCITY_SLOWDOWN_SPEED;
}
await UniTask.WaitForFixedUpdate();
}
}
И что по итогу? По итогу поздравляю с первым законченным проектом. Слайм выглядит мило, большинство популярных видосов по Unity стоит смотреть со скепсисом, не переставай пробовать и учиться и в скором времени у тебя начнут получаться потрясающие проекты. Удачи)