Unity 2d Как создать кликер

Простой кликер-платформер на движке Unity

Совсем недавно, на нашем сайте, было опубликовано несколько статей о том, как создать анимацию и о том, как заставить двигаться персонажа, при создании 2d игры в Unity. В этой статье мы хотим показать вам как на основе тех знаний и  на основе новых, которые мы получим в ходе изучения этой статьи, создать простой 2d кликер-платформер. Итак, на основе этих статей: Unity 5. 2d Анимация Unity 2d. Движение персонажа и использования готовых 2d спрайтов из этой статьи Unity 2d. Спрайты для 2d игр Мы уже подготовили готовую сцену с работоспособным персонажемpers2d Ну если разобрать более детально, то :
    • на игровой объект (GameObject) помещаем компонент Sprite Renderer, где в поле Sprite помещаем нужный нам спрайт (изображение)
    • добавляем компоненты Collider 2d, Box или Circle в зависимости от строения изображения, можно несколько
    •  компонент Rigidbody 2D обязательно, так как он будет отвечать за движение персонажа
    • компонент Animator с нужной нам анимацией
    • ну и несколько скриптов, первый скрипт отвечает за перемещение персонажа по сцена
    •     public float WalkSpeed = 2;
         
          private MoveState _moveState = MoveState.Idle;
          private DirectionState _directionalState = DirectionState.Right;
          private Transform _transform;
          private Rigidbody2D _rigidbody;
          private Animator _animatorController;
          private float _walkTime = 0, _walkCooldown = 0.2f;
      
          private void Start()
          {
              _transform = GetComponent();
              _rigidbody = GetComponent();
              _animatorController = GetComponent();
              _directionalState = transform.localScale.x > 0 ? DirectionState.Right : DirectionState.Left;
      
          }
      
          public void MoveRight() {
                  _moveState = MoveState.Walk;
                  if (_directionalState == DirectionState.Left) {
                      transform.localScale = new Vector3(-_transform.localScale.x, _transform.localScale.y, _transform.localScale.z);
                      _directionalState = DirectionState.Right;
      
                  }
                  _walkTime = _walkCooldown;
                  _animatorController.Play("Walk");
              
          }
      
          public void MoveLeft()
          {
      
                  _moveState = MoveState.Walk;
                  if (_directionalState == DirectionState.Right)
                  {
                      transform.localScale = new Vector3(-_transform.localScale.x, _transform.localScale.y, _transform.localScale.z);
                      _directionalState = DirectionState.Left;
      
                  }
                  _walkTime = _walkCooldown;
                  _animatorController.Play("Walk");
              
          }
      
          private void Update()
          {
      
              
               if (_moveState == MoveState.Walk) {
                  _rigidbody.velocity = ((_directionalState == DirectionState.Right ? Vector2.right : -Vector2.right) * WalkSpeed * Time.deltaTime);
                  _walkTime -= Time.deltaTime;
                  if (_walkTime <= 0) {
                      Idle();
                  }
              }
          }
      
          void Idle() {
              _moveState = MoveState.Idle;
              _animatorController.Play("Idle");
          }
          enum MoveState {
              Idle,
              Walk,
      
          }
      
          enum DirectionState {
              Right,
              Left
          }
    • Ну и второй скрипт, который будет отвечать за назначение клавиш управления персонажем
    •  private Player Player;
          
          // Use this for initialization
      	void Start () {
              Player = Player == null ? GetComponent() : Player;
              if (Player == null) {
      
      
              }
      	}
      
          // Update is called once per frame
          void Update() {
              if (Player != null) {
      
                  if (Input.GetKey(KeyCode.D)) {
                      Player.MoveRight();
                  }
      
                  if (Input.GetKey(KeyCode.A)) {
                      Player.MoveLeft();
                  }
      
      
              }
      	}
      
          public void WailkRight() {
              Player.MoveRight();
          }
      
          public void WalkLeft() {
              Player.MoveLeft();
          }
Собственно, при наличии вышеперечисленных компонентов можно создать управляемый объект на сцене. Далее, на создании самой сцены мы останавливаться не будем, она может выглядеть на ваш вкус и цвет, ну и если вы это читаете, то наверняка умеете переносить игровые объекты на сцену. А вот на самих игровых объектах остановимся поподробней. Суть игры - пройти уровень не потеряв жизни, собственно не умереть, в этом нам помогут вспомогательные объекты, которые мы разместим на сцене и помешают различные преграды. Разместим на сцене поваленное дерево, которое помешает пройти нашему персонажу и от которого нужно избавится, как вариант - разрубить. brevno2d Поместим дерево и топор, который поможет нам пройти. На них поместим объекты Box Collider2d и обработчик  Event Trigger (про это больше упоминать не будем, эти компоненты будут присутствовать на всех последующих игровых объектах ) Создадим простой скрипт, где при нажатии мышкой на объект топор он будет как-бы в руке и при нажатии мышкой на дерево мы будем проверять, если топор в руке то удаляем дерево, если нет .... то нет.
public GameObject rukaobject;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    public void OnClick()
    {
        if (this.gameObject.tag == "Topor")
        {
            rukaobject = this.gameObject;

        }

        if (this.gameObject.tag == "DerevoPolom")
        {

            if (rukaobject == GameObject.FindGameObjectWithTag("Topor"))
            {
                Destroy(gameObject);

            }
        }
    }
Теперь вернемся к объектам на сцене (топор и дерево), поместим этот скрипт на них, в компоненте Event Trigger создадим новый тип Pointer Click и укажем эти объекты в этом типе (каждый в своем), так же укажем скрипт и функцию OnClick. Ну и не забудьте присвоить тэги объектам, которые указали в скрипте. У меня немного доработано, но смысл тот же: Подходим к дереву, но оно не дает нам пройти, нажимаем на него ничего не происходит derevo2d находи топор, берем его topor2d и снова к дереву, дерево исчезает styk2d Первая преграда пройдена, далее реализуем столкновение персонажа с игровыми объектами, например, поместим на сцену паука и при столкновении с ним персонажа будет отбрасывать назад. pauk2d Создадим еще один скрипт в котором будем использовать функцию обработки столкновений коллайдеров
 private void OnTriggerEnter2D(Collider2D other)
    {

        

            if (other.tag == "Pauk")
            {

                this.gameObject.GetComponent().MovePosition(Vector2.left * 10 * Time.deltaTime);

            }

    }
Соответственно, на паука вешаем Box Collider с галочкой isTrigger и указываем тэг, который указали в скрипте. pauk2d На основе функции OnClick() и OnTriggerEnter2D(Collider2D other) можно и дальше размещать объекты на сцене, которые будут преграждать путь или будут помогать персонажу пройти уровень. Итак, я немного доработал и в итоге вы можете посмотреть на видео что может получится.

На этом все, удачных проектов)!
Похожие статьи
Unity 2d. Спрайты для 2d игр
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5

561 просмотров всего, 2 просмотров сегодня

0
#2D
Подробнее
Как заставить персонажа двигаться в Unity 2d
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5

1,681 просмотров всего, 1 просмотров сегодня

0
#Unity 5#2D
Подробнее
2d анимация в unity
2 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 5

713 просмотров всего, 2 просмотров сегодня

0
#Unity 5#2D
Подробнее
Как добавить видео в Unity 5
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5

2,253 просмотров всего, 2 просмотров сегодня

0
#Unity 5
Подробнее
Добавить комментарий
Оцените статью
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Ваш e-mail не будет опубликован.