유니티

유니티 물리처리 rigidbody

파란색까마귀 2022. 2. 13. 22:14

2016. 3. 4. 18:20

https://blog.naver.com/nagne2011/220645641861

 

using UnityEngine;
using System.Collections;
 
[RequireComponenet typeof(Rigidbody);] //rigidbody를 바로 포함시켜준다
public class capsuleMove : MonoBehaviour {
 
    private Rigidbody rigid;
 
    // Use this for initialization
    void Start () {
        rigid = GetComponent<Rigidbody>(); //Rigidbody를 리턴해준다;
    }
    
    // Update is called once per frame
    void Update () {
        Debug.Log("update");
    }
    void FixedUpdate()
    {
        Debug.Log("Fixedupdate");    //물리 업덷이트 갱신은 fame단위가 아니기 때문에 fixedupdate에서 갱신해줘야한다
        if (Input.GetButtonDown ("Jump")) 
        {
            Debug.Log("space");
            //rigid.AddForce(0,100,0);            //world좌표 기준
            rigid.AddRelativeForce(0,100,0);      //자기 local좌표 기준
        }
    }
 
    //충돌 함수
    void OnCollisionEnter(Collision collision)
    {//충돌된 직후 발동
        //collision.gameObject = 충돌한 물체
        Debug.Log(collision.gameObject);                            //부딪힌 대상
        foreach (ContactPoint contact in collision.contacts) {        //부딪힌 위치
            Debug.Log("ContactPoint :" + contact.point);    //부딪힌 지점
            Debug.Log("ContactNormal :" + contact.normal);     //부딪힌 것에 대한 nomal값
 
        }
    }
    void OnCollisionStay(Collision collision)
    {//지속되고 있는동안 계속
    }
    void OnCollisionExit(Collision collision)
    {//충돌이 끝난 순간
    }
}

1. AXIS이용하기

Edit -> Project Settings -> Input 

에서 확인 가능하다

if (Input.GetButtonDown ("Jump")) 

이런 식으로 GetButton을 사용후 Axis에서 해당 키의 "이름"을 입력하면 됨

 

2. Rigidbody

-모든 물리속성을 담당.

리지드바디가 있어야 '물리적인 작용을 한다고 인식함

.

mass 질량, 물체끼리 부딪혔을때 상호작용조절

drag 마찰

angular drag 회전마찰력

use Gravity 중력적용

 

in kinematic 

물리작용을 스크립트로만 받음

{

회전하는 큐브는 외부의 힘에 반응하지 않는다는 선언을 한 상태(Is Kinematic)이므로 충돌에는 물리엔진이 충돌반응을 계산하지 않지만 외부에서 강체가 충돌한 경우에는 OnCollisionEnter 함수는 호출된다. 충돌해오는 작은 큐브가 강체가 아니기 때문에 충돌탐지가 안되는 것이며 작은 큐브에 Rigidbody 콤포넌트를 추가하면 OnCollisionEnter 함수가 호출된다. 또 회전하는 큐브가 강체로 선언된 경우에는 Is Kinematic 을 설정한 상태에서도 외부의 다른 오브젝트들에게는 일반적인 강체 오브젝트로 간주되므로 Rigidbody 콤포넌트를 추가한 경우와 추가하지 않은 경우에는 분명한 차이가 있다

 

특정 오브젝트가 외부의 힘에 물리적 반응을 보일 필요가 없다면 그 오브젝트에 Rigidbody 콤포넌트를 설정할 필요는 없지만 Rigidbody 를 설정하지 않으면 다른 제2의 오브젝트가 충돌할 때 제2의 오브젝트 입장에서는 Rigidbody 를 설정하지 않은 오브젝트와의 충돌을 탐지할 수 없는 것이다.

}

interpolate 물리작용시, 반응속도가 빠른지 느린지

collision detction 충돌 체크를 얼마나 상세하게 체크하느냐

 

constraints

Freeze position/rotation xyz에 대한 동결

 

3. 충돌체크

업뎃을 갱신하는 시간은 frame단위가 아니라,

Edit -> Project Settings -> physics의

sleep threshold에서 확인 가능하다

 

4. 물리 고유의 재질

asset -> 우클릭 -> physicMaterial

friction : 마찰력

bounciness : 탄성(0~1)

728x90

'유니티' 카테고리의 다른 글

유니티 Character Controller  (0) 2022.02.13
유니티 2D 스프라이트 활용  (0) 2022.02.13
유니티 튜토리얼 - TANKS! - 2  (0) 2022.02.13
유니티 튜토리얼 - TANKS! - 1  (0) 2022.02.13
유니티 Ray  (0) 2022.02.13