오브젝트를 만들면 항상 위치값을 초기화 시켜주어야 한다.
위 기능은 QWER로 선택 가능함.
좌표계(Coordinate)
좌표계가 저장된 공간(Euclidean space) : 수학적으로 만들어진 공간
하지만 우리가 하는 작업은 벡터공간(Vector Space)에서 한다.
유니티는 다이렉트x기반으로 만들어진다.
이 좌표는 앞 또는 뒤를 판단할수있는 기능을 한다.
이것이 정면이다.
Empty 오브젝트든 큐브든 무슨 오브젝트를 만들더라고 트랜스폼 컴포넌트는 붙어있다. 이또한 역시 항상 트랜스폼을 초기화 하는것을 잊지말자
로컬스페이스 -> 월드 스페이스
Vertex
Edge , Triangle 로 구성 되어있다.
Local Coordinate(로컬 좌표계)
Model Coordinate(모델 좌표계)
를 가지고 있다. 이것을 로컬 스페이스(Local Space) 라고 부른다.
(나 자신을 기준으로)
세계을 기준으로, 우리의 위치를 파악할땐 World Space 라고 한다.
(세계를 기준으로)
그래서 월드에 배치되기위해서는 항상 포지션, 로테이션, 스케일이 필요로 하기 때문에
어떠한 오브젝트든 3차원 공간 배치 되기위해선 변환이 필요하고 그 컴포넌트가 바로 Transform 이다.
로컬 좌표계의 기준은 사용자가 정의하지만 지금 만든 큐브는 중앙이 기준점이다.
구분을 위해서 Assets 폴더 안에 20240206_HelloWorld 만들고
안에 Scenes , Script 를 만들어준다 (원래는 이렇게 하는거 아닌거 알지만... 일단은 공부중이기 때문에 구분을 위해 해둔다)
그리고 큐브 컨트롤러 라는 C# 스크립트를 만들어주고 스크립트 폴더 안에 넣어준다
이것이 컴포넌트가 된다.
더블클릭하면 비주얼 스튜디오가 켜지는데 이런식으로 디렉토리 처럼 되어있지 않다면 연결이 안된것이다.
만약 그렇게 되어있지 않다면
Edit -> Preferences 에 들어가서 External Tools에서 비주얼스튜디오를 확인해봐야한다.
또는
기준 폴더에서 sln 파일이 있는지 확인해보고 만약 있는데도 안된다면
이 버튼을 눌러주면 해결이 가능하다 .
만약 내가 만든 cs파일이 MonoBehaviour 의 상속을 받지않으면 컴포넌트의 역할을 할수가 없다.
Unity Life Cycle인데 알고있는것이 좋다.
Start = 시작할때 한번 호출
Update = 매 "프레임" 마다 호출한다
iVal 변수를 넣어주고 유니티를 확인해보면
에서 안보이지만 public 으로 바꾸면
이렇게 확인할수있다 하지만 변수명이 이상하게 바뀌므로 그냥 val로 변경해서 사용한다
그리고 start 에 이런식으러 넣어두고 실행하면
이런식으로 아래에 나온다
코드와 인스펙터는 항상 인스펙터가 우선순위이다.
하지만 public 이기 때문에 클래스에 접근만하면 모든값을 변경할수가 있다.
그래서 이러한 객체지향을 지키고 인스펙트에서 사용할수있는 방법이 있다.
이런식으로 private 앞에 [SerializeField] 붙여주면된다
반대로 퍼블릭인데 안보이게 하는 방법도 있다.
이런식으로 사용하면 반대기능을 하는것이다.
그리고
[SerializeField] private float speed = 10f;
를 클래스 변수로 넣어주고 Update 에서
transform.position = transform.position + (Vector3.forward * speed * Time.deltaTime);
를 넣어줍니다.
그리고 실행을 하면 큐브가 멀리 떠난다.(정면방향으로 이동 시켜주는것이다.)
그리고
[SerializeField, Range(0f,10f)] private float speed = 10f;
Range(0f,10f)를 추가로 넣어주면
이런식으로 speed 를 조정할수있다.