1. Process Material에서 New ParticlesMaterial 선택.

2. Textures에서 Texture에 Particle로 사용할 이미지를 선택.

3. Time

  • Lifetime : Particle의 생존시간.
  • One Shot : 활성화를 하면 Amount 만큼 한번만 방출하고, 비활성화를 하면 반복하여 방출.
  • Preprocess : 지정한 시간(초) 이후의 방출 모습부터 표현.
  • Speed Scale : 방출되는 속도. 숫자가 클수록 속도가 빨라짐. 기본값은 1.
  • Explosiveness : 0일 경우(기본값) 일정 간격으로 방출. 1일 경우 동시에 모두 방출. 0~1사이값으로 지정도 가능. 폭발이나 Particle을 급히 만들여야 할 때 유용.
  • Randomness : 모든 물리 파라미터값을 0~1사이의 값으로 랜덤화할 수 있다. 랜덤화하는 공식은 다음과 같다.
    • initial_value = param_value + param_value * randomness
  • Fixed FPS : 랜더링을 고정된 프레임 단위로 함. Particle System의 속도를 늦추는 것은 아님.
  • Fract Delta : Delta time을 이야기하는 건지 뭔지 자세한 설명이 없슴.

4. Drawing

  • Visibility Rect : 폭과 너비, 그리고 위치 설정.
  • Local Coords : 노드에 방출된 Particle의 좌표를 종속시킬 것인지를 결정. 종속된 경우, 노드 이동시 같이 이동함.
  • Draw Order : Particle을 표현하는 순서를 제어. Index(기본값)와 Lifetime가 있는데, 정확하게 차이점이 뭔지 모르겠슴.

5. ParticlesMaterial settings

  • Spread
  • Gravity
  • Initial Velocity : 방출 속도.(Pixel per seconds)
  • Angular Velocity
  • Spin Velocity : Particle 회전 속도.
  • Orbit Velocity
  • Linear Acceleration
  • Radial Acceleration
  • Tangential Acceleration :
  • Damping : Particle에 마찰 적용.
  • Angle : 초기 방출 각도(Degree).
  • Scale : 초기 Particle의 크기.
  • Color : 색상 변경.
  • Hue variation : 색조 변화.

 

<참고>
http://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html#particlesmaterial-settings

Clamps value and returns a value not less than min and not more than max.

speed = 1000
# a is 20
a = clamp(speed, 1, 20)

speed = -10
# a is 1
a = clamp(speed, 1, 20)

 

  1. 최대, 최소값을 적용해야하는 것들(예: 속도, 가속도, 데미지, 혹은 UI에서 볼륨 설정 등)에 적용할 때 사용하면 유용할 듯 하다.
  2. if문을 사용하지 않아도 되므로 1~2줄의 코드라인을 절약할 수 있다.

 

 

<참고>
http://docs.godotengine.org/en/3.0/classes/class_@gdscript.html?highlight=clamp#class-gdscript-clamp

1. Python에서는 type() 함수를 써서 변수 타입을 알아볼 수 있다. 그와 같은 함수가 typeof() 함수이다.


2. Python의 type() 함수와는 다르게, 변수 타입을 체크하기 위해서 별도의 조건문이나 조건식을 사용해야 한다.

예) print(typeof(a) == TYPE_VECTOR2)


 

<참고>
http://docs.godotengine.org/en/stable/classes/class_@gdscript.html#class-gdscript-typeof

1. 기본적으로는 둘다 delta값에 의해서 동기화를 하는 콜백 함수.

2. 물리엔진을 적용해서 사용해야하는 경우(예:KinematicBody)는 _physics_process() 함수를 써야한다.(RigidBody의 경우는 _integrate_forces()를 사용해야 한다.)

3. Key값은 _process()에서 받고, KinematicBody의 제어는 _physics_process()에서 할 경우, 동기화 문제로 인하여 Jittering이 발생할 수 있으므로, 이런 경우는 Key값도 _physics_process()에서 담당하도록 코딩을 한다.

1. Platform 게임 개발시 아랫층에서 윗층으로 점프할 때 유용하다.

2. 2.x 버젼에서는 One Way Collision을 적용할 방향을 설정할 수 있는 옵션이 인스펙터에 있었는데 현재 3.0.5에서는 없다.(해당 클래스인 CollisionShape2D의 설명을 보면 'Sets whether this collision shape should only detect collision on one side (top or bottom).' 이라고 써있는 걸 보면 간소화 시킨 듯)

3. 2.1.4 버젼에서는 One Way Collisor로 되어 있으며, PhysicsBody2D 3종 세트(StaticBody2D, RigidBody2D, 그리고 KinematicBody2D)에 옵션이 있으며, 3.0.5 버젼에는 CollisionShape2D과 CollisionPolygon2D에 옵션이 있다.

 

<참고>
http://docs.godotengine.org/en/latest/classes/class_collisionshape2d.html
http://docs.godotengine.org/en/latest/classes/class_collisionpolygon2d.html

_process(delta)나 _physics_process(delta)처럼 _integrate_forces(state)안에서 delta값을 사용하고 싶을 때는 step을 사용한다.


func _physics_process(delta):
	print("Delta: ", delta)

func _integrate_forces(state):
	print("Step: ", state.step) # or print("Get_Step(): ", state.get_step())

1. move_and_slide_snap()함수 추가.

move_and_slide()함수 사용시 Shapping 문제(의도치 않게 경사면 끝자락에서 오브젝트가 날아가는 문제)를 해결.

 

2. RayCast Shape 추가.(4.0에서는 SeparationRayShape라고 이름이 바뀔 예정)

경사면에서 물리적으로는 맞지만, 시각적으로는 어색했던 움직임과 경사면의 각도나 위치에 따라서 RayCast를 여러개를 추가해서 사용해야 했던 문제 해결.

 

3. Sync To Physics 옵션 추가.

물리적인 동기화 문제로 인하여 발생했던 문제(예:플랫포머 위에서 오브젝트가 흐르는 듯한 현상)를 해결하기 위한 옵션으로 AnimationPlayer에서 애니메이션을 적용할때나, 오브젝트를 수동으로 위치나 회전 속성을 미세 조정할 때 유용.

 

<참고>
https://godotengine.org/article/godot-31-will-get-many-improvements-kinematicbody

1. RigidBody를 사용할 경우 KinematicBody에서와 같은 is_on_floor(), is_on_wall(), 그리고 is_on_celling()과 같은 함수를 지원하지 않는다.

2. RigidBody를 사용할 경우, 바닥을 체크할 수 있는 방법은 RayCast와 Area를 이용하는 방법이 있다.

3. RayCast를 이용하여 바닥을 체크할 경우, 위의 이미지와 같은 위치에 서 있을 경우 점프를 할 수 없는 경우가 생긴다.(바닥 상태여야만 점프를 할 수 있게 코딩을 한 경우에 해당)

4. 3번과 같은 경우는 RayCast를 여러개 사용하면 해결할 수 있다.

 

결론 : 바닥상태 체크는 오히려 Area를 사용하는 것이 더 좋을 것 같다.(3.1에서 RayCast Shape가 추가될 예정이라 위와 같은 문제가 해결될 수도 있슴.)

+ Recent posts