메서드의 수행 단계에 따른 프로퍼티 상태 추적을 위해서 디버그 로그를 심어본 경험이 많을 것이다.
C#에서 사용되는 문자열 다루기를 한 번 알아보자.
들어가기 앞서, 글쓴이는 유니티를 이용해서 주로 개발해서 예시는 모두 유니티에서 사용되는 UnityEngine.Debug.Log를 사용하고 있다. 유니티 엔진을 사용하지 않는다면 System.Console.WriteLine을 이용해서 로그를 출력해주면 된다.
내 정보를 출력해주는 MyInfo라는 클래스가 있다고 하자.
PrintMyInfo 함수 호출을 통해 다양한 로그를 출력해보자.
1. 예전 방식 - string.Format 함수를 이용
using UnityEngine;
public class MyInfo : MonoBehaviour
{
void Start()
{
PrintMyInfo();
}
void PrintMyInfo()
{
string nickName = "twosouls";
float height = 180.4172f;
string phone_number = "010-0000-0000";
Debug.Log(string.Format("Nick Name : {0}, Height : {1}, Phone Number : {2}", nickName, height, phone_number));
}
}
string.Format 함수에서 문자열 뒤의 가변 인자들과 순서대로 매칭이 된다. {0} = nickName, {1} = height, {2} = phone_number로 매칭이 되는 것이다. 매칭을 하기 위해서 문자 간의 거리가 멀어서 불편함이 있다.
2. 개선된 방식 - $ 문자열 보간 사용
using UnityEngine;
public class MyInfo : MonoBehaviour
{
void Start()
{
PrintMyInfo();
}
void PrintMyInfo()
{
string nickName = "twosouls";
float height = 180.4252f;
string phone_number = "010-0000-0000";
Debug.Log($"Nick Name : {nickName}, Height : {height:0.00}, Phone Number : {phone_number}");
Debug.Log($"Ceil : {(Mathf.Ceil(height * 100.0f)) / 100.0f}");
Debug.Log($"Round : {(Mathf.Round(height * 100.0f)) / 100.0f}");
Debug.Log($"Floor : {(Mathf.Floor(height * 100.0f)) / 100.0f}");
}
}
해당 문법을 알고 난 뒤에 개인적으로 매우 선호하는 문자열 보간 방식이다. 문자열 앞에 $를 붙여주고, 변수나 상수를 사용할 때 { } 괄호 사이에 변수나 상수를 넣어주면 된다. 수식도 넣을 수 있다.
소수점의 올림, 반올림, 내림에 대해서도 같이 알아보자.
Mathf.Ceil = 올림,
Mathf.Round = 반올림,
Mathf.Floor = 내림
소수점 첫번째 자리에서 수행하고 싶으면 함수를 그대로 호출하면 되지만, 소수점 둘째 이상부터 올림, 반올림, 내림 등을 수행하고 싶으면 (자리 수-1) 만큼 10을 반복해서 곱해주고 함수를 호출하고 결과 값에서 곱한 만큼 다시 나눠주면 된다. 이해가 안되면 아래의 예시를 보자.
둘째 자리에서 올림 수행 => (Mathf.Ceil(height * 10.0f)) / 10.0f => 결과값은 소수점 첫째짜리까지
셋째 자리에서 올림 수행 => (Mathf.Ceil(height * 100.0f)) / 100.0f => 결과값은 소수점 둘째짜리까지
...
예문에 {height:0.00}로 되어있는 것을 보신 분이 있을 것이다. 해당 문법처럼 할 때에는 셋째 자리에서 반올림해서 둘째 자리까지 표시해달라는 의미다. 이처럼 간단하게 처리할 수도 있다.
'프로그래밍 > 유니티' 카테고리의 다른 글
Visual Studio에서 Unity 디버거 연결 후 잦은 크래시 해결하기!! (0) | 2021.04.18 |
---|---|
Unity의 RayCast/BoxCast/SphereCast/CapsuleCast 정리 (0) | 2021.04.05 |
유니티 커스텀 에디터 메뉴 (+정상적으로 동작하지 않는 경우) (0) | 2021.03.28 |
Unity NavMesh #7 실시간 네비메시 빌드 4 (0) | 2021.03.17 |
Unity NavMesh #6 실시간 네비메시 빌드 3 (0) | 2021.02.22 |
댓글