помогите пожалуста, я новичек юнити и часть кода беру из интернета и у меня проблема когда я делаю ривок или пригаю с колайдера которий стоит под наклоном меня довольно сильно подбрасивает в верх.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerMove : MonoBehaviour // - Вместо «PlayerMove» должно быть имя файла скрипта
{
//------- Функция/метод, выполняемая при запуске игры ---------
public Rigidbody2D rb;
public Animator anim;
public GameObject keyIcon;
void Start()
{
rb = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
//-v- Для автоматического присваивания в переменную, радиуса коллайдера объекта «GroundCheck»
GroundCheckRadius = GroundCheck.GetComponent<CircleCollider2D>().radius;
}
//------- Функция/метод, выполняемая каждый кадр в игре ---------
void Update()
{
Walk();
Reflect();
Jump();
CheckingGround();
Lunge();
}
//------- Функция/метод для перемещения персонажа по горизонтали ---------
public Vector2 moveVector;
public int speed = 3;
void Walk()
{
moveVector.x = Input.GetAxisRaw("Horizontal");
rb.velocity = new Vector2(moveVector.x * speed, rb.velocity.y);
anim.SetFloat("moveX", Mathf.Abs(moveVector.x));
}
//------- Функция/метод для отражения персонажа по горизонтали ---------
public bool faceRight = true;
private bool keyButtonPushed;
void Reflect()
{
if ((moveVector.x > 0 && !faceRight) || (moveVector.x < 0 && faceRight))
{
transform.localScale *= new Vector2(-1, 1);
faceRight = !faceRight;
}
}
//------- Функция/метод для прыжка ---------
public int jumpForce = 10;
void Jump()
{
if (onGround && Input.GetKeyDown(KeyCode.Space))
{
anim.StopPlayback();
anim.Play("jump");
rb.velocity = new Vector2(0, jumpForce);
}
}
//------- Функция/метод для обнаружения земли ---------
public bool onGround;
public LayerMask Ground;
public Transform GroundCheck;
private float GroundCheckRadius;
void CheckingGround()
{
onGround = Physics2D.OverlapCircle(GroundCheck.position, GroundCheckRadius, Ground);
anim.SetBool("onGround", onGround);
}
//-----------------------------------------------------------------
public int lungeImput = 5000;
void Lunge()
{
if (Input.GetKeyDown(KeyCode.LeftControl) && !lockLunge)
{
lockLunge = true;
Invoke("LungeLock", 2f);
anim.StopPlayback();
anim.Play("lunge");
rb.velocity = new Vector2(0, 0);
if (!faceRight) { rb.AddForce(Vector2.left * lungeImput); }
else { rb.AddForce(Vector2.right * lungeImput); }
}
}
private bool lockLunge = false;
void LungeLock()
{
lockLunge = false;
}
void OnTriggerEnter2D(Collider2D other)
{
if(other.tag == "Respawn")
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
else if (other.CompareTag("key"))
{
keyIcon.SetActive(true);
Destroy(other.gameObject);
}
}
public void OnKeyButtonDown()
{
keyButtonPushed = !keyButtonPushed;
}
private void OnTriggerStay2D(Collider2D other)
{
if(other.CompareTag("wall") && keyButtonPushed && keyIcon.activeInHierarchy)
{
keyIcon.SetActive(false);
other.gameObject.SetActive(false);
keyButtonPushed = false;
}
}
}