- Today
- Total
프로그래밍 농장
물리엔진 본문
유니티에서 물리엔진 -> Physics 는 기존에는 외부 물리엔진인데 유니티가 자체적으로 삽입해놓은것이다.
habok 엔진 : 고퀄리티 엔진 . .
--> 여하튼 유니티는 Physics 물리엔진을 제공한다.
-> 3D : PhysicsX 물리엔진 사용 / 2D: Box2D 물리엔진 사용 (상식 )
강체 ?
-----
3D에서는 Rigid body -> kinematice : 물리법칙을 받지 않는 상태 / dynamic : 물리법칙을 받는 상태
2D에서는 Static : 3D의 kinematic과 동치 / dynamic
--> Kinematic은 직접적인힘으로 움직이지 않고, 간접적인힘으로 움직임 ( 자기힘으로는 못움직임 ) \
( 직접적이라는건 : 물리의 힘을 받는다는 뜻이고 / 간접적이라는건 : 스크립트상 ( addforce. . 등 ) )
--> dynamic 은 상관없이 다 움직임
--> Static 은 아예 안움직임
충돌물리엔진 구현시 -> 두객체를 부딪힌다? : Rigid body는 둘중 하나는 무조건있어야하고, collider는 양쪽 둘다 있어야 한다.
그럼 리지드바디는 어디에 붙혀야하나 ? -> 실제호 물리영향을 받아야하는경우
아래의 경우도 큐브에만 리지드바디를 붙히고 바닥과 큐브둘다 콜라이더가 있다.
콜라이더 (Collider) 들에 대한 설명
실무에서는 : Sphere보다 Capsule 콜라이더를 더 쓴다.
--> 예를 들어 해당 객체의 피격범위를 넓히거나 할때 그냥 캡슐콜라이더의 Height를 줄이면되기때문이다.
isTrigger? :
--> 유니티에서는 충돌처리에 두가지가 존재한다.
1. Trigger
2. Collision
-> collision : 두개의 객체가 충돌한다했을떄, collision의 경우 각 두개의 객체를 침범하지않는다
-> Trigger : 두 오브젝트가 겹친다 ( ex. 퀘스트나 포탈안에 들어와야할떄 )
- rpg에서는 왠만하면 Trigger를 쓴다 . ex. 몬스터와 부딪치면 길막현상 발생한다.
- 당구, 퍼즐, 어드벤처 등등 ( 실제로 부딪혀야하는 경우) : isTrigger를 사용하지않고 collider만 사용
--> physics에서 bounciness 설정을 통하여 일정 속도이상으로 충돌시 튀기는 효과 구현가능(
--> physics -> sleep Threadhold : ( 최적화 작업) - Sleeping Mode ~~
Fixed Joint -> Connected Body : 리지드바디를 무조건 참조해야함
fixed / hindge / soring joint 에 대한 사용법 복습 !!
-> ex) 컷더로프와 같은 기능구현가능 ( 줄에 매달려있는 . . 등등 .. )
Terrain
= '대지'
-> FBX / OBJ 파일과 같은 3D 모델을 다루는 파일이 있다.
-> BOX/ SPHERE와 같이 단순한 도형의 COLLIDER외에 MESG COLIIDER를 사용하면 오브젝트, 3D 모델의 모양대로 COLLIDER를 구현할수있다.
-> CONVEX ? :
CONVEX HULL ? : 일종의 구멍채우기
ex. 스왑피와 같은 게임구현시 convex hull 알고리즘이 사용됌
vertex 를 잡은후 collider를 두개로 나누어서 처리한다.
-> contex hull 이 더 이상안나올떄까지 위를 수행
-> contex 형태로 되어있어야(체크를 해야) trigger가 가능하다.
3d 오브젝트는 mesh collider를 통하여 콜라이더를 따줌
2d 오브젝트는 poligon collider를 통하여 콜라이더를 따줌
Used By Effectot -> 이걸 켜주면 부력 등등 다양한 2d Effector를 사용할수있다.
'스왐피'
: 물은 흘러야되고 / 뭉쳐져야됌 : 오브젝트를 만들고 바깥쪽 덮힌부분은 Alpha를 주어 투명하게 만듬
-> 뭉치는부분 구현 ok
: 흐르는 부분 : friction 이 없는 상태여야함
-> physics material의 friction(마찰)을 0으로 만들어야됌
과제 :
100m로 구현
캐릭터한테는 리지드바디 / 콜라이더를 줘서 점프하게하시오 (바닥 (sprite, mesh collider) 그래비티 / 캐릭터 :콜라이더
중간에 빠지면 떨어지도록 설정
velocity로 정속으로 움직이도록 구현
가운데에는 좌우로 움직이는 적을 생성 ( lerp / clamp 등을 사용하여 움직이는 범위를 강제 )
혹은 아래와 같이 좌우에 벽처럼 collision 에 닿으면 바뀌도록해도 ok
2번과제 (심화)
100m라고 준걸 Infinite로 생성되도록 ( 무한 )
힌트 : 캐릭터는 addforce를 y축으로 ( 위로 ) 만 주고 나머지 맵이랑 오브젝트들만 움직이도록 해보세요 !
배경을 바꾸고 싶으면 Quad에 이미지로 덮어씌운 material을 하나 생성후 입혀주면된다.
이후에 위 배경을 계속 반복하고 싶으면 offset을 키우면됌
아래와 같이 구현
아래와 같이 10 대신 Time.time을 넣게 되면, 늘어나는 시간에 비례해서 나오는 빈도가 줄어들음
( 시간비례 난이도 상승을 구현할수있게 됌 )
https://funfunhanblog.tistory.com/37
'Unity' 카테고리의 다른 글
렌더링 / 파티클 / 포스트프로세싱 . . (0) | 2022.08.05 |
---|---|
유니티 생명주기 (Monobehavior LifeCycle) (0) | 2022.07.28 |
Animator / Blending tree 구현 [ Unity ] (0) | 2022.07.14 |
델리게이트(delegate) / 대리자 [ Unity ] (0) | 2022.07.12 |
유니티 이벤트 [ Unity ] (0) | 2022.07.11 |