Найти тему

Управление 2D персонажем в Unity

Йоу дарова ребят! Сегодня будет делать управление персонажем!

Сразу вставлю скрипт а потом буду объяснять.

///////////////////////////////////////////////////////////////////

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class PlayerController : MonoBehaviour

{

public float speed = 4f;

public float jumpForce;

private float moveInput;

private Rigidbody2D rb;

private bool FacingRight;

private bool isGrounded;

public Transform feetPos;

public float checkRadius;

public LayerMask whatIsGround;

private void Start()

{

rb = GetComponent<Rigidbody2D>();

}

private void FixedUpdate()

{

moveInput = Input.GetAxis("Horizontal");

rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);

if (FacingRight == false && moveInput < 0)

{

flip();

}

else if (FacingRight == true && moveInput > 0)

{

flip();

}

}

private void Update()

{

isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);

if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))

{

rb.velocity = Vector2.up * jumpForce;

}

}

void flip()

{

FacingRight = !FacingRight;

Vector3 Scaler = transform.localScale;

Scaler.x *= -1;

transform.localScale = Scaler;

}

}

///////////////////////////////////////////////////////////////////////

В этих строчках:

public float speed = 4f;

public float jumpForce;

private float moveInput;

private Rigidbody2D rb;

private bool FacingRight;

private bool isGrounded;

public Transform feetPos;

public float checkRadius;

public LayerMask whatIsGround;

Мы создаём все переменные и так далее.
Мы создаём все переменные и так далее.

///////////////////////////////////////////////////////////////////////////////

Тут мы даём компонент RigidBody2D к нашей переменной "rb":

-3

private void Start()

{

rb = GetComponent<Rigidbody2D>();

}

/////////////////////////////////////////////////////////////////////////////

В этом методе мы создаём само движение:

-4

private void FixedUpdate()

{

moveInput = Input.GetAxis("Horizontal");

rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);

if (FacingRight == false && moveInput < 0)

{

flip();

}

else if (FacingRight == true && moveInput > 0)

{

flip();

}

}

private void Update()

{

isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);

if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))

{

rb.velocity = Vector2.up * jumpForce;

}

}

/////////////////////////////////////////////////////////////////////////////

Тут мы создаём метод "Flip" То есть если мы идём вправо то и персонаж смотрит вправо а если в лево то влево

-5

void flip()

{

FacingRight = !FacingRight;

Vector3 Scaler = transform.localScale;

Scaler.x *= -1;

transform.localScale = Scaler;

}

////////////////////////////////////////////////////////////////////////////////////////

Вот и всё! Надеюсь я тебе хоть немного помог, удачи в создании игр! (Ну если понравилось то можешь и подписаться=) )!

Пока пока, увидимся в следующих постах, удачи!