Unity 기본 물리 시스템의 강체 구성 요소에서 이동, 충돌 및 트리거 감지

       중력 시스템은 Unity에서 게임이나 애플리케이션을 만들 때 매우 중요한 구성 요소입니다. 지구의 중력에 의해 영향을 받는 개체를 시뮬레이션하고 사실적인 물리적 효과를 생성할 수 있습니다. Unity에서는 Rigidbody 구성 요소와 중력 벡터를 사용하여 중력 시스템을 제어할 수 있습니다.

       먼저 Unity에서 오브젝트를 생성하고 강체로 만듭니다. 장면에서 개체를 선택하고 Inspector 패널에서 "Is Kinematic" 옵션을 선택하여 개체가 다른 힘의 영향을 받지 않도록 할 수 있습니다.

먼저 중력 구성 요소인 Rigidbody를 살펴보겠습니다. 

Mass : 물체의 질량

Resistance (Drag) : 모의실험 중 마주치는 저항

Angular Drag(AngularDrag) : 회전 시뮬레이션 시 받는 저항

Use Gravity (UseGravity) : 중력 사용 여부

IsKinematic : 역학 활성화 여부, 오브젝트를 선택하지 않으면 중력 낙하가 없습니다.

Interpolate : 물체의 움직임 위치에 대한 Interpolator 

충돌 감지(CollisionDetection): 충돌 감지 빈도를 높일 수 있습니다.

Constraints : 강체 모션을 제어하는 ​​Constraints


 

충돌 감지 조건

1. 두 개체 모두 충돌 바디 구성 요소를 포함해야 합니다.

2. 하나 이상의 객체에 강체 구성 요소가 포함되어 있습니다.

충돌 감지 방법

OnCollisionEnter( Collision collisionInfo ) 두 개체가 충돌하기 시작할 때 한 번 트리거
OnCollisionExit( Collision collisionInfo ) 두 개체가 충돌할 때 한 번 트리거 end
OnCollisionStay( Collision collisonInfo ) 두 개체가 계속 충돌할 때 트리거

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RigCollisionTest : MonoBehaviour
{

    void OnCollisionEnter(Collision other)
    {
        Debug.Log("碰撞开始");
    }

    void OnCollisionStay(Collision other)
    {
        Debug.Log("持续碰撞");
    }

    void OnCollisionExit(Collision other)
    {
        Debug.Log("碰撞结束");
    }
}

 

트리거 감지 조건

1. 두 개체 모두 충돌 바디 구성 요소를 포함해야 하며 개체 중 하나가 트리거로 확인됩니다.

2. 하나 이상의 객체에 강체 구성 요소가 포함되어 있습니다.

탐지를 트리거하는 방법

OnTriggerEnter( Collider other ) 두 객체가 충돌하기 시작할 때 한 번 트리거
OnTriggerExit( Collider other ) 두 객체의 충돌이 끝날 때 한 번 트리거
OnTriggerStay( Collider other ) 두 객체가 계속 충돌할 때 한 번 트리거

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TriggerTest : MonoBehaviour
{

    void OnTriggerEnter(Collider other)
    {
        Debug.Log("触发开始");
    }

    void OnTriggerStay(Collider other)
    {
        Debug.Log("持续触发");
    }

    void OnTriggerExit(Collider other)
    {
        Debug.Log("触发结束");
    }
} 

 

 다음은 Unity에서 Rigidbody 구성 요소를 사용하여 이동하고 점프하는 방법을 보여주는 간단한 예제 코드입니다.

using UnityEngine;

public class GravityDemo : MonoBehaviour
{
     Rigidbody m_Rigidbody;
    //移动速度
    public float m_Speed = 20f;
    //跳跃力
    public float jumpforce = 200;
    void Start()
    {
        m_Rigidbody = GetComponent<Rigidbody>();
    }

    void Update()
    {

        float hor = Input.GetAxis("Horizontal");
        float ver = Input.GetAxis("Vertical");
        Vector3 m_Input = new Vector3(hor, 0, ver) * Time.deltaTime * m_Speed;
        //移动
        m_Rigidbody.MovePosition(transform.position + m_Input);

        if (Input.GetKeyDown(KeyCode.E))
        {
            //跳跃
            m_Rigidbody.AddForce(transform.up * jumpforce);
        }
    }

} 

 

추천

출처blog.csdn.net/qq_36592993/article/details/131513786