A,D키를 이용한 좌우이동을 구현해보고 있는데
transform.Translate(new Vector2(x,y));
이런 형식의 코드를 짰었습니다.
여기서 transform 클래스의 Translate() 함수를 썼다는 것은 이해했는데,
함수에 입력해준 new Vector2(x,y)에서 'new'라는 것을 모르겠었습니다.
찾아보니 Vector2(x,y)의 값을 인스턴스화해서 입력해준다는 거라던데,
Vector2(x,y) 함수에서 도출된 값을 Translate가 받을 수 있도록 바꿔주는건가요?
( '인스턴스화'가 잘 와닿지 않습니다. 클래스에서 정의한 걸 토대로 실제 메모리를 사용해서 생겨난 것이 인스턴스라던데.. )
잘 짚고 넘어가야 할 것 같아서요 ㅠㅠ 애초에 C# 기초 개념이라 따로 C#만을 공부해봐야 하나 싶고요
빡대가리라 죄송합니다
유니티의 Vector2는 클래스가 아니라 구조체임. 이동을 시키기 위해선 벡터(float 값 2개)가 필요할테니 Vector2라는 구조체를 이용해 2개를 같이 보내는 거고.
클래스랑 구조체의 차이는 제쳐두고... Vector2라는 형식은 'float값 2개를 가지는 인스턴스의 거푸집', 너가 new를 통해 입력인자로 넣어준 (x,y)는 그 거푸집으로 만든 실제 메모리 상의 인스턴스
클래스는 변수/메소드를 저장하고 있는 틀(거푸집)이고, 인스턴스는 클래스를 기반으로 해서 만들어진 것이라고 이해했습니다. 구조체는 데이터를 저장할 수 있는 캡슐이구요. 제가 질문한 코드 transform.Translate(new Vector2(x,y));는 transform클래스의 기능(함수) Translate()가 요구하는 데이터가 x값과 y값 두개를 요구하는데 제가 여기에 Vector2(x,y) 구조체의 값을 인스턴스화(클래스 기반 실체로 바꾸는 것)해서 Translate()가 요구하는 x,y값을 넣어준 걸까요?
ㅇㅇ Vector2를 타입을 함수가 요구하니 거기에 맞는 타입을 new로 만들어서 집어넣어준거임
감사합니다ㅠㅠㅠ 한참 꼬여있다가 선생님들 덕에 해결했네요 ㅠㅠ
new Vector(값, 값, 값) 을 하면앞에 new 라는 키워드가너가 보낼 위치 데이터를 생성시켜주는거임그럼 위치 데이터가 그 변수에 담기는거고그 위치 데이터를 함수에 매개변수로 전달하면함수는 그 위치데이터만큼 캐릭터를 이동시켜주겠지?
윗댓에 답글로 이해한 부분 달아놨는데, 맞을까요?
+) 감사합니다 !
인스턴스의 개념정도는 하면서 겪다보면 익혀지는거긴 한데 씨샵 기초는 공부하고 들어가면 편하긴 함 / 말하는 부분응 씨샵에 대한 이해보다도 추상적인 사고 연습이 되어있어야 하는 부분인데, 너는 Vector2에 해당하는 무언가가 필요한데 현실세계에 Vector2에 해당하는 것이 아무것도 없는 상황임. 그래서 new 라는 주문을 써서 상상 속에서 현실로 Vector2 에 해당하는 무언가를 소환했다고 생각하면 됨
감사합니다!! 맨 윗댓에 이해한 부분 달아놨는데 한 번만 더 봐주실 수 있을까요?
응 Translate가 파라미터로 요구하는 타입중 너는 Vector2를 받는걸 사용하는 거고, 만약 다른 타입을 넣으면 거기 맞춰서 컴파일 될때 오버로딩 된 메서드들 중에 적절한 메서드를 너가 넣은 파라미터 타입에 맞춰서 바이너리 코드로 바꿔줄거임. new 키워드로 인스턴스 생성할때, 구조체의 경우에 스택 메모리에 할당되어서 해당 데이터 값이 직접 저장됨. 클래스의 경우에는 힙 메모리에 저장되고 스택에는 데이터에 대한 참조를 가지고 있는 방식으로 스택이 힙을 바라보는 방식이 되는거고.
감사합니다!!