1. 실행 이미지

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

public class SpaceShipController : MonoBehaviour
{
    int speed = 5; // 스피드
    [SerializeField] GameObject bulletPrefab;
    [SerializeField] Transform shootPosition;
    private Animator anim;


    private enum State
    {
        Idle, Left, Right
    }

    private void Start()
    {
        anim = GetComponent<Animator>();
        StartCoroutine("CoMove");
    }

    void Update()
    {
        // 스페이스바를 누를 때 CoShooting 코루틴을 시작
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine("CoShooting");
        }
    }

    IEnumerator CoMove()
    {
        while (true)
        {
            float h = Input.GetAxisRaw("Horizontal");
            float v = Input.GetAxisRaw("Vertical");

            if (h > 0)
            {
                anim.SetInteger("State", 2);
            }
            else if( h < 0)
            {
                anim.SetInteger("State", 1);
            }
            else
            {
                anim.SetInteger("State",0);
            }

            Vector2 inputDirection = new Vector2(h, v).normalized; // 입력 방향 정규화

            float xMove = inputDirection.x * speed * Time.deltaTime;
            float yMove = inputDirection.y * speed * Time.deltaTime;

            this.transform.Translate(new Vector2(xMove, yMove));


            


            yield return null;
        }
    }

    IEnumerator CoShooting()
    {
        // 총알 프리팹을 shootPosition에서 생성하고, 위쪽으로 발사
        GameObject bullet = Instantiate(bulletPrefab, shootPosition.position, Quaternion.identity);
        Rigidbody2D rb = bullet.GetComponent<Rigidbody2D>();
        if (rb != null)
        {
            rb.velocity = Vector2.up * speed; 
        }


        yield return null;
    }

    IEnumerator CoAnimation()
    {

        yield return null;
    }
}

2. SpaceShipController.cs

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

public class EnemyController : MonoBehaviour
{
    [SerializeField] private int enemyHP = 3;
    private Animator anim;
    void Start()
    {
        anim = GetComponent<Animator>();
    }

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

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Bullet"))
        {
            this.enemyHP -= 1;
            anim.SetInteger("State", 1);
            Destroy(collision.gameObject);
        }

        if (this.enemyHP <= 0)
        {
            Destroy(this.gameObject);
        }
    }
}

3. EnemyController.cs

using UnityEngine;

public class ReturnIdle : MonoBehaviour
{
    private Animator anim; 

    void Start()
    {
        anim = GetComponent<Animator>();
      
    }

    public void ResetToIdle()
    {
        anim.SetInteger("State", 0); // Idle 상태로 설정

    }
}

4. ReturnIdle.cs (애니메이션 이벤트)

 

 

 

배경 스크롤링을 진행 하다가 

시간이 너무 늦어져서 

일단 여기까지 올립니다.

+ Recent posts