Головна‎ > ‎Unity‎ > ‎2D‎ > ‎Гравець 2D‎ > ‎

Вид зверху + обертання + постріл

Герой має бути всередині пустого об'єкту
Герой дивиться вправо (якщо ні - покласти пустий об'єкт і повернути на 90)
Куля дивиться вправо



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

public class Move : MonoBehaviour
{
    public GameObject obj;  
    public GameObject bullet;
    public GameObject bulPos;
    public float moveSpeed = 6.0f;
    public float bulletSpeed = 100.0f;
    Rigidbody2D rb;
    Vector2 movement;

    int direction = 0;

    void Start()
    {
         rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        movement.x = Input.GetAxisRaw("Horizontal");
        movement.y = Input.GetAxisRaw("Vertical");
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject go = Instantiate(bullet, bulPos.transform.position, Quaternion.Euler(0, 0, 0)) as GameObject;
               Destroy(go, 5f);

            if (movement.y > 0)
            {
                go.transform.rotation = Quaternion.Euler(0, 0, 90);
                go.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 5) * bulletSpeed);
            }
            if (movement.y < 0)
            {
                go.transform.rotation = Quaternion.Euler(0, 0, -90);
                go.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -5) * bulletSpeed);
            }
            if (movement.x > 0)
            {
                go.transform.rotation = Quaternion.Euler(0, 0, 0);
                go.GetComponent<Rigidbody2D>().AddForce(new Vector2(5, 0) * bulletSpeed);
            }
            if (movement.x < 0)
            {
                go.transform.rotation = Quaternion.Euler(0, 0, 180);
                go.GetComponent<Rigidbody2D>().AddForce(new Vector2(-5, 0) * bulletSpeed);
            }
            if (movement.x == 0 && movement.y == 0)
            {
                if (direction==0)
                {
                    go.transform.rotation = Quaternion.Euler(0, 0, 0);
                    go.GetComponent<Rigidbody2D>().AddForce(new Vector2(5, 0) * bulletSpeed);
                }
                if (direction == 1)
                {
                    go.transform.rotation = Quaternion.Euler(0, 0, 180);
                    go.GetComponent<Rigidbody2D>().AddForce(new Vector2(-5, 0) * bulletSpeed);
                }
                if (direction == 2)
                {
                    go.transform.rotation = Quaternion.Euler(0, 0, 90);
                    go.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 5) * bulletSpeed);
                }
                if (direction == 3)
                {
                    go.transform.rotation = Quaternion.Euler(0, 0, -90);
                    go.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -5) * bulletSpeed);
                }
            }
        }
   
        if (movement.y>0)
        {
            direction = 2;
            obj.transform.rotation = Quaternion.Euler(0, 0, 90);
        }

        if (movement.y < 0)
        {
            direction = 3;
            obj.transform.rotation = Quaternion.Euler(0, 0, -90);
        }
        if (movement.x > 0)
        {
            direction = 0;
            obj.transform.rotation = Quaternion.Euler(0, 0, 0);
        }
        if (movement.x < 0)
        {
            direction = 1;
            obj.transform.rotation = Quaternion.Euler(0, 0, 180);
        }
    }

    void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
    }
}