유니티 심화

궁수의 전설

송현호 2023. 8. 20. 23:31
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField]
    private FloatingJoystick joystick;
    [SerializeField]
    private float moveSpeed;
    private Rigidbody2D rBody2D;
    [SerializeField]
    private Bullet bullet;
    GameObject closestEnemy = null;
    float closestDistance = Mathf.Infinity;

    private bool attackState;

    private float delayTime;
    
    // Start is called before the first frame update
    void Start()
    {
        rBody2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");

        foreach (GameObject enemy in enemies)
        {
            float distanceToEnemy = Vector3.Distance(this.transform.position, enemy.transform.position);
            if (distanceToEnemy < closestDistance && closestEnemy != enemy)
            {
                closestEnemy = enemy;
                closestDistance = distanceToEnemy;
            }
        }

        float h = joystick.Direction.x;
        float v = joystick.Direction.y;
        delayTime += Time.deltaTime;

        this.rBody2D.MovePosition(this.transform.position + (new Vector3(h,v,0) * moveSpeed * Time.deltaTime));
        if (closestEnemy != null)
        {
            if (new Vector2(h,v) == Vector2.zero)
            {
                if (delayTime > 0.5f)
                {
                    delayTime = 0;
                    LaunchProjectile();
                }
            }
        }

        Debug.Log(delayTime);
        
    }
    

    public void LaunchProjectile()
    {
        Bullet bu = Instantiate(bullet);
        bu.transform.position = this.transform.position;
    }


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

public class Bullet : MonoBehaviour
{
    private Rigidbody2D rb;
    GameObject closestEnemy = null;
    float closestDistance = Mathf.Infinity;
    private float moveSpeed = 1.0f;
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");

        foreach (GameObject enemy in enemies)
        {
            float distanceToEnemy = Vector3.Distance(this.transform.position, enemy.transform.position);
            if (distanceToEnemy < closestDistance && closestEnemy != enemy)
            {
                closestEnemy = enemy;
                closestDistance = distanceToEnemy;
            }
        }

        Vector2 dir = (this.closestEnemy.transform.position - this.transform.position).normalized;
        this.transform.Translate(dir * moveSpeed * Time.deltaTime);
    }

    public GameObject IsEnemy()
    {
        return closestEnemy;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag == "Bullet")
        {
            Destroy(collision.gameObject);
        }
    }
}