Unity 2d. Движение персонажа

Unity 2d. Движение персонажа

Как заставить персонажа двигаться в Unity 2d

В прошлой статье мы рассказывали вам как создать анимацию в 2d проекте Unity5. В этой статье мы продолжим и реализуем движение нашей «птицы» — персонажа при помощи компонента rigidbody 2d «физики».

На нашей сцене уже имеется заготовка персонажа с анимацией, добавим к ней компоненты Box Collider 2d и Rigidbody 2d и настроим компонент так как на скриншоте

rogibody2d

Далее создадим скрипт к примеру TransformPlayer с таким кодом:

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformPlayer : MonoBehaviour {

    private Transform _transform;
    private Rigidbody2D _rigibody;
    
    // Use this for initialization
	void Start () {
        _transform = GetComponent();
        _rigibody = GetComponent();

    }
	
	// Update is called once per frame
	void Update () {
       
        if (Input.GetKey(KeyCode.W) && this._transform.localPosition.y <= 5f)
        {
          
            _rigibody.gravityScale = -0.5f;
        }
        else {
            _rigibody.gravityScale = 0.5f;
        }


    }
}

В этом скрипте указано, что при нажатии на кнопку w значение гравитации у персонажа меняется, а при отпускании, клавиши значение восстанавливается, таким образом, персонажа всегда падать, если не нажимать кнопку w.

Далее, как токового движения вперед у нас не реализовано,  но симуляцию движения можно реализовать при помощи фоновых объектов.

Добавим на сцену спрайты земли и продублируем 4 раза, на каждый компонент вешаем те же компоненты  Box Collider 2d и Rigidbody 2d, создадим еще один скрипт TransformGround

ground

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformGround : MonoBehaviour {


    public Transform GameObjectCamera;



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

            this.gameObject.transform.localPosition = new Vector3(this.gameObject.transform.localPosition.x - 0.1f, this.gameObject.transform.localPosition.y, this.gameObject.transform.localPosition.z);

    }

    public void OnCollisionEnter2D(Collision2D collision) {
        if (collision.gameObject.tag == "barer") {
            this.transform.position = new Vector3(GameObjectCamera.transform.position.x, GameObjectCamera.transform.position.y, GameObjectCamera.transform.position.z);
        }
    }
}

В этом скрипте, в методе Update реализована функция постоянного движения объекта по оси х , но при столкновении этого объекта с другим, у которого тэг barer, нашему объекту присвоится другая позиция на сцене, таким образом наши 4 объекта земли будут зациклены в движении .

Теперь подробнее… Создадим на камере два пустых объекта, один разместим слева и добавим Box Collider 2d и Rigidbody 2d, так же присвоим ему тэг, который указали в скрипте barer, а другой справа. Примерно так…

gameobject 2d

На объектах «земли» укажем этот объект который справа.

Теперь можно поверить запустив игру

transformrigibodi

Птица управляется, движение  земли создает эффект движения птицы. В следующих уроках можно реализовать рандомное появление объектов на сцене и столкновение персонажа с ними. На это все удачных проектов.

 

На главную


Оставить Комментарий