쫑가 과정

마무리 본문

Unity 따라 배우기/Topdown 2D RPG In Unity

마무리

쫑가 2022. 4. 8. 20:44

기능

1. 플레이어 능력치 부여하기

InputField 와 매서드를 연결해서 인게임내에서 능력치가 변경.

public void ChangeMoveValue()
    {
        if(moveInput.text != "")
        {
            movetext.text = $"Move Speed: {moveInput.text}";
            playerScript.speed = int.Parse(moveInput.text);
        }
    }

2. 원하는 능력치를 가진 적 유닛 만들기

 

Create 버튼과 매서드를 연결해 클릭 시 클론 만들고 클론을 입력한 능력치로 변경한다.

public void CreateMonster()
    {
        if (hpInput.text != "" && moveInput.text != "" && damageInput.text != "" && attackSpeedInput.text != "")
        {
            EnemyController clone = Instantiate(monsterFlower,new Vector2(monsters.transform.position.x,Random.Range(-3f,3f)),transform.rotation,monsters.transform).GetComponent<EnemyController>();
            clone.maxHealth = int.Parse(hpInput.text);
            clone.speed = int.Parse(moveInput.text);
            clone.damage = int.Parse(damageInput.text);
            clone.attackSpeed = int.Parse(attackSpeedInput.text);
            clone.attackDelay = clone.attackDelay / clone.attackSpeed;
            Debug.Log("Creator");
        }     
    }

3. 입력 키 표시하기

키 입력 시 패널 색상 변경.

private void Update()
    {
        Keyboard();
    }
    private void Keyboard()
    {
        // left
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow))
        {
            aPanel.color = Color.black;
        }
        else if ((Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.LeftArrow)))
        {
            aPanel.color = Color.white;
        }
    }

4. 레벨업 시스템

1업 하는데 필요한 경험치를 입력하면 1.05배씩 필요 능력치가 증가한다.

현재 경험치가 필요 경험치와 같거나 더 커지면

현재 경험치에서 필요 경험치만큼 빼고 그때마다 현재 레벨이 1씩 증가한다.

public class LevelDesign : MonoBehaviour
{
    [SerializeField] int maxLevel;
    [SerializeField] int currentLevel;
    [SerializeField] int[] expToLevelUp;
    [SerializeField] int baseExp;
    public int currentExp { get; set; }
    private void Awake()
    {
        playerScript = GameObject.FindGameObjectWithTag("Player").GetComponent<Movement>();
    }
    private void Start()
    {
        expForLevelUp();
    }
    private void Update()
    {
        levelUpSystem();
    }
    // 레벨업에 필요한 경험치 설정
    private void expForLevelUp()
    {
        text.text = "Level : " + currentLevel;
        expToLevelUp = new int[maxLevel];
        expToLevelUp[0] = baseExp;
        for (int i = 0; i < expToLevelUp.Length; i++)
        {
            if (i > 0)
            {
                expToLevelUp[i] = Mathf.FloorToInt(expToLevelUp[i - 1] * 1.05f);
            }
        }
    }
    // 레벨업하는 시스템
    private void levelUpSystem()
    {
        if (expToLevelUp[currentLevel - 1] <= currentExp)
        {
            int initialExp = currentExp - expToLevelUp[currentLevel - 1];
            currentLevel++;
            Debug.Log("Level Up");
            text.text = "Level : " + currentLevel;
            currentExp = initialExp;
        }
    }

5. 레벨업 시 능력치 추가 상승.

 

1. 레벨 업 시

저장된 초기 능력치와 추가 능력치 더함.

 

2. 중간에 능력치 수정 시

수정된 능력치 수치를 초기 능력치에 저장.

수정된 능력치 + 추가 능력치

 

 

 

 

 

1.

public class LevelDesign : MonoBehaviour
{
    private Movement playerScript;
    private int countLevelup = 0;
    public int levelUpMove = 0;
    public int levelUpMaxHealth = 0;
    public int levelUpDamageUp = 0;
    public int levelUpAttackSpeed = 0;
    [HideInInspector] public float initialMove = 0;
    [HideInInspector] public int initialMaxHealth = 0;
    [HideInInspector] public int initialDamageUp = 0;
    [HideInInspector] public float initialAttackSpeed = 0;
    private void Awake()
    {
        playerScript = GameObject.FindGameObjectWithTag("Player").GetComponent<Movement>();
    }
    private void Start()
    {
        InitialStat();
    }
    // 레벨업하는 시스템
    private void levelUpSystem()
    {
        if (expToLevelUp[currentLevel - 1] <= currentExp)
        {
            levelUpToStatUp();
        }
    }
    // 초기 능력치
    private void InitialStat()
    {
        initialMove = playerScript.speed;
        initialMaxHealth = playerScript.maxHealth;
        initialDamageUp = playerScript.damage;
        initialAttackSpeed = playerScript.attackSpeed;
    }
    // 레벨업 시 능력치 추가
    private void levelUpToStatUp()
    {
        levelUpMaxHealth += 10;
        playerScript.maxHealth = initialMaxHealth + levelUpMaxHealth;
        playerScript.currentHealth += 10;

        levelUpDamageUp += 2;
        playerScript.damage = initialDamageUp + levelUpDamageUp;
        
        if(currentLevel == 10)
        {
            levelUpAttackSpeed += 1;
            playerScript.attackSpeed = initialAttackSpeed + levelUpAttackSpeed;
            levelUpMove += 1;
            playerScript.speed = initialMove + levelUpMove;
        }
        else if(currentLevel > 10)
        {
            countLevelup++;
            if(countLevelup == 10)
            {
                countLevelup = 0;
                levelUpAttackSpeed += 1;
                playerScript.attackSpeed = initialAttackSpeed + levelUpAttackSpeed;

                levelUpMove += 1;
                playerScript.speed = initialMove + levelUpMove;
            }
        } 
    }
public class PlayerStatPanel : MonoBehaviour
{
    public LevelDesign levelDesign;
    
    public TextMeshProUGUI levelUpMoveText;
    public TextMeshProUGUI levelUpHpText;
    public TextMeshProUGUI levelUpDamageText;
    public TextMeshProUGUI levelUpAttackSpeedText;
    
    private void Start()
    {
        Upstats();
    }
    
    private void Update()
    {
        Upstats();
    }
	private void Upstats()
    {
        levelUpMoveText.text = $"+{levelDesign.levelUpMove}";
        levelUpHpText.text = $"+{levelDesign.levelUpMaxHealth}";
        levelUpDamageText.text = $"+{levelDesign.levelUpDamageUp}";
        levelUpAttackSpeedText.text = $"+{levelDesign.levelUpAttackSpeed}";
    }

2.

public class PlayerStatPanel : MonoBehaviour
{
	public void ChangeMoveValue()
    {
        if(moveInput.text != "")
        {
            movetext.text = $"Move Speed: {moveInput.text}";
            playerScript.speed = int.Parse(moveInput.text) + levelDesign.levelUpMove;
            levelDesign.initialMove = int.Parse(moveInput.text);
        }
    }
}

 

계속 업데이트 예정

 

깃허브

https://github.com/choijongha/2d-top-down-view-tutorial

 

GitHub - choijongha/2d-top-down-view-tutorial

Contribute to choijongha/2d-top-down-view-tutorial development by creating an account on GitHub.

github.com

플레이

https://play.unity.com/mg/other/webgl-builds-177267

 

Comments