본문 바로가기

개발자_뉴비일지

내일배움캠프 Unity 30일차 TIL - UI의 재미

string keyword="UI의 재미";

1. 알고리즘 코드 카타

(1) x만큼 간격이 있는 n개의 숫자

 

<나의 솔루션>

public class Solution
{
    public long[] solution(int x, int n)
    {
        long[] answer = new long[n];
        long tmp = 0;

        for (int i = 0; i < n; i++)
        {
            tmp += x;
            answer[i] = tmp;

        }

        return answer;
    }
}

>>팀원님의 도움을 받아 코드카타 제출!

처음엔 for문 안에 if문으로 돌렸는데 자꾸 오류가 나서 질문을 했더니 답을 주셨다!

 

2. unity 게임 개발 숙련

(1) 플레이어 상태 및 UI

 

UI를 만들어주기 위해 Canvas를 추가해 주고 condition들을 넣어줬다.

>>캔버스는 1920:1080으로 설정.

>>conditions의 위치를  하단으로,하고 vertical Layout을 달아준 다음 캔버스에 넣어주면 위치가 고정된다.

 

중간에 고기의 이미지가 안들어가는 현상이 있었다.

>>Defalt로 설정이 되어 있던 걸 Sprite로 바꿔주면 된다.

 

다음은 만들어둔  UI를 실제로 동작하게 스크립트를 짜고 연결해주는 작업!

 

<PlayerConditions>

public  interface IDamagable
{
    void TakePhysicalDamage(int damageAmount);
}

[System.Serializable]

public class Condition
{
    [HideInInspector]
    public float curValue;
    public float maxValue;
    public float startValue;
    public float regenRate;
    public float decayRate;
    public Image uiBar;

    public void Add(float amount)
    {
        curValue = Mathf.Min(curValue + amount, maxValue);
        //최대값을 안넘게 하기 위해서.
    }

    public void Subtrack(float amount)
    {
        curValue = Mathf.Max(curValue - amount, 0.0f);
        //0보다는 낮아지지 않게.
    }

    public float GetPercentage()
    {
        return curValue / maxValue;
    }
}

public class PlayerConditions : MonoBehaviour, IDamagable
{
    public Condition health;
    public Condition hunger;
    public Condition stamina;

    public float noHungerHealthDecay;

    public UnityEvent OnTakeDamage;

    void Start()
    {
        health.curValue = health.startValue;
        hunger.curValue = hunger.startValue;
        stamina.curValue = stamina.startValue;
    }

    // Update is called once per frame
    void Update()
    {
        hunger.Subtrack(hunger.decayRate * Time.deltaTime);
        stamina.Add(stamina.regenRate * Time.deltaTime);

        if(hunger.curValue == 0.0f)
            health.Subtrack(noHungerHealthDecay * Time.deltaTime);
        if (health.curValue == 0.0f)
            Die();

        health.uiBar.fillAmount = health.GetPercentage();   
        hunger.uiBar.fillAmount = hunger.GetPercentage();
        stamina.uiBar.fillAmount = stamina.GetPercentage();
        //UI연결
    }

    public void Heal(float amount)
    {
        health.Add(amount);
    }

    public void Eat(float amount)
    {
        hunger.Add(amount);
    }

    public bool UseStamina(float amount)
    {
        if (stamina.curValue - amount < 0)
            return false;

        stamina.Subtrack(amount);
        return true;
    }

    public void Die()
    {
        Debug.Log("플레이어가 죽었다.");
    }

    public void TakePhysicalDamage(int damageAmount)
    {
        health.Subtrack(damageAmount);
        OnTakeDamage.Invoke();
    }
}

>>값들을 설정해주고 UI Bar에 아까 만들어둔 애들을 넣어준다.

>>처음에는 배고픔이 감소

>>배고픔이 0이 되면 체력이 감소

 

2. 개인과제_ATM

(1) ATM 화면구성

>>기본 화면 구성 UI 넣어놓기 작업중

 

 

마무리

강의를 먼저 다 듣고 개인과제를 하기엔 왠지 또 마무리가 안될 것 같아서 강의는 한두개만 듣고 개인과제를 시작!

일단 기본적인 ATM의 화면구성이 꾸미는 재미가 있었다.

중간에 화면 비율때문에 살짝 버벅이긴 했지만 해결하고 하루를 마무리!

3D게임을 만드는 것도 재밌고, 개인과제도 재밌다

 

.

.

.

with 서열 확실한 요비용이