Physics.BoxCast

jkjkbk·2023년 6월 14일
0

Unity

목록 보기
11/16

Physics.BoxCast

Declaration

public static bool BoxCast(Vector3 center, Vector3 halfExtents, Vector3 direction, out RaycastHit hitInfo, Quaternion orientation = Quaternion.identity, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

Parameters

Vector3 center

박스의 시작 중심 위치

Vector3 halfExtents

박스 크기를 정의하는 세 개 축의 각 길이의 절반값들

Vector3 direction

박스 모양을 쏠 방향

RaycastHit hitInfo

콜라이더와 충돌 정보

Quaternion orientation

쏘는 박스의 회전값

float maxDistance

박스를 쏘는 최대 거리(충돌 지점과의 direction으로 최대 거리는 halfExtents 값 + maxDistance)

int layerMask

충돌 목표 레이어(충돌 가능한 레이어)

QueryTriggerInteraction queryTriggerInteraction

Ignore이면 Trigger 콜라이더와의 충돌은 무시
Collide이면 Trigger와 상관없이 콜라이더와 충돌 검출
UseGlobal이면 Edit > Project Settings > Physics > Layer Collision Matrix 설정을 따름

Returns

충돌이 검출되면 true. 아니라면 false

Description

박스 모양을 쏘아 충돌을 검출

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

public class BoxcastTest : MonoBehaviour
{
    public float distance;
    public Vector3 boxSize;

    public bool isHit;
    public RaycastHit hit;

    public Vector3 rotationAngles;

    void FixedUpdate()
    {
        isHit = Physics.BoxCast(transform.position, boxSize, Vector3.forward, out hit, Quaternion.Euler(rotationAngles), distance, Physics.DefaultRaycastLayers, QueryTriggerInteraction.UseGlobal);
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawRay(transform.position, Vector3.forward * distance);
        Gizmos.DrawWireSphere(transform.position + Vector3.forward * distance, 3f);

        if (isHit)
        {

            Gizmos.color = Color.green;
            Vector3 position = hit.point;
            Gizmos.DrawWireSphere(hit.point, 2f);

            Gizmos.color = Color.yellow;
            Vector3 impact = hit.point - transform.position;
            float l = Vector3.Dot(Vector3.forward, impact);
            Vector3 a = transform.position + Vector3.forward * l;
            a -= Vector3.forward * boxSize.z;

            Gizmos.DrawWireCube(a, boxSize * 2f);
        }
    }
}

rotation을 설정하기 전

(z:45)rotation을 설정 한 후

충돌 지점으로 모양을 추론하면 회전된 것을 알 수 있음. 대체로 충돌 지점들이 왼쪽위에서 오른쪽아래 대각선으로 방향으로 분포함

0개의 댓글