h1. SkillProjectile -------------------------------------------------- h2. 개요 - 스킬 투사체의 데이터를 정의하는 데이터시트다. - 데이터시트의 1줄이 특정 스킬 투사체의 데이터 하나를 나타낸다. -------------------------------------------------- h2. [1] Read h3. 형식 - 적용 대상 : 툴 - 자료형 : bool h3. 설명 툴에서 해당 줄의 데이터들을 읽어들일지 아닐지 결정한다. 다음 값들을 사용할 수 있다. *TRUE* : 툴은 그 줄의 데이터를 읽는다. *FALSE* : 툴은 그 줄의 데이터를 읽어들이지 않는다. 툴은 데이터시트에서 읽어들인 줄의 데이터들로만 데이터 스크립트를 제작한다. 따라서, 이 필드를 이용해서 특정한 줄의 데이터들을 선택적으로 게임에 적용하거나, 혹은 적용하지 않게 만드는 데 쓸 수 있다. 예를 들어, 데이터시트에 테스트를 위해 임시로 넣은 데이터가 많은데, 이런 기능이 없는 경우, 게임에 빌드를 하기 위해서는 테스트 데이터를 그대로 사용하든가 아니면 제거해야 한다. 그런데 작업 경과에 따라 이제까지의 작업이 아깝거나, 게임 빌드 이후에 또 실험하던 데이터를 써야하는 등의 갖가지 이유 때문에 게임 빌드에 적용할 동안만 '잠시 툴이 특정 줄들의 데이터를 읽지 못하게' 하고 싶을 수 있다. 이 필드는 그런 경우에 사용할 수 있다. -------------------------------------------------- h2. [2] Comment h3. 형식 - 적용 대상 : 툴 - 자료형 : string h3. 설명 편집하는 사용자에게, 현재 편집하는 줄이 무엇을 위한 데이터인지 알려주는 주석을 적는 공간이다. 따라서 대부분은 순전히 데이터시트를 편집하는 사람의 편의를 위한 필드이기 때문에, 툴에서 데이터 스크립트로 변환할 때 이 필드의 값은 무시한다. 이 필드에 들어가야 하는 값에 대한 규칙도 특별히 존재하지 않는다. 다만, 소스 파일에 데이터 값을 상수로 정의하여 내보내는 경우, Comment 필드의 값은, 소스 코드에서 해당 상수의 역할을 설명하는 주석문으로 사용한다. -------------------------------------------------- h2. [3] General_Type_Code h3. 형식 - 적용 대상 : 공통 - 자료형 : EodGTC(primitive) h3. 설명 현재 줄의 GTC의 값을 정의하는 필드다. 일반 타입 식별 코드(General Type Code)는 게임 내에서 종류를 구분할 필요가 있는 객체들 사이에서, 종류를 식별하는 키로써 사용하는 번호다. 종종 GTC라는 약어로써 표현한다. GTC를 정의하는 본래의 형식은 32비트 정수 타입이다. 따라서 이 필드에는 숫자로 GTC를 정의해야 한다. GTC와 관련한 상세한 내용은 프로젝트의 명세서에서 참고하기 바란다. -------------------------------------------------- h2. [4] GTC_Key h3. 형식 - 적용 대상 : 툴 - 자료형 : EodGTC(key define) h3. 설명 필드의 문자열 식별키를 정의한다. GTC는 숫자이기 때문에, 컴퓨터의 입장에서는 처리가 쉽고 속도도 빠르지만, 사람이 알아보기에는 쉽지 않다. 특히, 숫자가 많은 자릿수를 가지고 있을수록 더욱 그렇다. 이런 문제를 해소하기 위한 가장 좋은 방법은, 같은 GTC에 대해 사람은 문자열로, 컴퓨터는 숫자로 처리할 수 있도록 "자동으로" 연결해주는 기능을 만드는 것이다. 필드는 그러한 기능을 제공하기 위해 추가한 필드이다. 즉, 이 필드가 있기 때문에, 사람이 데이터시트를 편집하면서 다른 데이터시트의 GTC 참조 값을 필드에 넣어야 할 경우, 에서 정의하는 숫자 값으로 참조하는 대신, 이 필드의 문자 값으로 참조 값을 넣을 수 있다. 데이터 스크립트 생성 툴에서 이 데이터시트를 읽을 때, 이 필드에 정의한 문자열 값과 필드의 GTC 값을 연관짓는 사전(Dictionary) 객체를 생성한다. 이 사전 객체는 데이터시트 -> 데이터 스크립트 (+ 소스 파일) 변환 과정이 일어나는 동안 지워지지 않고 유지한다. 툴이 데이터시트들을 변환할 때, GTC를 (본래의 값인)숫자 대신 [4] GTC_Key에 정의한 문자열 값으로 링크하는 필드들을 발견하면, 그 GTC 문자열 키를 GTC의 본래 값인 숫자형으로 변환해서 데이터 스크립트를 작성해야 한다. 그 때, GTC 숫자 <-> GTC 문자 관계를 정의한 사전 객체를 이용해서 GTC 문자 키 -> GTC 숫자 변환을 수행한다. 데이터시트만 봐서는 GTC의 참조를 문자열 키로 하는 셈이지만, 실제로 게임에 탑재하는 데이터 스크립트에는 GTC의 본래 타입인 32비트 정수 값으로 툴이 자동으로 변환해서 넣어준다. -------------------------------------------------- h2. [5] Skill_Code h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : EodGTC : key_reference : Skill h3. 설명 중간 디렉토리 경로명. 리소스 파일들은 사용 목적에 따라 특정한 디렉토리에 모아두는 것이 일반적이지만, 리소스 데이터가 지나치게 많거나, 혹은 추가적인 하위 분류가 필요한 경우에는 하위 디렉토리로 분산해서 보관하기도 한다. 그런 경우에 파일 이름을 제외하고 중간 디렉토리 경로만 따로 이 필드에 설정해서 다른 하위 경로에 있는 리소스 파일을 링크하게 할 수 있다. *디렉토리 구분 문자는 반드시 슬래쉬('/') 문자만 사용해야 한다.* 역슬래쉬('\')는 윈도우 플랫폼에서만 사용하기 때문에, 윈도우가 아닌 플랫폼에서는 파일 경로를 찾는 데 문제가 될 수 있다. -------------------------------------------------- h2. [6] Prefab_Code h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : EodGTC : key_reference : Prefab h3. 설명 스킬 투사체가 얹혀질 투사체 객체의 프리팹 데이터의 식별 코드. 이 값은 [[Datascript_Prefab|Prefab]] 데이터시트의 필드에 정의한 값이어야 한다. -------------------------------------------------- h2. [7] Target_Socket_Name h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : string h3. 설명 스킬 투사체의 객체가 생성될 위치의 기준이 될 소켓 객체의 이름. 스킬은 누군가 캐릭터가 사용하는 것이므로, 스킬을 사용한 캐릭터나 객체의 어느 위치에서 스킬 투사체를 생성할 것인지 정해줘야 한다. 이 값이 없는 경우, 스킬 투사체는 스킬을 사용한 캐릭터나 객체(주로 트리거 객체)의 중심 위치를 기준으로 생성한다. -------------------------------------------------- h2. [8] Position_Target_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : Eod.Define.Projectile.ePositionType h3. 설명 스킬 투사체가 생성될 대상이나 지점을 선택하는 방식. 스킬 투사체를 어떤 대상을 기준으로 생성할지 결정한다. 필드의 값과 조합하여, 어떤 대상의 어떤 소켓에 스킬 투사체를 생성하게 할지 결정한다. 다음과 같은 값을 사용할 수 있다. (아직 작성 중...) -------------------------------------------------- h2. [9] Offset_X h2. [10] Offset_Y h2. [11] Offset_Z h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체를 생성할 때, 기준 위치로부터 얼마나 떨어진 지점에 생성할지 설정한다. -------------------------------------------------- h2. [12] Random_Offset_X h2. [13] Random_Offset_Y h2. [14] Random_Offset_Z h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체를 생성할 때, 기준 위치로부터 얼마나 변동폭을 주고 싶은지 각 좌표마다 설정한다. 즉, 스킬 투사체가 생성되는 시점에서, 최종적인 위치는 다음과 같이 결정한다. originalPosition = , 에 따른 위치 좌표값 offset = 에 따른 상대적인 위치 좌표값 random = 에 따른 무작위한 상대적인 위치 좌표값 일 때, (최종적인 스킬 투사체의 위치) = originalPosition + offset + random -------------------------------------------------- h2. [15] Direction_Target_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : Eod.Define.Projectile.eDirectionType h3. 설명 스킬 투사체의 방향이 될 기준을 선택하는 방식. 다음과 같은 값을 사용할 수 있다. (아직 작성 중...) -------------------------------------------------- h2. [16] Angle_X h2. [17] Angle_Y h2. [18] Angle_Z h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체를 생성할 때, 필드의 값에 의해 기준이 되는 방향으로부터 각 축으로 얼마만큼의 각을 가지도록 방향을 회전시킬 것인지 결정한다. * 사용하는 값은 360분법에 의한 각도 값을 사용한다. -------------------------------------------------- h2. [19] Random_Angle_X h2. [20] Random_Angle_Y h2. [21] Random_Angle_Z h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체를 생성할 때, 기준이 되는 방향 각도로부터 각 축으로 얼마만큼의 무작위한 추가 각도를 가져갈지 결정한다. 즉, 스킬 투사체가 생성되는 시점에서, 최종적인 방향의 각도는 다음과 같이 결정한다. originalAngle = 에 따른 각도 값 offset = 에 따른 상대적인 각도 값 random = 에 따른 무작위한 상대적인 각도 값 일 때, (최종적인 스킬 투사체의 방향 각도) = originalAngle + offset + random -------------------------------------------------- h2. [22] Scale_Target_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : Eod.Define.Projectile.eScaleType h3. 설명 스킬 투사체가 생성될 때, 그 크기의 배율을 적용할 방식. 다음과 같은 값을 사용할 수 있다. (아직 작성 중...) -------------------------------------------------- h2. [23] Scale_X h2. [24] Scale_Y h2. [25] Scale_Z h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체를 생성할 때, 필드의 값에 의해 기준이 되는 크기로부터 각 축으로 얼마만큼의 추가적인 크기 배율을 더할 것인지 설정한다. -------------------------------------------------- h2. [26] Random_Scale_X h2. [27] Random_Scale_Y h2. [28] Random_Scale_Z h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체를 생성할 때, 기준이 되는 배율로부터 각 축으로 얼마만큼의 추가 배율을 적용할지 결정한다. 즉, 스킬 투사체가 생성되는 시점에서, 최종적인 크기의 배율은 다음과 같이 결정한다. originalAScale = 에 따른 크기 배율 값 offset = 에 따른 상대적인 크기 배율 값 random = 에 따른 무작위한 상대적인 크기 배율 값 일 때, (최종적인 스킬 투사체의 크기 배율) = originalScale + offset + random -------------------------------------------------- h2. [29] Move_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : Eod.Define.Projectile.eMoveType h3. 설명 스킬 투사체가 이동하는 방식을 설정한다. 다음과 같은 값을 사용할 수 있다. (아직 작성 중...) -------------------------------------------------- h2. [30] Move_Direction_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : Eod.Define.Projectile.eDirectionType h3. 설명 스킬 투사체가 이동하는 방향의 방식을 설정한다. 필드와 같은 값이지만, 적용하는 의미는 다르다. 필드의 값은 투사체가 생성될 때 바라보는 방향을 설정하는 부분이고, 이 필드는 *스킬 투사체가 움직일 방향을 설정하는 부분*이다. (*어떤 캐릭터나 객체들도 바라보는 방향과 움직이는 방향은 다를 수 있다.* 사람이 옆을 보면서도 앞으로 달릴 수 있는 것처럼...) -------------------------------------------------- h2. [31] Move_Speed_Default h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체의 기본 이동 속도. * 단위는 초 당 미터(m/s)로 한다. -------------------------------------------------- h2. [32] Move_Acceleration h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체의 가속도. * 단위는 초 당 미터(m/s)로 한다. -------------------------------------------------- h2. [33] Move_Speed_Min h2. [34] Move_Speed_Max h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체가 이동할 때 가질 수 있는 최소 / 최대 속도. 에 의해 가속 / 감속하더라도 ~ 필드의 값 범위를 넘어서지 못하게 한다. * 단위는 초 당 미터(m/s)로 한다. * 은 반드시 보다 작거나 같아야 한다. * 은 반드시 보다 크거나 같아야 한다. -------------------------------------------------- h2. [35] Collider_Shape h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : Eod.Define.Skill.Projectile.eShape h3. 설명 스킬 투사체가 목표와 충돌할 때, 이 충돌을 감지하는 형태. 다음과 같은 값을 사용할 수 있다. *Circle* *Sphere* *Square* *Box* *Cylinder* -------------------------------------------------- h2. [36] Collider_Radius h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체가 충돌을 감지할 반경. 이 값은 필드의 값이 *Circle*, *Sphere*, *Cylinder* 일 때 유효하다. -------------------------------------------------- h2. [37] Collider_Angle h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체가 충돌을 감지할 각도. 스킬 투사체가 현재 자신이 바라보고 있는 방향을 기준으로 하여, 360분법의 각도 기준으로 몇 도까지의 각도 이내에서만 충돌을 감지할지 설정한다. 여기서의 각도는 전체 각도를 말하는 것이므로, 기준이 되는 방향선으로부터 상하좌우로 각각 / 2 만큼의 각도 이내에 들어와야 충돌을 감지한다는 의미이다. 이 값은 필드의 값이 *Circle*, *Sphere*, *Cylinder* 일 때 유효하다. -------------------------------------------------- h2. [38] Collder_Width h2. [39] Collder_Height h2. [40] Collder_Length h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체의 길이와 폭, 높이를 설정한다. * 필드의 값이 *Square*, *Box* 일 때 유효하다. * 필드의 값이 *Box*, *Cylinder* 일 때 유효하다. * 필드의 값이 *Square*, *Box* 일 때 유효하다. -------------------------------------------------- h2. [41] Collision_Check_Interval_Time_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : enum : sbyte : TimeUtility.eTimeType h3. 설명 충돌을 점검할 시간 간격에 사용할 시간의 단위. 다음과 같은 값을 사용할 수 있다. *MilliSecond* : 밀리 초 *Second* : 초 "Minute" : 분 "Hour" : 시간 "Day" : 일 "FPS15" : 1 / 15초 단위 "FPS30" : 1 / 30초 단위 "FPS45" : 1 / 45초 단위 "FPS60" : 1 / 60초 단위 "FPS90" : 1 / 90초 단위 "FPS120" : 1 / 120초 단위 * 이 필드에 적용하는 값은 15분의 1초(약 0.0667초)보다 작을 수 없다. : 판정과 관련한 최소 시간 간격이 15분의 1초까지다. -------------------------------------------------- h2. [42] Collision_Check_Interval_Time_Amount h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 필드에서 설정한 시간 단위의 양이다. -------------------------------------------------- h2. [43] Collision_Count_Max h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : int h3. 설명 충돌을 최대 몇 번까지 검출할 것인지 정한다. 0으로 설정할 경우, 충돌 검출 횟수는 무제한적이라고 간주한다. -------------------------------------------------- h2. [44] Alive_Time_Type h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 이 스킬 투사체가 존재할 시간에 대한 타입을 설정한다. 다음과 같은 값을 사용할 수 있다. *MilliSecond* : 밀리 초 *Second* : 초 "Minute" : 분 "Hour" : 시간 "Day" : 일 "FPS15" : 1 / 15초 단위 "FPS30" : 1 / 30초 단위 "FPS45" : 1 / 45초 단위 "FPS60" : 1 / 60초 단위 "FPS90" : 1 / 90초 단위 "FPS120" : 1 / 120초 단위 -------------------------------------------------- h2. [45] Alive_Time_Amount h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 필드에 설정한 시간 단위의 양이다. -------------------------------------------------- h2. [46] Alive_Move_Distance_Max h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : float h3. 설명 스킬 투사체의 객체가, 자신이 생성되었던 지점으로부터 얼마만큼 거리가 떨어진 뒤에 뒤에 사라질지 결정한다. * 지정할 값은 0보다 커야 한다. * 소수점은 3자리까지 유효하다. -------------------------------------------------- h2. [47] Effect h3. 형식 - 적용 대상 : 클라이언트 - 자료형 : EodGTC : key_reference : Effect h3. 설명 스킬 투사체의 중심 위치를 따라다니는 이펙트 객체의 데이터 식별 코드. 이 값은 [[Datascript_Effect|Effect]] 데이터시트의 필드에 정의한 값이어야 한다. * 원칙대로라면 스킬 이펙트 객체와 스킬 투사체 객체의 데이터시트는 구분이 되어야 한다. 그렇지만, 스킬 이펙트 객체의 위치 변화나 생명 주기가 스킬 투사체 객체의 그것과 거의 동일할 것이기 때문에, 그냥 스킬 투사체의 데이터시트에 링크하는 형태를 취하기로 한다. * 단, 스킬 이펙트의 이벤트는 반드시 별도로 정의한다. 스킬 투사체 이벤트가 종료하는 시점과 스킬 이펙트의 이벤트가 종료하는 시점은 직접적인 관계가 없기 때문이다. [[Datascript_SkillEffectEvent|SkillEffectEvent]]와 [[Datascript_SkillProjectileEvent|SkillProjectileEvent]]를 참고할 것.