프로그래밍 농장

물리엔진 본문

Unity

물리엔진

Tennessee201 2022. 7. 22.
728x90

유니티에서 물리엔진 -> 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을 하나 생성후 입혀주면된다.

QUAD의 Main map의 속성을 건들이면됌 -> wrap mode를 repeat으로 바꿈

 이후에 위 배경을 계속 반복하고 싶으면 offset을 키우면됌 

 

아래와 같이 구현 

 

아래와 같이 10 대신 Time.time을 넣게 되면, 늘어나는 시간에 비례해서 나오는 빈도가 줄어들음 

( 시간비례 난이도 상승을 구현할수있게 됌 )

 

 


 

https://funfunhanblog.tistory.com/37

 

유니티) 파티클시스템(Particle System) 파티클로 스킬넣기

파티클 시스템(Particle System) 파티클 시스템은 씬 안에 다수의 작은 2D 이미지를 생성하고 애니메이션하여 액체, 구름 및 불 꽃 같은 유체 엔티티를 시물레이션 한다 3D게임에서 대부분의 캐릭터,

funfunhanblog.tistory.com

 

 

728x90