Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Total
관리 메뉴

만재송

[Cocos Creator] Physics Manager 정복하기(3) - RigidBody 본문

프로그래밍/COCOS Creator

[Cocos Creator] Physics Manager 정복하기(3) - RigidBody

만재송 2018. 7. 26. 11:26

RigidBody 란


리지드바디는 물체의 위치를 제어합니다. 여기서 위치제어는 중력에 영향에 의해 물체를 아래로 떨어지도록 만들고 속도값을 부여해 앞으로 나아가게 할수도 있습니다. 또한 회전값을 주어 회전도 가능하게 할 수 있죠. 리지드바디의 역할은 단순히 물체에 운동성만 부여할 뿐, 충돌과 관련된 일에는 관여하지 않습니다. 처음에 테스트 했었던 터치시 rigidBody Component 가 아닌 Coliider Component 값을 가져오는것도 이유중 하나입니다.


Physics Component 를 추가하면 Collider와 RigidBody Component가 생성됩니다. 여기서 중요한것은 collider 와 rigidbody 의 관계입니다. 다른 컴포넌트이지만 둘은 밀접한 관계를 가지고 있습니다. 왜냐하면 rigidBody를 먼저삭제 할 수 없기 때문입니다. 물리적인 일에 영향을 받는 컴포넌트는 rigidBody 인데 그것을 삭제하면 Collider 는 필요가 없어지기 때문입니다. 혹시나 코드상으로 컴포넌트를 삭제할때 꼭 Collider 를 먼저삭제하고 rigidBody를 삭제하시기 바랍니다.



기능들


rigidBody의 프로퍼티와 메서드를 사용하기 위해 기존 프로젝트에 Orange 스크립트를 만들고 오렌지 노드에 추가해 줍니다.



추가한 Orange스크립트에 rigidBody 컴포넌트를 저장하고 기본세팅을 아래와 같이 합니다.


cc.Class({
extends: cc.Component,

properties: {

},

onLoad: function () {
// rigidBody 컴퍼넌트를 가져온다.
this.rigidBody = this.node.getComponent(cc.RigidBody);
},

start: function () {

}
});



질량


질량은 밀도와 노드크기에 맞춰서 자동으로 설정됩니다. 힘계산을 할 때 사용할 수 있습니다.


var mass = this.rigidBody.getMass();
console.log(mass);


속도


속도는 물체의 이동을 담당합니다.


this.rigidBody.linearVelocity = cc.v2(-100, 0);


linearVelocity 는 속도 값을 설정합니다. 초당 이동하는 픽셀 값이며 원하는 x, y 을 설정합니다.


this.rigidBody.linearDamping = 0.5;


linearDamping 은 속도의 댐핑을 설정합니다. 시간에 따라 속도가 감소합니다. 0이상의 값을 넣어야 하며 소수점 단위 입니다.


값을 설정하고 코드를 실행하면 아래와 같은 결과가 나옵니다.




각속도


각속도는 물체의 회전을 담당합니다.


this.rigidBody.angularVelocity = 150;

angularVelocity 는 각속도 값을 설정합니다. 초당 회전하는 각도 값입니다.


this.rigidBody.angularDamping = 0.5;


angularDamping 은 각속도의 댐핑을 설정합니다. 시간에 따라 회전률이 감소합니다. 0이상의 값을 넣어야 하며 소수점 단위 입니다.


값을 설정하고 코드를 실행하면 아래와 같은 결과가 나옵니다.




충돌 리스너 설정


this.rigidBody.enabledContactListener = true;


enabledContactListener 는 충돌했을 때 콜백을 전송할지에 대한 유무를 설정합니다. false 일 때는 충돌했을 때 콜백이 일어나지 않습니다.


타입


rigidBody는 크게 4개의 타입을 가지고 있습니다.


cc.RigidBodyType.Static: 중력이나 힘의 영향을 받지 않지만 위치는 변경할 있는 정적 바디
cc.RigidBodyType.Dynamic: 질량, 중력, 속도 모두 영향을 받는 바디
cc.RigidBodyType.Kinematic: 중력의 영향만 받지 않는 바디
cc.RigidBodyType.Animated: Kinematic과 유사하지만 주로 애니메이션과 결합하여 사용하는 바디


예로들어 벽같은 물체는 Static으로 하면 충돌해도 날아가지 않는 단단한 물체를 만들 수 있습니다.


절대좌표


var worldPos = this.rigidBody.getWorldPosition();
console.log(worldPos);


getWorldPosition 는 현재 물체의 절대 좌표를 가져옵니다.


cc.Class({
extends: cc.Component,

properties: {

},

onLoad: function () {
// rigidBody 컴퍼넌트를 가져온다.
this.rigidBody = this.node.getComponent(cc.RigidBody);

// 속도 값을 설정. 초당 이동하는 픽셀 값이다.
this.rigidBody.linearVelocity = cc.v2(-100, 0);

// 속도 댐핑 설정. 시간에 따라 현재 속도가 감소한다. 0 이상의 값을 넣어야하며 소수점 단위이다.
this.rigidBody.linearDamping = 0.5;

// 각속도 설정. 초당 회전하는 값이다.
this.rigidBody.angularVelocity = 150;

// 각속도 댐핑 설정. 시간에 따라 현재 각속도가 감소한다. 0 이상의 값을 넣어야하며 소수점 단위이다.
this.rigidBody.angularDamping = 0.5;

// 해당 리스너가 true 여야만 충돌이 발생할 때 콜백을 전송한다.
this.rigidBody.enabledContactListener = true;

// rigidBody 타입
/**
* cc.RigidBodyType.Static: 중력이나 힘의 영향을 받지 않지만 위치는 변경할 수 있는 정적 바디
* cc.RigidBodyType.Dynamic: 질량, 중력, 속도 모두 영향을 받는 바디
* cc.RigidBodyType.Kinematic: 중력의 영향만 받지 않는 바디
* cc.RigidBodyType.Animated: Kinematic과 유사하지만 주로 애니메이션과 결합하여 사용하는 바디
*/
this.rigidBody.type = cc.RigidBodyType.Dynamic;
},

start: function () {
// 바디의 질량. 밀도와 사이즈크기에 맞춰서 자동으로 설정된다.
var mass = this.rigidBody.getMass();
console.log(mass);

// 현재 노드의 절대좌표를 가져온다.
var worldPos = this.rigidBody.getWorldPosition();
console.log(worldPos);
}
});


Comments