일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 탑다운
- Event
- Unity
- 자주 사용하는 Quaternion 함수
- PYTHON
- 회전
- 웹스크래핑
- 코딩
- 픽셀
- 2D
- jQuery
- intervals
- 도트
- vsCode
- click
- Quaternion
- addEventListener
- javascript
- topdown
- 연습
- classList
- getItem
- 독립변수
- Lerp
- setItem
- euler
- 종속변수
- wsl
- className
- 도린이
Archives
- Today
- Total
쫑가 과정
마무리 본문
기능
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
플레이
https://play.unity.com/mg/other/webgl-builds-177267
'Unity 따라 배우기 > Topdown 2D RPG In Unity' 카테고리의 다른 글
데미지 입는 효과 주기 / 캐릭터 깜빡이기 (0) | 2022.03.08 |
---|---|
플레이어 체력 설정 / 공격 맞기. (0) | 2022.03.04 |
쉬운 적 AI 만들기 (설정 범위 내 공격, 범위 밖 설정 자리로 돌아감) (1) | 2022.02.24 |
쉽게 플레이어 맵 이동, 맵 변경 (0) | 2022.02.23 |
카메라 플레이어 부드럽게 따라가기, 카메라 경계 설정. (2) | 2022.02.22 |
2d 탑 다운 시점 캐릭터 8방향 움직임, 애니메이션 설정. (0) | 2022.02.18 |
Comments