탁구채로 탁구공 튕기기
VR/Oculus Integration 2023. 12. 22. 18:21 https://youtube.com/playlist?list=PLTFRwWXfOIYB9hru6EjeVS0E-4jNiOuQQ&si=zoJ3NoYX6YrGnpg1
Racket구조
![](https://blog.kakaocdn.net/dn/bFuJWg/btsCzElUbtO/moeK04dGCcalI8M6hGxBc0/img.png)
![](https://blog.kakaocdn.net/dn/OhbiV/btsCy6ps3Al/reQl5gj8P5pqcr2twxmtak/img.png)
![](https://blog.kakaocdn.net/dn/bq8AkO/btsCzUa75yy/GJx2tnoP2QTw1jPjEppIV0/img.png)
![](https://blog.kakaocdn.net/dn/bHJ9rL/btsCEI8RudX/2yZRKUn15ldRPQbam7frP1/img.png)
![](https://blog.kakaocdn.net/dn/N3uzd/btsCF8lYRTF/hwGjSMkZORVi9IrsljHmT0/img.png)
![](https://blog.kakaocdn.net/dn/IUwZo/btsCAgymmpU/8RkqQaEyJ84QKvTQlW91t0/img.png)
![](https://blog.kakaocdn.net/dn/WtkBS/btsCyys1hDK/E2Ho1dr28oGY4Ps8C16KZK/img.png)
![](https://blog.kakaocdn.net/dn/coyScA/btsCyqaQxJp/xAzTZqJARszcQLzIsKx200/img.png)
Ball 구조
![](https://blog.kakaocdn.net/dn/6J7bw/btsCCzK8EuU/DZQKKQCoMXxPYSfBBWYyS0/img.png)
![](https://blog.kakaocdn.net/dn/chfT6B/btsCycReRyY/rzHlolizUsaMp5Tq1uqAcK/img.png)
![](https://blog.kakaocdn.net/dn/dtpF4b/btsCANbLTfn/HrX3w2EekzIoeRtfa31CZ1/img.png)
![](https://blog.kakaocdn.net/dn/Vn4DS/btsCCw1UYfu/YkELm7lbjJV7ggKl1MA3H1/img.png)
![](https://blog.kakaocdn.net/dn/bo3Ckd/btsCypXimDQ/PR7bteUAPfqvhJxaCB8Kyk/img.png)
![](https://blog.kakaocdn.net/dn/bopgNP/btsCywWglmJ/fJKS70BMGHV6CkXpeVQMO1/img.png)
![](https://blog.kakaocdn.net/dn/bkT3vZ/btsCAMqmTD5/cu3LbgfI373IXzh8KeLv21/img.png)
![](https://blog.kakaocdn.net/dn/cyCoB8/btsCIGJuKAc/i7PdKZHxVl5hZ0SLH3YOYk/img.png)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
public float gravity = -9.8f;
void Start()
{
// 중력 크기 조절 예시 (Y축 방향의 중력)
Vector3 customGravity = new Vector3(0f, gravity, 0f); // 중력 크기 및 방향 설정
Physics.gravity = customGravity; // 중력 크기 적용
}
}
![](https://blog.kakaocdn.net/dn/bV4hqp/btsCybx1o3B/9bDNdRkjhNVrmi1brWuNq1/img.png)
터널링 방지를 위한 물리 콜라이더
![](https://blog.kakaocdn.net/dn/cF0YB4/btsCDhQ3E6g/u6I3YzHCTYmhYj3rMrThVK/img.png)
![](https://blog.kakaocdn.net/dn/bb3VxH/btsCG2zeSNw/uelSt4ty54h3DFbfFVI2Sk/img.png)
![](https://blog.kakaocdn.net/dn/q9u8P/btsCJk7rXPd/TQy2VSXDsX8ypzi8CsSXU0/img.png)
물리 메터리얼
![](https://blog.kakaocdn.net/dn/kPHFb/btsCAgSAV0x/pCFXawxpoFXphEOLhfZlIK/img.png)
![](https://blog.kakaocdn.net/dn/W7Nze/btsCJkGnbh0/Rgel9HkU6gUojh6PMnrPnK/img.png)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PhysicsCollider : MonoBehaviour
{
private Rigidbody rBody;
[SerializeField] private Transform target;
private Vector3 previousPosition;
private Quaternion previousRotation;
void Start()
{
this.rBody = this.GetComponent<Rigidbody>();
previousPosition = target.position;
previousRotation = target.rotation;
}
private void FixedUpdate()
{
if (target != null)
{
// 현재 위치 및 회전을 저장합니다.
Vector3 currentPosition = target.position;
Quaternion currentRotation = target.rotation;
// 이전 위치 및 회전과 현재 위치 및 회전 간의 차이를 계산합니다.
Vector3 positionDelta = currentPosition - previousPosition;
Quaternion rotationDelta = currentRotation * Quaternion.Inverse(previousRotation);
// 이전 위치와 현재 위치 간의 거리를 계산합니다.
float distance = Vector3.Distance(previousPosition, currentPosition);
// 거리가 일정 값 이상인 경우에만 보간을 적용합니다.
if (distance > 0.001f)
{
float t = Time.fixedDeltaTime * 100f; // 조절 가능한 보간 계수
this.rBody.MovePosition(Vector3.Lerp(this.rBody.position, currentPosition, t));
this.rBody.MoveRotation(Quaternion.Slerp(this.rBody.rotation, currentRotation, t));
}
else
{
// Rigidbody에 이동과 회전을 적용합니다.
this.rBody.MovePosition(this.rBody.position + positionDelta);
this.rBody.MoveRotation(this.rBody.rotation * rotationDelta);
}
// 현재 위치 및 회전을 이전 값으로 업데이트합니다.
previousPosition = currentPosition;
previousRotation = currentRotation;
}
}
}
'VR > Oculus Integration' 카테고리의 다른 글
Oculus Integration SDK Hand & Materials (0) | 2024.01.03 |
---|---|
활시위 당기는 법 (0) | 2023.12.22 |
OneGrabPhysicsJointTransformer (0) | 2023.12.20 |
Grabbable (Two Grab Transformers) (0) | 2023.12.19 |
Grabbable (0) | 2023.12.18 |