[유니티] UNITY string형 값으로 전달받은 자료를 어떻게 int형으로 바꿔야 할까요?
안녕하세요. 오늘도 평화로운 가을 바람이 먹구름들은 끌어모아 비를 만들려고 애쓰고 있는 8월 말입니다.
게임을 만들다가 보면 동료에게서 자료들을 받아서 처리하게 되는 경우가 많이 있습니다. 예를 들면, 유닛의 체력이나 공격력이나 마법력, 방어력 등등이 있는데, 주로 string형값으로 받게되는데, 이때 받은 값을 가지고, 체력을 올리거나 공격력을 올 올려서 적용할 수 있습니다.
이때 사용하면 편리한 것이 Split 메서드 입니다.
How??? 어떻게 사용하는지 알아보겠습니다.
사용하는 방법은 간단합니다.
string Text = "12,34,56,78";
string[] testTxt = Text.Split(',');
int PlayerHp = int.Parse(testTxt[0]) + 1;
변수 ' Text ' 에 있는 문자열을 구분기호 ' , ' (콤마)로 나누어서 ' testTxt '라는 string배열 변수에 넣어고, PlayerHp라는 변수에 testTxt의 첫번째배열값에 1을 증가시켜서 넣어라는 의미로, 사용하시면 됩니다.
[예제1] 체력값등을 구분기호로만 텍스트로 받았을 때
먼저, 아래와 같이 화면을 구성하였습니다. 텍스트를 4개 추가해서 각각 이름을 playerHp , PlayerMana , PlayerAttack , PlayerDefence 라고 했습니다.

빈 오브젝트를 하나 생성한 다음에 아래와 같이 ' StringtoInt ' 라는 이름으로 스크립터를 추가했습니다.
using UnityEngine;
using UnityEngine.UI;
public class StringtoInt : MonoBehaviour
{
public Text playerHp; //Hp Text오브젝트를 담을 변수
public Text playerMana; //Mana Text오브젝트를 담을 변수
public Text playerAttack; //Attack Text오브젝트를 담을 변수
public Text playerDefence; //Defence Text오브젝트를 담을 변수
private void Start()
{
string playerInfo = "80,75,15,25"; // 플레이어 체력:80 , 마나:75 , 공격력:15 , 방어력:25 정보를 받음
string[] player = playerInfo.Split(','); // playerInfo변수의 값을 콤마로 구분해서 배열에 넣어둠
int hp = int.Parse(player[0]) + 15; //체력값에 15를 증가시킴
int mana = int.Parse(player[1]) + 10; //마나값에 10를 증가시킴
int attack = int.Parse(player[2]) + 5; //공격력값에 5를 증가시킴
int defence = int.Parse(player[3]) + 20; //방어력에 20를 증가시킴
playerHp.text = "Hp: "+hp.ToString(); // hp 출력함
playerMana.text = "Mana: " + mana.ToString(); // mana 출력함
playerAttack.text = "AttackDamage: " + attack.ToString(); // attack 출력함
playerDefence.text = "DefenceStrength: " + defence.ToString(); // defence 출력함
}
그러면 아래와 같이 체력 , 마나 , 공격력 , 방어력의 값들이 각각 수정된 상태로 표현된 것을 알 수있습니다.

[예제2] 체력값등의 값의 크기만 세자리수로 통일시켜서 텍스트로 받았을 때
먼저, 위의 예제처럼 텍스트를 4개 추가해서 각각 이름을 playerHp , PlayerMana , PlayerAttack , PlayerDefence 라고 하고, 아래와 같이 화면을 구성은 동일하게 하였습니다.

자료를 넘겨받을 때 원하는 자료의 위치가 중구난방으로 되어있지만, 텍스트로 찾을 수 있게 구성되어있을 수 있습니다.예를 들면 아래와 같습니다.
string testTxt = "mana30hp50defence45attack70";
이때는 indexof() 메서드와 SubString() 메서드를 함께 쓰면 편리합니다.
이전 예제를 만들어 둔 ' StringtoInt ' 스크립터를 아래와 같이 수정하겠습니다.
using UnityEngine;
using UnityEngine.UI;
public class StringtoInt : MonoBehaviour
{
public Text playerHp; //Hp Text오브젝트를 담을 변수
public Text playerMana; //Mana Text오브젝트를 담을 변수
public Text playerAttack; //Attack Text오브젝트를 담을 변수
public Text playerDefence; //Defence Text오브젝트를 담을 변수
private void Start()
{
string playerInfo = "mana30hp50defence45attack70"; // 플레이어 체력:50 , 마나:30 , 공격력:70 , 방어력:45 정보를 받음
int hpPosi = playerInfo.IndexOf("hp"); // playerInfo에서 hp의 위치에 대한 값을 받음
//hpPosi 의 값은 6임
string player = playerInfo.Substring(hpPosi+2, 2); //playerInfo에서 hp의 위치에서 2를 더한 위치에서 문자열의 길이가 2인 만큼을 받음
int hp = int.Parse(player) + 15; //체력값에 15를 증가시킴
playerHp.text = "Hp: "+hp.ToString(); // hp 출력함
}
}
IndexOf() 메서드를 사용해서 찾는 문자열의 위치를 파악하고 나서, Substring(시작인덱스,문자열길이) 매서드를 사용해서 받아올 문자열의 시작과 문자열의 길이를 넣어서 가져오면 아래와 같은 결과를 얻을 수 있습니다.

※ 참고
받아온 텍스트에 공간이 있을 경우에 오류의 원인을 제공할 수 있습니다. 이때는 Replace() 메서드를 사용하면 제거가 가능합니다.
private void Start()
{
string playerInfo1 = "mana30hp5 0defence45attack70"; // 플레이어 체력:50 , 마나:30 , 공격력:70 , 방어력:45 정보를 받음
string playerInfo2 = playerInfo1.Replace(" ", ""); // 공백을 제거함
int hpPosi = playerInfo2.IndexOf("hp"); // playerInfo에서 hp의 위치에 대한 값을 받음
//hpPosi 의 값은 6임
}
문자열을 다루는 다양한 방법들이 있지만 이 정도만 알면, 나머지는 필요할 때 찾아보면 금방 친숙해 지실 것 같습니다.
그럼 오늘도 즐유!(즐거운 유니티) ^^
'유니티 프로그램' 카테고리의 다른 글
| [유니티] UNITY (첫번째: 생성/파괴방식) 총쏘기 게임 만들 때 총알을 생성하는 방법은 무엇이 있나요? (0) | 2022.09.13 |
|---|---|
| [유니티] UNITY 게임 시작 화면에 간단하게 마우스에 반응하는 메뉴목록을 넣는 방법은 무엇입니까? (0) | 2022.09.05 |
| [유니티] UNITY 게임오브젝트 여러개를 동시에 안보이게 하려면 어떻게 해야 할까요? (0) | 2022.08.23 |
| [유니티] UNITY 게임화면 하늘의 구름이 흘러가게 하려면 어떻게 해야 할까요? (0) | 2022.08.19 |
| [유니티] UNITY 플레이시간(타이머)을 다음 씬(SCENE)까지 끊김없이 흐르게 하려면 어떻게 해야 할까요? (0) | 2022.08.09 |