Cube 만들기
- Hierarchy창 빈공간 마우스 우클릭
- 3D Object > Cube 선택하여 큐브 만들기
- 큐브 선택후 Inspector창에서 Add Component
Physics > RigidBody 선택하여 강체(rigidBody)컴퍼넌트 추가rigidBody를 사용하지 않습니다.
- World : 가상 3D공간 안에서의 3차원 좌표 (x,y,z)
- Screen : 모니터에 투영되는 2차원 좌표(x,y)
- 서로 다르기 때문에 좌표변환이 필요함
- WorldToScreenPoint : 3차원 좌표를 2차원 좌표로
- ScreenToWorldPoint : 2차원 좌표를 3차원 좌표로
C# script
- DragObject.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragObject : MonoBehaviour
{
private Vector3 mouse_offset; //마우스가 어긋난 양
private float screen_z; //스크린의 깊이(z)값
//private Rigidbody myRigid; //물체의 강체
/*
void Start()
{
myRigid = GetComponent<Rigidbody>(); //강체의 참조를 가져오기
}
*/
void OnMouseDown()
{
screen_z = Camera.main.WorldToScreenPoint(this.gameObject.transform.position).z;
//메인 카메라로부터 이(this)게임오브젝트를 봤을때의 z값
mouse_offset = gameObject.transform.position - GetMouseWorldPos();
//offset 변위차
}
private Vector3 GetMouseWorldPos()
{
Vector3 mousePoint = Input.mousePosition; //입력장치로 부터 마우스 위치를 받기
mousePoint.z = screen_z;
return Camera.main.ScreenToWorldPoint(mousePoint);
}
void OnMouseDrag()
{
transform.position = GetMouseWorldPos() + mouse_offset;
//myRigid.velocity = Vector3.zero; //물리력 0으로
}
}
스크립트 등록
- DragObject.cs 드래그 하여 큐브에 등록
- 태그를 MainCamera로 변경 해주어야 함. 아니면 null에러
- RigidBody를 추가하면 물리적인 움직임도 가능함
- Collider에 Physics Material을 추가하여 마찰이나 탄성을 변경 가능
Collider
- 참고: https://docs.unity3d.com/kr/2018.4/Manual/class-MeshCollider.html
- Convex : Convex 메시 콜라이더는 삼각형 255개로 제한됩니다.
- inflate Mesh : 부풀게 하다 (2018.3 부터는 더이상 사용되지 않습니다)
- skin width : 부푸는 정도
- cooking options가 2017.3 버젼부터 추가되었습니다.
- None : 모두 비활성화
- Everything : 모두 활성화
- Cook for Faster Simulation : 빠른 시뮬레이팅을 위해 엔진이 메시를 쿠킹하도록 함 (런타임 성능에 최적화) 이 설정이 비활성화 되면 물리 엔진이 빠른 쿠킹타임을 사용하여 가능한 빠르게 결과물을 생성
- Enable Mesh Cleaning : 물리엔진이 메시를 청소하도록 함. 활성화 되어 있으면 손상된 삼각형과 다른 지오메트리 결함을 제거 하려고 시도함. 효과적인 메시를 만들고 더 정확한 히트 포인트를 생성하기 위한 옵션
- Weld Colocated Vertices : 같은 버텍스 삭제. 동일한 표지션의 버텍스가 결함됨
rigidbody
- Mass : 질량
- Drag : 영항력 (물체가 물리력을 얼마나 빨리 잃어버리는지에 대한 값)
- Angular Drag : 각속도 영향력 (각속도를 얼마나 빨리 잃어버리는지에 대한 값)
- Use Gravity : 중력에 영향을 받는지 (중력 셋팅을 Project Settings > Physics 에서 할수 있음: 기본값=-9.81)
- is Kinematic : 물리력에 반응하는지에 대한 여부 (이를 선택하면 남에게 물리력을 미치지만 자신은 물리력에 반응하지 않음)
- interpolate : 떨림현상 해결용 물리적 영향력을 전달 한 이후 부드러운 움직임이 되도록 보간을 할지에 대한 여부
- none : 없음 (보간하지 않음)
- interpolate : 보간법 - 이전프래임 기반 값을 부드럽게
- extrapolate : 보외법 - 이후프래임 기반 값을 부드럽게
- collision detection
- Discrete : 별 문제가 없다면 Discrete 사용을 권장.
- Continuous : 빠른 물체를 위한 옵션, 정적 지오메트리와 상호작용을 함
- Continuous Dynamic : 빠른 물체를 위한 옵션, 동적 지오메트리와 상호작용을 함
- Constraints : 제약
- Freeze Position : 특정방향 움직임 막기
- Freeze Rotation : 특정방향 회전 막기
physics material
- Dynamic Friction : 이동마찰 0~1 (0이면 얼음같은 느낌)
- Static Friction : 정지마찰 0~1 (0이면 얼음같은 느낌)
- Bounciness : 반동하는 방법 (0 반동 없음, 1 무손실 반동)
- Friction Combine : 충돌 마찰
- Average : 평균
- Minimum : 작은값이 적용됨
- Maximum : 큰값이 적용됨
- Multiply : 마찰값이 곱셈됨
- Bounce Combine : 충돌 반동 (옵션은 Friction Combine과 동일)