TIL

2024 11 01 TIL

noc777 2024. 11. 1. 19:42

오늘 공유된 문제 : 에셋이 분홍색으로 표시되어 보이는 현상 

에셋 속성 확인 projectSetting -> Graphics 에서 속성확인 가능 none이면 built in  외에 두가지 속성 

속성이 다른 에셋이 들어가면 정상적으로 에셋이 보이지 않음. 따라서 에셋을 사용할 땐 속성을 통일하여 사용하여야함

깃에 충돌이 발생하였던 문제 : 머지를 필수적으로 하면서 작업을 진행하도록 하자.  언제 무슨 상황이 일어날지 모르기에

 

어제 진행하였던 스크립트에 실행순서가 꼬이는 문제가 발생하여 수정하였고

UI 는 크게 상속이 필요하지 않을 것 같다는 피드백을 받아 CondtionUI에 UI를 채우는 대상을 설정할 수 있도록 하여

수정완료하였다.  또한 굳이 UIData 스크립트를 쓸 필요가 없다는 피드백으로 스크립트가 5->1개로 단축되었다.

 

public enum ConditionType
{
    health,
    stamina,
    hunger,
    thirst
}

public class ConditionUI : MonoBehaviour
{
    [SerializeField]
    private PlayerConditions conditions;

    [SerializeField] ConditionType type;

    private Image valueBar;

    private float filledUIValue;
    

    private void Start()
    {
        conditions = CharacterManager.Instance.Player.condition;
        valueBar = GetComponent<Image>();
    }

    private void Update()
    {
        SetFilledValue();

        if ( valueBar != null)
        {
            valueBar.fillAmount = filledUIValue;
        }
    }

    private void SetFilledValue()
    {
        switch (type)
        {
            case ConditionType.health:
                filledUIValue = conditions.health.GetPercentage();
                break;
            case ConditionType.stamina:
                filledUIValue = conditions.stamina.GetPercentage();
                break;
            case ConditionType.hunger:
                filledUIValue = conditions.hunger.GetPercentage();
                break;
            case ConditionType.thirst:
                filledUIValue = conditions.thirst.GetPercentage();
                break;
        }
    }
}


원래 체력 스테미나 허기 수분으로 상속으로 나누었던 어제의 스크립트를 상속을 포기한 대신 Enum을 사용하여 

스크립트의 타입을 나누어주었고 정상적으로 처리가 되는 모습이다.

 

 PlayerData playerdata;

 public Condition health;
 public Condition stamina;
 public Condition hunger;
 public Condition thirst;

 public float starveDamage;
 public float thirstyDamage;

 private void Awake()
 {
     health = gameObject.AddComponent<Condition>();
     stamina = gameObject.AddComponent<Condition>();
     hunger = gameObject.AddComponent<Condition>();
     thirst = gameObject.AddComponent<Condition>();
 }

 private void Start()
 {
     playerdata = CharacterManager.Instance.Player.playerData;
    
     health.SetValue(playerdata.health.MaxValue, playerdata.health.passiveValue);
     stamina.SetValue(playerdata.stamina.MaxValue, playerdata.stamina.passiveValue);
     hunger.SetValue(playerdata.hunger.MaxValue, playerdata.hunger.passiveValue);
     thirst.SetValue(playerdata.thirst.MaxValue, playerdata.thirst.passiveValue);
 }

또한 어제는 인스턴스를 생성조차 안하고 메서드를 실행시켰었는데 이번에 Awake 문을 사용하여 

해당 오브젝트 내에 gameObject(컴포넌트)를 생성하여 인스턴스를 할당하도록 하였다.

 

이 과정에서 새로 안 것은 new GameObject를 사용하면 하이어라키 창에 새로 오브젝트가 추가되어버리는 상황이 발생하는 것을 알았다.  (Manager는 DontDestroyOnLoad 안에 있어 이러한 사실을 인지못함) 

 

정상적으로 아이템 쪽과 상호작용을 하는 것을 확인한 이후 이제 적과 싸우는 도중 받는 데미지의 처리와 

또한 이를 명시적으로 하기 위해 인터페이스로  데미지를 받았을 때의 메서드를 따로 만들어놓고 사용할 예정이다.

 

그리고 새로 부여받은 역할은 자원 리스폰 기능이다.  

미리 구상하자면  설정한 영역의 랜덤 좌표에 생성하는 기능  생성이 너무 많이 되면 안되니 오브젝트 풀링 패턴으로 개체의 수를 조절하고    주기적으로 리스폰이 되도록 설정 및  주변에 플레이어나 사물이 있으면 생성이 안되게 끔 로직 

정도로 구상하고 있다.  

 

주말동안 해볼 것은 이러한 구상과 함께 Html을  필요로 인해 잠깐 배우려고한다.  

'TIL' 카테고리의 다른 글

2024 11 05 TIL  (1) 2024.11.05
2024 11 04 TIL  (0) 2024.11.04
2024 10 31 TIL  (0) 2024.10.31
2024 10 30 TIL  (0) 2024.10.30
2024 10 29 TIL  (0) 2024.10.29