인프런 커뮤니티 질문&답변

Jonghyen Lee님의 프로필 이미지
Jonghyen Lee

작성한 질문수

유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발

Transform 과 position 변경하기

4분 44초 제가 이해한게 맞는지 궁금합니다

작성

·

190

0

public struct MyTransfrom--추후 확장성을 위해 오픈
{
private Vector3 _position;--내부적으로 _position이라는 이름을 저장
public Vector3 position-- _position의 값을 정의하고 가져오기 위함
{
...}
일까요..?
++
private Vector3 _position;
public Vector3 position;
이렇게 써서 한참동안 오류를 찾았었는데요.
안되는 이유가 단순히 세미콜론으로 인해 정의문이 거기서 끝나서 인지 궁금합니다
 
 

답변 1

0

UDevApp님의 프로필 이미지
UDevApp
지식공유자

-- 대신에 // 를 써주시면 더 좋을 것 같습니다. 이게 주석이니까요

public struct MyTransfrom // 1. 추후 확장성을 위해 오픈
{
private Vector3 _position; //2. 내부적으로 _position이라는 이름을 저장
public Vector3 position // 3. _position의 값을 정의하고 가져오기 위함, public Vector3 position;하면 안됨
{
...
}
 
그리고 위의 회색 글씨처럼 하면 안될 것 같습니다.
프로퍼티라서 거기에 세미콜론이 있는 것이 아닙니다.
번호를 매겨서 하나씩 설명드리겠습니다.
 
1. 추후 확장성을 위해 오픈
이 내용을 학습하고 있는 이유가 프로퍼티라는 것을 알아보면서 왜 이것을 사용했을지를 알아보기 위함입니다.
유니티에서 제공하는 Transform 이라는 것이 있는데 이 안에 포지션이 있습니다.
저희가 유니티의 Transform 의 소스코드를 살펴보지 못하기 때문에 MyTransform 이라는 것을 만들어서 이런식으로 되어 있을 것으로 예상하기에 이것을 한번 만들어보고 테스트해보는 것입니다.
-> 유니티의 Transform position 을 예상하고 프로퍼티 기능을 통해 만들어봄, 강의 시작부분에 있는 그림을 참고 하세요.
 
2. 내부적으로 _position이라는 이름을 저장
_position 과 position 은 다른 변수의 이름입니다. _position 은 private 의 변수이고요. position 은 프로퍼티입니다.
이것은 C#에서 지원하는 규칙으로 되는 약속입니다. 저희가 프로퍼티라는 외부에서 접근할 수 있는 변수를 사용하려고 하는데 C# 에서 이것을 제공해주고 있는 기능입니다. 이전 강의에서 getHp, setHp 이런 함수를 만드는 부분이 있을텐데 저희가 hp 변수를 숨기고 getHp , setHp 라는 함수로 사용했습니다. 이러한 방법이 hp 변수를 숨김으로써 객체지향적으로 장점이 있기 때문에 이런식으로 사용합니다. 그런데 타이핑이 너무 길어지기 때문에 C# 언어차원에서 변수를 함수처럼 쓰는 기능을 제공해 주는 것입니다. 그것을 저희가 프로퍼티라고 변수도 아니고 함수도 아닌것을 변수처럼 사용합니다.
-> _position 이라는 내부 숨김 변수를 지정
 
3. _position 의 값을 정의하고 가져오기 위함
2번에서 말씀드린대로 _position 의 값을 정의를 여기서 하지 않고 _position 값은 2번에서 벌써 했습니다. _position 을 사용하던지 그것을 사용하지 않던지의 내용은 저희가 구현하기 나름입니다. 예를 들어서 다음과 같이 구현할수도 있습니다.
 
 
이부분은 이해를 하는 것이 아니라 C#의 규칙이 정해져 있는 것이고 약속이므로 저희는 그것을 따르는 것 뿐입니다.
그러므로 보고 규칙에 맞춰서 외우시고 나서 다시 한번 살펴보시면 좋을 것 같습니다.
이해를 해야 하는 부분은 위에 볼드로 써놓은 부분입니다.
이전 강의에 보시면 함수를 통해서 프로퍼티의 기능을 하는 getHp , setHp 가 있는데요. 그 내용을 한번 보시고 프로퍼티를 직접 구현해놓을 것을 보셔도 좋을 것 같습니다. 이러한 기능이 있는데 프로퍼티를 C#에서 언어차원에서 지원해주고 있는 것 뿐입니다. 기능은 동일하고요.
다시 예를 들어보면 아래처럼 변수를 만들어서요.
MyTransform tr;
tr.pos = new Vector3(1,1,1); // 이렇게 실행하면 set 의 기능이 실행됩니다. 디버그를 찍고 보셔도 좋을 것 같습니다.
Vector3 p = tr.pos; // 여기서 실행을 했을 경우에는 get 안에 내용이 실행됩니다.
 
그리고 유니티의 트랜스폼의 포지션이 이러한 형태로 구현이 되어 있는 것이기 때문에 이 예제를 MyTransform 이라고 만들었습니다.
 
혹시 이해가 아직 안되시면 시간나실때 문자 한번 주시고 전화한번 부탁드립니다. 010-8627-5022 줌으로 잠시 알려드릴께요.
 
 
Jonghyen Lee님의 프로필 이미지
Jonghyen Lee

작성한 질문수

질문하기