Artgineer_기술 배우는 아티스트
[Unity]구체 드롭 시뮬레이션(Slide_drop) 본문
구체에 Rigidbody를 부여, Collider를 구체와 슬라이드에 할당하여 시뮬레이션을 구현했습니다.
유니티 3d 프로젝트에서 매개변수는 대체로 기본값으로만 사용하는것이 가장 좋지만
좀 더 현실과 유사하게 하고자한다면 세부 컨트롤이 필요할 수 있다.
rigidbody는 기본적으로 할당 된 오브젝트가 물리엔진과 상호작용 하도록 되어있는데, Mass(질량)과 Drag(공기 저항), Angular Drag(회전 저항) 같은 값을 조정하여 실제 물리환경에 맞출 수 있다.
물체가 움직이는 방식에 영향을 미치기 때문에 물리 엔진의 정확도를 높이려면 질량, 속도, 중력 등의 세부 조절이 필요하다.
Collider는 기본은 단순한 형태로, 정확한 충돌을 위해서는 오브젝트 모델링을 최적화해야 한다.
너무 다각화 된 메쉬는 데이터 처리에 방해를 줄 수도 있고, 너무 단순한 메쉬는 원하는 결과를 얻지 못할 수 있기 때문에 적절한 옵션 조절이 필요하다.
Box나 Sphere, Cylinder 같은 단순한 형태의 경우 Mesh Collider 보다는 Box Collider 등을 할당하는것이 좋을 수 있다.
using UnityEngine;
public class SimulationController : MonoBehaviour
{
public GameObject ball; // 구체
private Rigidbody ballRigidbody;
private Vector3 initialPosition; // 구체의 초기 위치
private Quaternion initialRotation; // 구체의 초기 회전
private bool isPaused = false; // 일시중지 상태
void Start()
{
if (ball != null)
{
ballRigidbody = ball.GetComponent<Rigidbody>();
// 초기 위치와 회전 저장
initialPosition = ball.transform.position;
initialRotation = ball.transform.rotation;
}
}
void Update()
{
// Spacebar로 Pause/Resume 토글
if (Input.GetKeyDown(KeyCode.Space))
{
TogglePause();
}
// R키로 Reset
if (Input.GetKeyDown(KeyCode.R))
{
ResetSimulation();
}
}
// Pause/Resume 기능
public void TogglePause()
{
isPaused = !isPaused;
if (isPaused)
{
Time.timeScale = 0; // 시간 흐름 멈춤
if (ballRigidbody != null)
{
ballRigidbody.isKinematic = true; // 물리 중지
}
}
else
{
Time.timeScale = 1; // 시간 흐름 재개
if (ballRigidbody != null)
{
ballRigidbody.isKinematic = false; // 물리 재개
}
}
}
// Reset 기능
public void ResetSimulation()
{
// 시간 및 물리 초기화
Time.timeScale = 1;
isPaused = false;
if (ball != null)
{
// 구체를 초기 위치와 회전으로 이동
ball.transform.position = initialPosition;
ball.transform.rotation = initialRotation;
// Rigidbody 속도 초기화
if (ballRigidbody != null)
{
ballRigidbody.linearVelocity = Vector3.zero;
ballRigidbody.angularVelocity = Vector3.zero;
}
}
}
}
위 접은글은
스페이스바로 일시정지/시작 을 할 수 있고,
R 버튼으로 Reset 을 할 수 있는 스크립트이다.
스크립트를 빈 오브젝트에 할당해주고 각각 Sphere를 연결해주면 된다.
'Unity & C# 📂' 카테고리의 다른 글
유니티 교과서 익히기 1 (2) | 2024.11.25 |
---|---|
ChatGPT와 함께 Unity로 FPS 게임 개발하기 - 프롤로그 (0) | 2024.11.01 |