-
파티클 소스웹프로그래밍/LSL(세컨드라이프) 2009. 2. 25. 03:57반응형
// ===================
// 다음은 Ama Omega라는 분이 만든 파티클 스크립트 0.5버젼입니다. 파티클을 사용하실 분은 이 프로그램을 그대로 //
// 따다가 변경해서 사용하시면 됩니다. 물론 다른 스크립트도 그렇듯, 이 스크립트도 그대로 붙여넣으면 한글이 깨지 //
// 므로 되도록 한글 주석 부분은 빼고 복사해 넣어 사용하도록 하세요. 참고로 프리비로 나와 있는 두가지 예시 스크 //// 립트를 함께 첨부해 놓았습니다. //
// ============================================================================================================= //// ============================================================================================================= //
// 실제로 파티클 시스템에서 사용자가 변경해야 하는 부분은 프로그램 부분이 아니라 아래의 변수 부분의 수치를 변경 //// 해 주어야 합니다. 한번 이 부분들을 변경하면서 연구를 해 보세요. //
// ============================================================================================================= //// 마스킹 플래그들입니다. TRUE로 설정하면 활성화됩니다.
integer glow = FALSE; // 파티클이 빛이 나게 하는 플래그입니다.
integer bounce = FALSE; // 파티클이 오브젝트의 Z 축 위상으로 튀어오르게 합니다.
integer interpColor = TRUE; // 파티클의 색깔이 인터폴레이션에 의해 점진적으로 변합니다.
integer interpSize = TRUE; // 파티클의 크기가 인터폴레이션에 의해 점진적으로 변합니다.
integer wind = TRUE; // 파티클이 바람의 영향을 받습니다.
integer followSource = FALSE; // 파티클이 대상의 방향을 따라갑니다.
integer followVel = FALSE; // 파티클이 관성 방향을 따라갑니다.// 패턴은 다음 다섯가지 중 하나를 선택해주세요:
// PSYS_SRC_PATTERN_EXPLODE 사방으로 폭발하듯 퍼지는 폭발 패턴 파티클입니다.
// PSYS_SRC_PATTERN_DROP 기준위치에서부터 아래로 떨어지는 파티클입니다. (초기 관성속도 없음)
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY PSYS_SRC_PATTERN_ANGLE_CONE 의 영역을 제외한 지역으로 퍼지는// 원뿔 패턴 파티클입니다.
// PSYS_SRC_PATTERN_ANGLE_CONE 3차원적 원뿔 구조로 퍼지는 원뿔 패턴 파티클입니다.
// PSYS_SRC_PATTERN_ANGLE 2차원적 호 구조로 퍼지는 원뿔 패턴 파티클입니다.integer pattern = PSYS_SRC_PATTERN_EXPLODE;
// 파티클이 향하게 될 대상을 지정해주세요.
// 따로 타겟을 지정하지 않고자 할 경우는 "" 를, 소유자를 향하려면 "owner",
// 그리고 이 스크립트가 들어있는 오브젝트 자체를 가리키게 하려면 "self"라고
// 지정하면 되고, 그 외의 경우는 대상 오브젝트의 key를 지정하시면 됩니다.
key target = "";// 다음은 파티클 변수들입니다.
float age = 2.5; // 각각의 파티클 조각들이 나타났다 사라질 때 까지의 시간입니다.
float maxSpeed = 0.3; // 파티클이 발사되는 최대 속도입니다.
float minSpeed = 0.8; // 파티클이 발사되는 최소 속도입니다.string texture = "4f714019-c1cf-6b16-994f-44b217022f1a"; // 파티클의 텍스쳐 key값. 공백으로 남겨둘 수도 있습니다.
float startAlpha = 0.8; // 시작지점의 투명도 값
float endAlpha = 0.0; // 끝 지점의 투명도 값
vector startColor = <0.5,0.5,0.5>; // 파티클의 시작지점 색깔 <빨강, 녹색, 파란색>
vector endColor = <0,0,0>; // 파티클의 끝 지점 색깔 <빨강, 녹색, 파란색> (interpColor 값이 셋팅된 경우)
vector startSize = <0.01,0.01,0.0>; // 파티클의 시작지점 사이즈 <X, Y, Z>
vector endSize = <2.0,2.0,0.0>; // 파티클의 시작지점 사이즈 <X, Y, Z> (interpSize 값이 셋팅된 경우)
vector push = <.2,0,3>; // 파티클에 가해지는 힘의 정도 <X, Y, Z>// 다음은 시스템 변수입니다.
float rate = 0.1; // 파티클을 얼마나 빨리(자주) 퍼트릴것인가 입니다 (초 단위).
float radius = 0.0; // 폭발 패턴 하에서 파티클이 퍼지는 각도를 지정합니다.
integer count = 5; // 한 번의 폭발 단위마다 얼마나 많은 파티클이 퍼지는지를 결정하는 수치입니다.
float outerAngle = 0; // 원뿔 패턴에서 외부 각도를 지정합니다.
float innerAngle = 0.1; // 원뿔 패턴에서 내부 각도를 지정합니다.
vector omega = <0,0,0>; // 원뿔 패턴 파티클의 기준 대상 주변에서 파티클이 회전하는 각도입니다.
float life = 0; // 파티클 시스템이 파티클을 뿌리는 기간을 지정합니다.
// ============================================================================================================= //
// 사용하시는 분들이 주로 변경해 주어야 하는 부분은 여기까지입니다. 이하 변수선언과 updateParticles() 함수는 //
// 굳이 변경하실 필요는 없을 거에요. 그 아래 default 부분은 파티클을 어떠한 조건으로 가동시키고 어떠한 조건으로 //
// 끌 것인지궁리하셔서 자신이 원하는 대로 바꿔주시면 됩니다. //
// ============================================================================================================= //integer flags;
list sys;
integer type;
vector tempVector;
rotation tempRot;
string tempString;
integer i;updateParticles()
{
flags = 0;
if (target == "owner") target = llGetOwner();
if (target == "self") target = llGetKey();
if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
if (wind) flags = flags | PSYS_PART_WIND_MASK;
if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK;
sys = [ PSYS_PART_MAX_AGE,age,
PSYS_PART_FLAGS,flags,
PSYS_PART_START_COLOR, startColor,
PSYS_PART_END_COLOR, endColor,
PSYS_PART_START_SCALE,startSize,
PSYS_PART_END_SCALE,endSize,
PSYS_SRC_PATTERN, pattern,
PSYS_SRC_BURST_RATE,rate,
PSYS_SRC_ACCEL, push,
PSYS_SRC_BURST_PART_COUNT,count,
PSYS_SRC_BURST_RADIUS,radius,
PSYS_SRC_BURST_SPEED_MIN,minSpeed,
PSYS_SRC_BURST_SPEED_MAX,maxSpeed,
PSYS_SRC_TARGET_KEY,target,
PSYS_SRC_INNERANGLE,innerAngle,
PSYS_SRC_OUTERANGLE,outerAngle,
PSYS_SRC_OMEGA, omega,
PSYS_SRC_MAX_AGE, life,
PSYS_SRC_TEXTURE, texture,
PSYS_PART_START_ALPHA, startAlpha,
PSYS_PART_END_ALPHA, endAlpha
];
llParticleSystem(sys);
}default
{
state_entry()
{
updateParticles() ;
}
}반응형'웹프로그래밍 > LSL(세컨드라이프)' 카테고리의 다른 글
오브젝트 텍스쳐 변경 & 오브젝트 페이스(면)번호 알아내기 (0) 2013.07.18 파티클 스크립트(펌) (0) 2010.02.07 세컨드라이프 스크립트 자동 업그레이드(펌) (0) 2009.01.27 자동 스크립트 생성 (0) 2008.07.21 내장 애니메이션 확인하기 (0) 2008.06.25