작성
·
131
답변 1
2
수강해주셔서 감사합니다.
바루스의 Q와 비에고의 W는 모두 Charge Skill이구요, 강의에서 예제로 제작한 Explosion과 똑같은 방식으로 만들면 됩니다.
발사 시: 바루스가 화살을 발사하여 물리 피해를 입힙니다. 관통당한 적 하나당 15%씩 피해량이 감소합니다. (최소 33%) 피해량과 역병 폭발 효과는 충전 시간에 비례해 최대 50%까지 증가합니다.
바루스의 Q는 SpawnProjectileAction으로 투사체를 날리도록하고, Skill의 Effect로는 DealDamage와 BlightDamage(역병 폭발, 대상에게 역병 디버프가 있을 시 터트려서 Damage를 줌)을 만들어넣으면 됩니다. 바루스의 경우 Q를 Charging하면서 이동할 수 있기 때문에 Skill의 Option으로 Charging 중에 이동이 가능한지 여부를 추가해서 ChargingState에서 이동 Script를 끌지, 말지 정해주면 됩니다.
충전 시작 시: 바루스가 다음 화살을 조준하며 20% 둔화됩니다. 4초가 경과한 후 쏘지 않으면 바루스가 스킬을 취소하고 소모한 마나의 50%를 돌려받습니다.
Skill Charge시에 이속이 느려지는 효과는 Charging CustomAction쪽에 이동속도를 느리게 만드는 Event를 추가해넣으면 됩니다. 바루스가 스킬을 사용하지 않으면 마나를 돌려주는 효과의 경우 추가적으로 Canceled CustomAction을 만들어넣고 Mana를 회수하는 Event를 추가하거나 그냥 변수로 Skill 사용 취소 시에 돌려받을 Mana Percent를 받아서 Skill 사용 취소 시에 돌려주면 됩니다.
충전 시작: 비에고가 안개를 롤아이콘-정신집중 불러모으며 10% 둔화됩니다.
마찬가지로 Charging CustomAction쪽에 이동속도를 느리게 만드는 Event를 추가해넣으면 됩니다.
안개 구체 발사 시: 비에고가 전방으로 돌진하며 응축된 안개를 발사합니다. 마법 피해를 입히고 처음으로 적중한 적을 충전 시간에 비례하여[27] 0.25~1.25초 동안 기절시킵니다.
비에고의 W는 PrecedingAction으로 앞으로 돌진하게 만들고, 중간에 적과 부딛치거나(=TargetSearcher로 매 Frame 검색) 최대 사거리에 도달하면 PrecedingAction 종료, 적을 찾았다면 InstantAction을 실행해서 적에게 DealDamage와 Stun Effect를 적용시키면 됩니다. 이때 StunAction도 DealAcDamageAction처럼 Scale 값을 적용받아 지속 시간을 늘릴 수 있도록 수정해주시면 됩니다.
리그 오브 레전드에 있는 대부분의 스킬, 아이템 효과는 강의에서 본 예제 Skill들을 응용하면 만들 수 있구요, 좀 더 복잡한 Skill들도 시스템을 조금만 더 개량 해주면 모두 만들 수 있습니다.
감사합니다.
간단하게는 SpawnProjectileAction을 좀 수정해주시면 됩니다.
maxDistance 변수를 만들고 maxDistance * skill.Scale 값을 Projectile에 넘겨줘서 그 사거리만큼 날아가게 만들면 됩니다.
좀 더 제대로된 방법은 SpawnProjectileAction에서 TargetSearcher의 SelectionRange 값을 가져와서 Projectile에 넘겨주면 됩니다. 예제 Explosion Skill 만들 때 Charge 정도에 따라 TargetSeacher의 Range가 변하는걸 보여드렸기 때문에 이 Range 값을 그대로 이용하시면 됩니다. 만들려고 하시는 Skill은 사실상 Explosion Skill과 거의 유사하기 때문에 해당 부분을 유심히 보시면 도움이 되실 것 같습니다.
조언해주신 내용으로 막혔던 부분 잘 해결했습니다.
스킬 제작에 대해 질문을 또 드리고 싶습니다.
리그오브레전드의 흐웨이 R스킬을 간단하게 구현하기 위해 projectile을 발사하고 맞춘 대상에게 skillobject를 spawn 한다는 방식으로 만들려고 하는데 생각만큼 잘되지 않아 이에 대한 힌트가 있는지 여쭤봅니다...
흐웨이 궁은 학습한 내용들을 응용하면 쉽게 만들 수 있습니다.
궁(=SkillObject)의 범위가 점점 넓어지는건 위 바루스와 비에고처럼 TargetSeacher의 Scale 값을 조절해주면 되구요, SkillObject쪽에 Option 변수로 SkillObject의 현재 Duration을 Scale 값으로 사용할건지 받으면 됩니다.
예를 들면, targetSearcher.Scale = Mathf.Lerp(startScale, maxScale, currentDuration/duration); 이런 식으로 Code를 작성하면 SkillObject의 지속 시간에 따라 점점 검색 범위가 커지겠죠. Particle의 Scale이 커지는 것도 강의에서 한 것처럼 Particle의 Scale을 제어하는 ParticleComponent를 만들어서 (currentDuration / duration) 값을 Particle의 Scale 값으로 주면 됩니다. 그럼 기본적으로 점점 커지는 SkillObject의 구현은 끝입니다.
Effect는 중첩에 따라 Damage와 이속 감소 효과를 주는 Effect 하나와 마지막에 강한 Damage를 주는 Effect 하나를 만들면 될거구요, 마지막에 강한 Damage를 주는 Effect는 Effect의 효과가 "Effect가 Release 될 때" 적용되게 하는 Option을 만들주면 됩니다. Apply 함수가 아니라 지속 시간이 끝나서 Effect가 제거될 때(=Release 함수) 효과가 적용되는거죠. Effect의 지속 시간을 SkillObject의 지속 시간과 똑같이 주면 타이밍이 맞을겁니다. 이 Option을 만들면 '시간 안에 Stack을 왕창 쌓았다가 마지막에 한번에 터트리는 공격'을 만들 수 있습니다. 그럼 유저 입장에서는 딜을 위해서 Stack을 쌓으려고 무리도 하고, 연구도 하는 등 나름의 재미 요소가 될겁니다.
앞서 얘기드린 것과 다르게는 좀 더 복잡하게 System을 확장해서 Skill이 발동될 때, Skill이 종료될 때에 적용할 효과를 추가적으로 설정할 수 있게 만드는 방법도 있습니다.
추가적으로 중첩에 따라 Damage와 이속 감소 효과를 주는 Effect는 하나의 Effect가 두 가지 효과를 들고 있죠? 그다지 좋은 구현이라고 볼 순 없기 때문에 Skill이 Effect들을 가지고 있듯이 Effect가 다른 Effect들을 가질 수 있게 만드는 것도 좋은 방법입니다.
생각보다 잘안되네요...
강의에서 시연해주신 Poison Swamp 스킬로 서치범위를 늘리는 방법을 시도해봤는데 의도한대로 타겟을 서칭하는 범위가 늘어나지 않습니다.
private void Update()
{
currentDuration += Time.deltaTime;
currentApplyCycle += Time.deltaTime;
if (IsApplicable)
{
this.targetSearcher.Scale += 2f;
Apply();
}
if (currentDuration >= DestroyTime)
Destroy(gameObject);
}
정 안되서 단순하게 skillobject.cs 의 업데이트의 IsApplicable 구문 안에 직접적으로 범위를 늘리는 코드를 써봤는데 안되네요...
어디서 실수를 하고 있는걸까요
강의에서 작성한 TargetSearcher는 Scale 값이 Mathf.Clamp01 함수로 0~1로 Clamping되고 있습니다. 해당 부분을 제거해서 Scale이 1보다 크게 될 수 있게 만들거나 아래처럼 하시면 됩니다.
this.targetSearcher.Scale = Mathf.Lerp(0.5f, 1f, currentDuration / Duration);
targetSearcher의 Range를 10으로 설정해두셨다면 5부터 10까지 지속 시간에 따라 범위 늘어나게 됩니다.
답변 감사합니다.
다시보니 제가 질문을 너무 모호하게 작성하여 전체적인 스킬에 대한 질문이 된거 같습니다.
답변주신 내용도 자세히 읽어보고 도움이 되었습니다.
바루스의 Q가 충전을 함에 따라 사거리가 조절이 되고 그 사거리만큼 화살이 날아가게 되는데
차징에 따른 사거리 조절을 어떻게 해야 할지 감을 잡지 못해 이 부분에 대해 염치 불고하고 다시 질문드립니다.