# BallBounce

## Overview

`BallBounce`는 공이 표면과 충돌(바운스)할 때의 상태를 담는 데이터 타입입니다. 충돌 직전의 진행 방향/속도/스핀과 각속도, 충돌 시각과 충돌 후의 방향/속도/스핀 변화, 충돌 지점/법선 등 바운스 이벤트 분석에 필요한 정보를 제공합니다. 리플레이 표시, 물리 파라미터 튜닝, 충돌 반응 디버깅에 활용됩니다.

## Constructors

스크립트에서 직접 생성하지 않습니다. 일반적으로 시뮬레이터/엔진의 충돌 처리 과정에서 바운스 이벤트로 반환되거나 콜백 인자로 전달됩니다.

## Properties

### CFrame

`CFrame`

충돌 지점을 기준으로 한 공의 자세(`HitPosition + HitRotation` 기준). 위치와 회전을 함께 포함합니다.

#### Code Samples

```lua
local bounce = bounce -- 시뮬레이터로부터 받은 BallBounce
print("Bounce CFrame:", bounce.CFrame)
```

### Direction

`Vector3`

충돌 직전의 진행 방향 단위 벡터입니다.

#### Code Samples

```lua
local bounce = bounce
print("Incoming dir:", bounce.Direction)
```

### Speed

`number`

충돌 직전 속도 크기(cm/s).

#### Code Samples

```lua
local bounce = bounce
print("Incoming speed (cm/s):", bounce.Speed)
```

### Spin

`number`

충돌 직전 스핀(각속도 크기, rad/s).

#### Code Samples

```lua
local bounce = bounce
print("Incoming spin (rad/s):", bounce.Spin)
```

### AngularVelocity

`Vector3`

충돌 직전 각속도 벡터(rad/s). 방향은 회전 축, 크기는 각속도입니다.

#### Code Samples

```lua
local bounce = bounce
print("Incoming ang vel:", bounce.AngularVelocity)
```

### BouncedTime

`number`

바운스 발생 시각(초). 시뮬레이션 타임라인 상의 시간값입니다.

#### Code Samples

```lua
local bounce = bounce
print("Bounce time (s):", bounce.BouncedTime)
```

### BouncedDirection

`Vector3`

충돌 이후의 진행 방향 단위 벡터입니다.

#### Code Samples

```lua
local bounce = bounce
print("Outgoing dir:", bounce.BouncedDirection)
```

### BouncedSpeed

`number`

충돌 이후 속도 크기(cm/s).

#### Code Samples

```lua
local bounce = bounce
print("Outgoing speed (cm/s):", bounce.BouncedSpeed)
```

### BouncedSpin

`number`

충돌 이후 스핀(각속도 크기, rad/s).

#### Code Samples

```lua
local bounce = bounce
print("Outgoing spin (rad/s):", bounce.BouncedSpin)
```

### BouncedAngularVelocity

`Vector3`

충돌 이후 각속도 벡터(rad/s).

#### Code Samples

```lua
local bounce = bounce
print("Outgoing ang vel:", bounce.BouncedAngularVelocity)
```

### bIsSliding

`boolean`

충돌 후 접촉 표면에서 미끄러지는(sliding) 상태인지 여부입니다.

#### Code Samples

```lua
local bounce = bounce
print("Is sliding:", bounce.bIsSliding)
```

### StartPos

`Vector3`

바운스 시뮬레이션 구간의 시작 위치입니다.

#### Code Samples

```lua
local bounce = bounce
print("Start pos:", bounce.StartPos)
```

### BouncedPosition

`Vector3`

충돌 지점의 위치입니다.

#### Code Samples

```lua
local bounce = bounce
print("Hit position:", bounce.BouncedPosition)
```

### BouncedRotation

`CFrame`

충돌 지점의 회전(자세). 코드상 `FQuat`로 보관되지만 문서에서는 `CFrame`으로 표기합니다(회전 성분).

#### Code Samples

```lua
local bounce = bounce
print("Hit rotation:", bounce.BouncedRotation)
```

### ImpactPoint

`Vector3`

충돌 접촉점의 월드 좌표입니다.

#### Code Samples

```lua
local bounce = bounce
print("Impact point:", bounce.ImpactPoint)
```

### ImpactNormal

`Vector3`

충돌 표면의 법선 벡터입니다(표면에 수직한 방향).

#### Code Samples

```lua
local bounce = bounce
print("Impact normal:", bounce.ImpactNormal)
```

## Methods

현재 외부에 노출되는 메서드는 없습니다.

## See also

{% content-ref url="../classes/simulationball" %}
[simulationball](https://docs.overdare.com/korean/development/api-reference/classes/simulationball)
{% endcontent-ref %}
