C# 함수
void => 일반적인 함수. 값을 뱉어낼 수는 없다.
string, int, bool => 각각 string, int, bool 값을 뱉어내는 함수이다.
어제 문자로 작성해 주었던 부분을 전부 함수화 시켜 다음과 같이 작성하였다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using UnityEditor.UI;
using UnityEngine.UIElements;
using Unity.VisualScripting;
public class Test1 : MonoBehaviour
{
// UI
public TextMeshProUGUI dialog; // 메세지가 나올 부분
public TextMeshProUGUI currentHp; // 포켓몬의 현재 체력
public TextMeshProUGUI maxHP; // 포켓몬의 최대체력
public TextMeshProUGUI slash; // 체력사이의 슬래쉬
public TextMeshProUGUI pokemonName; // 포켓몬의 이름
public TextMeshProUGUI pokemonLevel; // 포켓몬의 레벨
// 트레이너 정보
string trainerName = "안나";
// 아이템 정보
List<string> Items = new List<string>();
List<float> ItemEffect = new List<float>();
// 내 포켓몬 정보
string[] myPK = new string[6];
int[] PKLevel = { 1, 2, 3 };
bool[] isAlive = { true, true, true };
float[] curHp = { 30, 40, 50 };
float[] mHP = { 30, 40, 50 };
// float[] skillDamage = { 2.5f, 3.0f, 3.5f };
List<string> Skill = new List<string>();
List<float> SkillDamage = new List<float>();
// 메세지 번호
int messageNumber;
// 표시될 메세지 리스트
List<string>dialogList = new List<string>();
// Start is called before the first frame update
void Start()
{
// 포켓몬의 스킬을 리스트에 추가해준다.
Skill.Add("전광석화");
Skill.Add("불꽃세례");
Skill.Add("바위치기");
SkillDamage.Add(2.5f);
SkillDamage.Add(3.0f);
SkillDamage.Add(3.5f);
// 아이템을 리스트에 추가해준다.
Items.Add("상처약");
Items.Add("풀회복약");
ItemEffect.Add(10f);
ItemEffect.Add(50f);
// 포켓몬을 배열에 추가해준다.
myPK[0] = "피카츄";
myPK[1] = "파이리";
myPK[2] = "롱스턴";
// 표시될 메세지를 리스트에 추가해준다.
DialogData();
dialog.text = StartBattle(1); // 시작 메세지
}
// Update is called once per frame
void Update()
{
}
// 메세지를 표시하는 기능
public void Message()
{
dialog.text = dialogList[messageNumber];
messageNumber++;
}
// 메세지 리스트에 메세지들을 저장하는 함수.
void DialogData()
{
dialogList.Add(SelectPK(0));
dialogList.Add(UseSkill(0));
dialogList.Add(PKDamaged(1, 0));
dialogList.Add(LeftHP(1));
dialogList.Add(UseSkill(1));
dialogList.Add(PKDamaged(0, 1));
dialogList.Add(LeftHP(0));
dialogList.Add(UseItem(0, 0));
dialogList.Add($"{myPK[0]}의 체력을 10 회복했다!!!");
dialogList.Add($"{myPK[0]}의 HP : {curHp[0] + 10f}");
}
string SelectPK(int a)
{
return $"가랏, {myPK[a]}!!!";
}
string StartBattle(int a)
{
return $"{trainerName} 이/가 {myPK[a]} 와/과 배틀을 시작했다!!!";
}
string UseSkill(int i)
{
return $"{myPK[i]}의 {Skill[i]}!!!";
}
string PKDamaged(int i, int j)
{
curHp[i] = curHp[i] - SkillDamage[j];
return $"{myPK[i]}는 {SkillDamage[j]}의 데미지를 입었다!!!";
}
string UseItem(int a, int b)
{
curHp[a] = curHp[a] + ItemEffect[b];
if (curHp[a] > mHP[a])
{
curHp[a] = mHP[a];
}
return $"{trainerName}이/가 {myPK[a]}에게 {Items[b]}을/를 사용했다!!!";
}
string LeftHP(int i)
{
return $"{myPK[i]}의 HP : {curHp[i]}";
}
}
여러번 공격하는 스킬 구현
독침붕의 마구찌르기 같은 경우 몬스터를 여러번 공격하게 된다. 이를 구현하기 위해 다음과같이 코드를 작성하였다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class Test1 : MonoBehaviour
{
// UI
public TextMeshProUGUI dialog; // 메세지가 나올 부분
public TextMeshProUGUI currentHp; // 포켓몬의 현재 체력
public TextMeshProUGUI maxHP; // 포켓몬의 최대체력
public TextMeshProUGUI slash; // 체력사이의 슬래쉬
public TextMeshProUGUI pokemonName; // 포켓몬의 이름
public TextMeshProUGUI pokemonLevel; // 포켓몬의 레벨
// 트레이너 정보
string trainerName = "안나";
// 아이템 정보
List<string> Items = new List<string>();
List<float> ItemEffect = new List<float>();
// 내 포켓몬 정보
string[] myPK = new string[6];
int[] PKLevel = { 1, 2, 3, 4 };
bool[] isAlive = { true, true, true };
float[] curHp = { 30, 30, 50, 60 };
float[] mHP = { 30, 30, 50, 60 };
// float[] skillDamage = { 2.5f, 3.0f, 3.5f };
List<string> Skill = new List<string>();
List<float> SkillDamage = new List<float>();
// 메세지 번호
int messageNumber;
// 메세지간의 시간차이
float timer = 2f;
// 표시될 메세지 리스트
List<string> dialogList = new List<string>();
// Start is called before the first frame update
void Start()
{
// 포켓몬의 스킬을 리스트에 추가해준다.
Skill.Add("전광석화");
Skill.Add("불꽃세례");
Skill.Add("바위치기");
Skill.Add("마구찌르기");
SkillDamage.Add(10f);
SkillDamage.Add(20f);
SkillDamage.Add(30f);
SkillDamage.Add(5f);
Items.Add("상처약");
Items.Add("풀회복약");
ItemEffect.Add(10f);
ItemEffect.Add(50f);
myPK[0] = "피카츄";
myPK[1] = "파이리";
myPK[2] = "롱스턴";
myPK[3] = "독침붕";
myPK[4] = "이상해씨";
// 표시될 메세지를 리스트에 추가해준다.
DialogData();
dialog.text = StartBattle(1); // 시작 메세지
}
// Update is called once per frame
void Update()
{
}
// 메세지를 표시하는 기능
public void Message()
{
dialog.text = dialogList[messageNumber];
messageNumber++;
}
// 메세지 리스트에 메세지들을 저장하는 함수.
void DialogData()
{
dialogList.Add(UseSkill(3, 2));
dialogList.Add(SelectPK(0));
dialogList.Add(UseSkill(0, 1));
dialogList.Add(UseSkill(1, 0));
dialogList.Add(UseItem(0, 0));
dialogList.Add(UseSkill(0, 1));
dialogList.Add($"{myPK[1]}는 혼란스럽다!!!");
dialogList.Add(UseSkill(0, 1));
dialogList.Add($"{myPK[1]}는 쓰러졌다!!!");
}
string SelectPK(int a)
{
return $"가랏, {myPK[a]}!!!";
}
string StartBattle(int a)
{
return $"{trainerName} 이/가 {myPK[a]} 와/과 배틀을 시작했다!!!";
}
void Repeat()
{
for (int a = 0; a < 10; a++)
{
Debug.Log(a);
}
}
// 공격과 데미지, 현재 HP를 보여주는 함수를 한개로 합쳤다.
string UseSkill(int a, int b)
{
if (a == 3) // 포켓몬이 독침붕이고, 스킬이 마구찌르기일 경우
{
int r = Random.Range(1, 6); // 1부터 5까지 랜덤
for (int count = 1; count<=r; count++) // r회까지 스킬 사용 메세지 표시하기
{
dialogList.Add($"{myPK[a]}의 {Skill[a]} X {count} !!!" );
}
curHp[b] = curHp[b] - SkillDamage[a] * r;
dialogList.Add($"{myPK[b]}은/는 {SkillDamage[a] * r}의 데미지를 입었다!!!");
}
else // 다른포켓몬들의 경우
{
dialogList.Add($"{myPK[a]}의 {Skill[a]}!!!!");
curHp[b] = curHp[b] - SkillDamage[a];
dialogList.Add($"{myPK[b]}은/는 {SkillDamage[a]}의 데미지를 입었다!!!");
}
return $"{myPK[b]}의 HP : {curHp[b]}";
}
// 아이템 사용, 회복, 현재 HP표시를 하나로 묶어주었다.
string UseItem(int a, int b)
{
if (curHp[a] + ItemEffect[b] > mHP[a])
{
curHp[a] = mHP[a];
}
else
{
curHp[a] = curHp[a] + ItemEffect[b];
}
dialogList.Add($"{trainerName}이/가 {myPK[a]}에게 {Items[b]}을/를 사용했다!!!");
dialogList.Add($"{myPK[a]}의 체력을 10 회복했다!!!");
return $"{myPK[a]}의 HP : {curHp[a]}";
}
}
테스트를 해보면 다음과 같이 잘 작동하는 것을 볼 수 있다.
'Unity' 카테고리의 다른 글
Unity 포켓몬 게임 구현하기 3(Animation) (0) | 2024.04.25 |
---|---|
렌더 파이프라인의 구분 (0) | 2024.04.23 |
수박게임 주요 기능 스크립트로 구현하기 (0) | 2024.04.19 |
2024/04/17~ 포켓몬 게임 구현하기 (0) | 2024.04.17 |
Roll-A-Ball 게임 만들기 미니 프로젝트 (0) | 2024.04.17 |