[#3-5. Script Review] 우주 정복 프로젝트

Maengkkong·2023년 11월 25일

HpItemController

아이템이 캐릭터와 충돌할 경우 기능 호출
1) 캐릭터와 아이템의 충돌 감지
2) 아이템 획득 시 체력 회복 시스템

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

/// <summary>
/// 기능
///     1) 캐릭터와 아이템의 충돌 감지
///     2) 아이템 획득 시 체력 회복 시스템
/// 호출 : 아이템이 캐릭터와 충돌할 경우 기능 호출    
/// </summary>
public class HpItemController : MonoBehaviour
{
    //캐릭터종류
    private int _playerIndex;
    //현재 캐릭터 체력
    private int _playerHp = 0;
    //해당 캐릭터의 최대 체력 + 레벨업으로 증가한 체력
    private int _maxHp = 0;
    //해당 캐릭터의 최대 체력
    private int _playerMaxHp = 0;
    //충돌 여부
    private bool _isCollision = false;
    private Transform _player;

    //트리거 사이즈
    private float _itemTriggerSize =0f;
    
    //충돌감지
    private void OnTriggerEnter2D(Collider2D collision)
    {
        //플레이어와 충돌할 경우
        if (collision.CompareTag("Player"))
        {
            _player = collision.transform;
            //아이템 획득 메소드 호출
            GetItem();
        }
    }

    void Update()
    {
        //충돌한 경우
        if (_isCollision)
        {   
            //캐릭터의 위치로 이동
            transform.position = Vector3.MoveTowards(transform.position, _player.position, 0.05f);
            //캐릭터의 위치로 이동 완료되었다면
            if (transform.position == _player.position)
            {
                //아이템 오브젝트 삭제
                Destroy(gameObject);
            }
        }

        //자석 능력이 강화되었을 경우 아이템 획득 범위가 넓어진다.
        //아이템의 트리거 사이즈 증가시키기
        if (_itemTriggerSize != DataManager.instance.playData.bulletSize)
        {
            _itemTriggerSize = DataManager.instance.playData.bulletSize;
            GetComponent<CircleCollider2D>().radius += _itemTriggerSize;
        }

        //게임 오버라면 화면의 오브젝트 모두 삭제해야함 
        if(DataManager.instance.playData.gameover){
            Destroy(gameObject);
        }
    }

    //아이템 획득 기능
    void GetItem()
    {
        _isCollision = true;
        _playerIndex = PlayerPrefs.GetInt("PlayerIndex");
        //현재 플레이어의 체력 불러오기
        _playerHp = DataManager.instance.playerStatDataList[_playerIndex].hp;
        //현재 플레이어의 최대 체력
        _playerMaxHp = DataManager.instance.playerStatDataList[_playerIndex].maxHp;
        //현재 플레이어의 최대 체력 + 레벨업으로 증가한 체력
        _maxHp = _playerMaxHp + (int)DataManager.instance.upgradeDataList[0].upgrade
        * (DataManager.instance.upgradeDataList[0].level - 1);

        //현재 체력이 최대 체력보다 적을 경우에만 플레이어 체력 증가시킴
        if (_playerHp < _maxHp)
        {
            //아이템 회복했을 경우 최대 체력보다 크다면
            //최대 체력 상태로만 만들어준다.
            if (_playerHp + 1 > _maxHp)
            {
                DataManager.instance.playerStatDataList[_playerIndex].hp = _maxHp;
            }
            else 
            { 
                DataManager.instance.playerStatDataList[_playerIndex].hp += 1; 
            }
        }
    }
}

Vector3.MoveTowards()

현재 위치에 있는 객체를 이동할 위치 쪽으로 이동하도록 한다.

public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

매개변수

  • Vector3 current = 이동할 위치

  • Vector3 target = 나아갸야 할 위치

  • maxDistanceDelta = 이동 거리

  • maxDistanceDelta가 음수 값일 경우 > 반대 방향의 위치를 반환

MoveTowards


PlayerPrefs.GetInt()

PlayerPrefs을 이요하여 데이터를 불러온다.

  • public static int GetInt(string key);
    Declaration
  • public static int GetInt(string key, int defaultValue);
    : Plyerprefs.Get자료형("저장했던 키값", 초기화 값);

Playerprefs.GetInt

0개의 댓글