본문 바로가기
UNITY/Unity Study

유니티 시민강좌 1일차

by GREEN나무 2023. 7. 17.
728x90

배경 끝없이 이어지게... 회전? 시키기

불이랑 용가리에 파티클 효과 넣고

화면밖의 불 없애고

반투명한 구름들 배치

더보기

플레이어 코드

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

public class Player : MonoBehaviour
{
    public float moveSpeed = 5.0f;     // 움직이는 속도를 정의해 줍니다.

    public GameObject firePrefab; // 발사할 탄을 저장합니다.
    public bool canShoot = true; // 탄을 쏠 수 있는 상태인지 검사합니다.
    public float shootDelay = 0.5f; // 탄을 쏘는 주기를 정해줍니다.
    float shootTimer = 0; // 시간을 잴 타이머를 만들어줍니다.

    private List<GameObject> instantiatedFirePrefabs = new List<GameObject>();

    void Start()
    {
        // 초기화 코드를 작성합니다.
    }

    void Update()
    {
        moveControl();        // 캐릭터를 움직이는 함수를 프레임마다 호출합니다.
        ShootControl(); // 발사를 관리하는 함수입니다.

        // 생성된 firePrefab의 위치를 확인합니다.
        for (int i = instantiatedFirePrefabs.Count - 1; i >= 0; i--)
        {
            GameObject instantiatedFire = instantiatedFirePrefabs[i];
            if (instantiatedFire.transform.position.y > 30)
            {
                Destroy(instantiatedFire);
                instantiatedFirePrefabs.RemoveAt(i);
            }
        }
    }

    // 캐릭터를 움직이는 함수입니다.
    void moveControl()
    {
        float distanceX = Input.GetAxis("Horizontal") * Time.deltaTime * moveSpeed;
        // 아까 지정한 Axes를 통해 키의 방향을 판단하고 속도와 프레임 판정을 곱해 이동량을 정해줍니다.
        this.gameObject.transform.Translate(distanceX, 0, 0);
        // 이동량 만큼 실제로 이동을 반영합니다.

        Vector3 viewPos = Camera.main.WorldToViewportPoint(transform.position);
        // 캐릭터의 월드 좌표를 뷰포트 좌표계로 변환해줍니다.
        viewPos.x = Mathf.Clamp01(viewPos.x); // x값을 0 이상, 1 이하로 제한합니다.
        viewPos.y = Mathf.Clamp01(viewPos.y); // y값을 0 이상, 1 이하로 제한합니다.
        Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewPos); // 다시 월드 좌표로 변환합니다.
        transform.position = worldPos; // 좌표를 적용합니다.
    }

    // 발사를 관리하는 함수입니다.
    void ShootControl()
    {
        if (canShoot)
        {
            if (shootTimer > shootDelay && Input.GetKey(KeyCode.Space))
            {
                GameObject newFirePrefab = Instantiate(firePrefab, transform.position, Quaternion.identity);
                instantiatedFirePrefabs.Add(newFirePrefab);
                shootTimer = 0;
            }
            shootTimer += Time.deltaTime;
        }
    }

    public GameObject ParticleFXExplosion;
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag.Equals("Enemy"))
        { // 부딪힌 객체가 적인지 검사합니다.
            Destroy(other.gameObject); // 부딪힌 적을 지웁니다.
            Destroy(this.gameObject); // 자기 자신을 지웁니다.
            Instantiate(ParticleFXExplosion, this.transform.position, Quaternion.identity);
            // 폭발 이펙트를 생성합니다.
        }
    }

    void OnBecameInvisible()
    {
        Destroy(this.gameObject); // 자기 자신을 지웁니다.
    }
}

'UNITY > Unity Study' 카테고리의 다른 글

유니티 시민강좌 1,2일차 세로 게임  (0) 2023.07.19
유니티 시민강좌 2일차  (0) 2023.07.19
운수룰렛 스와이프로 바꾸기  (0) 2023.07.05
카메라 컨트롤  (0) 2023.07.05
메티리얼 문양 크기편집  (0) 2023.07.05