1. 모형에 가까운 것을 원한다면 입자를 사용합니다 (완전히 날려 진 입자 시스템 일 필요는 없습니다).
RenderTexture에서 입자를 다각형 형태로 렌더링합니다. 입자에 첨가제 혼합을 사용하십시오. 다각형 내부의 입자는 서로 부드럽게 혼합되며 외부의 입자는 원하는 부드러운 가장자리를 제공합니다. (이 유튜브 비디오에서 효과의 예를 볼 수 있습니다 : Additive Particles Video
이제 RenderTexture를 기본 화면에 렌더링하면 완료됩니다. RenderTexture는 입자가 배경과 혼합되지 않도록해야합니다.
삼각형을 입자 질감에 직접 넣고 어떻게 작동하는지 확인할 수 있습니다. 그렇지 않으면 "입자 수프"위에 별도의 레이어로 렌더링하십시오.
업데이트 된 jsfiddle에서 다음과 같은 빠른 모형을 만들었습니다. 여기
에서 업데이트 된 데모를 찾을 수 있습니다.
2. 각 입자에는 속도와 원점이 있습니다. 플레이어가 다각형에 닿으면 플레이어 속도에 비례하여 각 입자 속도가 변경됩니다. 입자가 플레이어에서 멀어 질수록 플레이어 속도의 영향을 덜받습니다.
입자 속도를 계산하는 공식은 다음과 같습니다.
//player.velocity and particle.velocity are vectors
//k is a factor to enhance or weaken the influence of players velocity
var distanceToPlayer = (player.position - particle.position).length();
particle.velocity = particle.velocity + ((k * player.velocity) + particle.velocity) * (1/distanceToPlayer);
입자의 위치를 계산하려면 이것을 업데이트 방법에 넣으십시오.
var speedY = -(springConstant * (particle.position.y - particle.origin.y)) - (dampingFactor * particle.velocity.y);
var speedX = -(springConstant * (particle.position.x - particle.origin.x)) - (dampingFactor * particle.velocity.x);
particle.position.y = particle.position.y + speedY;
particle.position.x = particle.position.x + speedX;
particle.velocity.x = particle.velocity.x + speedX;
particle.velocity.y = particle.velocity.y + speedY;
이것은 플레이어가 유체를 교반 할 때 각 입자가 원점을 중심으로 스윙하는 "유체"를 제공해야합니다. 스프링 상수는 파티클이 원점에서 얼마나 멀리 스윙하는지와 dampingFactor가 파티클이 얼마나 빨리 정지되는지를 변경합니다. 게임에서 사용하는 1d 시뮬레이션의 수정 된 버전이므로 코드를 조정해야 할 수도 있습니다.
이제 데모로 : 데모
유체가 원하는대로 동작 할 때까지 상단에있는 3 개의 상수를 조정하십시오.