(https://youtu.be/S287iwsU2bE)
기존에 존재하던 코드를 재사용해(덧붙여) 다른 오브젝트를 만듦. 이를 통해 작성해야 하는 코드의 양을 줄일 수 있다.
랜더링 : 그림을 그려주는 기능
하지만 생각보다 상속을 통한 재활용이 효율적이지 않았음. -> 컴포지션 등장
미리 부품(컴포넌트)들을 만들고 필요한 부품들을 조립하여 오브젝트로 사용
장점 : 오브젝트에 필요한 컴포넌트는 그냥 넣어주면 되고, 필요 없으면 빼주면 된다. 또한 컴포넌트를 넣고 빼는 것에 오브젝트에 대한 그 기능의 존재 유무만 영향을 줄 뿐 어떠한 에러도 발생시키지 않는다.
Unity에서의 컴포지션
Cube라는 게임 Object에 4가지 component가 조합되어 있다.
Transform : 위치, 크기, 회전 담당. 이 기능으로 공간 상에서 좌표를 가질 수 있음.
Mesh filter : 그래픽의 외곽선
Box collider : 물리적인 표면. 다른 물체간의 통과를 막을 수 있다.
Mesh Renderer : 그래픽 외곽선을 따라 실제로 그림을 그려줌.즉, base에서 하나하나 코드를 짜는 것이 아니라 이미 만들어진 component들을 추가하여 Object를 완성한다.
또한 기능들을 빼준다 해서 Object에 에러가 생기는 것이 아닌, 그 기능만 존재하지 않게 된다.
- 예를들어, box collider를 빼면 물체끼리 통과가 가능할 뿐 에러가 생기는 것이 아니다
1. Unity가 Hello를 수행하라는 메세지를 broadcasting
2. 모든 Object들이 메세지를 받고 확인
3. 자신에게 해당하는 내용인 경우 Hello수행
4. 자신에게 해당하지 않는 내용이라면 에러를 발생시키는 것이 아니라 그냥 무시
1. A와 B object가 서로 부딪혔을때
2. A와 B는 서로 부딪힌 사실을 모름. 각 object의 component도 부딪혔다는 사실을 모름
3. 대신에 rigidbody component가 OnCollision이라는 메세지를 broadcast
4. A, B는 충돌했다는 사실을 모르지만, 메세지를 받고 자신들에게 해당하는 내용임을 확인
5. 그리고 collision에 해당하는 충돌처리를 실행