묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
MonoStateMachine을 만든 이유가 잘 이해가 가지 않습니다.
StateMachine을 순수 C# 클래스가 아니라 MonoBehavior를 상속시켜서 구현하면 Wrapping 과정을 할 필요 없이 MonoStateMachine의 역할을 그대로 할 수 있지 않나요?StateMachine자체가 유니티와 독립적으로 돌아가는 순수 로직 클래스라 분리하신건지 만약 그렇다면 분리했을 때 추후에 어떤 장점이 있는건지, 아니면 다른 의도가 있으신건지 궁금해서 질문 올렸습니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
근접 콤보 공격을 만들고 싶습니다.
근접 콤보 공격을 만들고 싶은데 어떤식으로 구성하면 좋을까요?스킬을 각각 만들어서 연결하는 방법으로 구성하고 있는데 막혀서 질문드립니다. 스킬을 만들고 어떤 식으로 연결을 해야될까요? 감이 안잡혀서 여쭤봅니다.
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
하나의 스킬 내에서 타겟, 이펙트가 여러번 바뀌게 하는 방법이 궁금합니다.
예를 들어 적 엔티티를 클릭하여 타겟으로 삼고 공격을 한 후, 다시 타겟 검색을 해서 주변의 아군을 치유하는 스킬이 있습니다.(또는 그냥 자기 자신을 치유)이럴땐, 처음 타겟서칭때 SelectEntity방식으로 적을 찾는데, 이후 이어지는 발동 상황에서는 주변의 적을 positionSearch 방식으로 찾아야 해서 타겟 서칭 방법이 바뀌고, 또 적용해야하는 이펙트 또한 바뀌게 됩니다. 어떻게 보면 두 종류 이상의 스킬을 같이 사용하는 형태 같습니다. precedingAction을 통해 구현하는건, 발동되는 효과가 3가지 이상일 경우도 있으므로 적절하지 않은 것 같습니다. 새로운 스테이트 머신을 만들어서 타겟서칭과 이펙트를 반복하게 만들 수도 있을것 같은데제가 구현하고자 하는 방향이 턴제 형식이라서 굳이 스킬 스테이트 머신을 사용하지 않으려고 합니다. 제가 생각해본 방법은 effect 자체에 타겟서칭을 추가해서 순차적으로 이펙트를 실행함에 따라 매번 타겟 서칭을 새롭게 하는 방법이나, skillData를 2차원 배열로 만들어서 각 레벨별로 각기 다른 효과와 이펙트를 저장하고, skillData를 순차적으로 실행하는 방법 정도입니다. 이러한 구조를 어떻게 구현하면 좋을지 질문하고 싶습니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
올해에 예정된 새로운 강의가 있으신지요?
궁금합니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
스킬트리 질문입니다
스킬트리의 xNode에서 노드 하나에 In 으로 들어오는 포트는 여러개가 설정가능한데out 도 여러개로 나가게 하고 싶은데 잘 되지 않아 이 부분의 해결방법에 대한 조언을 질문드립니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
카테고리의 응용에 대하여 여쭤보고싶습니다.
앞선 강의의 퀘스트 시스템을 현재강의의 identifiedObject를 합쳤고 stat, skill, effect 와 같은 윈도우에서 각각의 카테고리를 만들고 넣어준 다음에 만약 모종의 사유로 이름이 같은 카테고리가 없으면 X버튼 좌측에 추가적인 버튼을 생성시키고 그버튼을 누르면 해당 카테고리를 들어가게 개조를 가했는데 이게 괜찮을까요?내부 폴더를 대규모로 정리하다 보니까 파일의 경로가 틀어져서 Resources.Load들이 다 망가지게되어서 경로 의존성이 너무 높아져서 안정성이 낮아지는건지 여쭤보고 싶습니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
패링형 스킬에 대해 여쭤보고싶습니다
롤에 피오라 W, 이터널 리턴의 니키 W의 스킬들은 각각 가드 성공의 트리거가 하드CC기, 데미지가 트리거가 되는데 이 트리거가 되는 시간을 만들기 위해서는 이펙트를 이용한 버프를 활용하기에는 InActionState에 추가적인 수정이 필요한것같아 모듈식 개발의 취지에 맞질 않다고 생각합니다.추가적인 스킬 스테이트 머신을 만들고 InGuardingState와 같은 예시로 신규 스테이트를 만든 후에 해당 스테이트에서 공격한 대상, 받은 공격의 종류, CC기의 유무를 받게하고 이를 통해서 추가적인 애니메이션과 이펙트를 발동하게 하려고 하는데 이런식의 구조가 모듈식 개발의 적합할까요?
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
MMORPG라면 서버가 어떤 기능들을 가져가야 할까요?
클라가 모든 걸 다하고 서버는 판정만 해야할지 아니면 이동(구르기 같은), 데미지, 차징, State관리, Effect 등도 서버가 처리해야 할지 궁금합니다
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
공격할 때마다 일정 확률로 추가 투사체 발사
특정 아이템 효과로 기본 공격할 때마다 일정 확률로 추가 투사체를 발사하도록 하고 싶습니다.패시브 스킬을 만들어 아이템 장착/해제시 스킬을 등록/해제하도록 만들려고 하는데, 기능을 어떻게 만드는 것이 좋을지 고민이 됩니다. 제가 생각해 본 방법으로는, UseCondition에 IsRunningSkillCondition으로 특정 스킬을 사용하고 있는지 검사하고, IsPassRandomValueCondition으로 일정 확률을 통과했는지 검사한 후에 SpawnProjectileAction으로 투사체를 타겟에게 발사하도록 하면 될 것 같습니다.근데 이 방법으로 아마 동작은 될 것 같은데, 스킬의 UseCondition을 계속 체크해야해서 괜찮을지 의문이 생겼습니다. 마음같아선 OnDealDamage 이벤트에 일정 확률로 추가 투사체를 발사하는 메소드를 등록시키고 싶은데, 이를 스킬 시스템으로 어떻게 구현해야할지 잘 모르겠습니다. 어떤 방식으로 하는 것이 좋을 것 같은지 강사님의 생각이 궁금합니다. 추가로, 특정 아이템 장착시 기본 공격에 넉백이나 스턴 등 특정 이펙트를 추가하려면 어떻게 하는 것이 좋을지도 궁금합니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
공격력 주문력 스킬 계수 레벨 적용
롤의 스킬에는 각종 스탯계수가 붙어있는데요, 공격력계수, 주문력계수, 공격속도계수 등이 있습니다.저는 현재 각 스킬의 계수 관리를 위해서 DealDamage 이펙트의 레벨을 필요한 만큼 만들어서 이용중입니다.예를 들어, ad,ap 계수가 전부 1인 스킬을 구현한다고 하면, DealDamage 이펙트의 레벨을 2개 만들어서 ad계수가 1인 데미지 이펙트, ap계수가 1인 데미지 이펙트를 스킬에 다 추가하는 방식으로 하고 있습니다. 그런데, 레벨로 관리하니까 너무 직관적이지 않아 고민입니다. 예를 들어, ad계수가 1.5인 이펙트의 레벨이 3이라면, 스킬에 장착된 이펙트를 볼 때 이펙트를 또 한 번 더 들어가서 계수가 몇인지 확인하는 것이 너무 불편하게 느껴져서 질문드립니다. 강사님은 어떤 방식으로 관리하는 것이 좋다고 생각하시나요??
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
아이템 및 시너지 효과 스킬 적용
롤토체스같은 게임에서 아이템과 증강체 및 시너지 효과 등을 어떻게 구현하면 좋을지 고민하는데 궁금한게 생겨 질문드립니다.예를 들어, 아이템을 장착하면 8초마다 주변 아군에게 보호막 부여와 같은 것을 구현할 때, 아이템을 장착하면 8초마다 주변 아군에게 보호막을 부여하는 패시브 스킬을 등록하고, 아이템을 해제하면 해당 패시브 스킬을 빼는 방식으로 만들면 될 것 같습니다.시너지 효과로 3타마다 추가 투사체를 발사하는 효과는 시너지가 발동되면 3타인지 체크하는 UseCondition을 가진 패시브 스킬을 통해 추가 투사체를 발사하게 하면 될 것 같습니다.그런데, 아이템을 장착하면 해당 캐릭터의 기본 공격 및 스킬이 체력 10% 이하인 적을 처형시키는 효과는 스킬로 구현이 어떻게 될지, 아니면 다른 좋은 방법이 있을지 떠오르지가 않아서 어떻게 구현할 수 있을지 질문드립니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
Dead 애니메이션 출력 오류입니다.
현재 이렇게 되어있는 상태인데 왜인지 Dead 애니메이션만 실행이 안돼요... 코드는 그대로 복붙한 상태라 애니메이터 쪽이 문제인 것 같은데 뭐가 문제인 걸까요??
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
커스텀 에디터에 관하여 질문이 있습니다.
Quest의 커스텀 에디터를 작성하였는데Quest가 가진 TaskGroups의 TaskGroup의 변수를 수정하였는데 수정이 안되는데 커스텀 에디터의 하위 요소에도 부가적인 작업을 해야 수정이 되는건가요?protected SerializedProperty taskGroupsProperty;protected SerializedProperty rewardsProperty;protected SerializedProperty useAutoCompleteProperty;protected SerializedProperty isCancelableProperty;protected SerializedProperty isSaveavleProperty;protected SerializedProperty acceptConditonsProperty;protected SerializedProperty cancelConditionProperty;protected override void OnEnable(){ base.OnEnable(); taskGroupsProperty = serializedObject.FindProperty("taskGroups"); rewardsProperty = serializedObject.FindProperty("rewards"); useAutoCompleteProperty = serializedObject.FindProperty("useAutoComplete"); isCancelableProperty = serializedObject.FindProperty("isCancelable"); isSaveavleProperty = serializedObject.FindProperty("isSaveable"); acceptConditonsProperty = serializedObject.FindProperty("acceptionConditions"); cancelConditionProperty = serializedObject.FindProperty("cancelConditions");}public override void OnInspectorGUI(){ base.OnInspectorGUI(); serializedObject.Update(); if (DrawFoldoutTitle("Task")) EditorGUILayout.PropertyField(taskGroupsProperty); if (DrawFoldoutTitle("Rewards")) EditorGUILayout.PropertyField(rewardsProperty); if (DrawFoldoutTitle("Option")) EditorGUILayout.PropertyField(useAutoCompleteProperty); EditorGUILayout.PropertyField(isCancelableProperty); EditorGUILayout.PropertyField (isSaveavleProperty); if (DrawFoldoutTitle("Condition")) EditorGUILayout.PropertyField(acceptConditonsProperty); EditorGUILayout.PropertyField(cancelConditionProperty); serializedObject.ApplyModifiedProperties();}이런식으로 작성을 하였는데다른 enum으로 수정을 하여도 기본값인 Null이 출력됩니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
스킬 구현 질문입니다
워크래프트3 영웅들 패시브 오라처럼 영웅이 살아있을때 영구적으로 지속되는 스킬은패시브로 짧은 주기마다 계속해서 효과를 주면 되는걸까요?간단한 스탯 영구적 증가 효과 스킬을패시브 타입으로 세팅에 apllycount 1, cooldown 1이펙트 세팅에서 duration 1.5 로이와 같이 하여 구현을 해보았습니다.혹여 더 좋은 방법이나 위의 방법이 문제가 있을지 궁금하여 질문드립니다.
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
Selct에 대해서 질문드립니다.
안녕하세요 강사님 궁금한게 있어서 질문 드립니다.제가 구현하고 싶은 부분은 리그오브 레전드의 스마트키 기능과 같은 부분입니다.제가 이해한 것이 맞다면 강의 안에서는Select로 비동기적 처리를 할 때 추가 입력을고정된 입력값(마우스 클릭)을 받아서 Select의 비동기적 처리를 구현한것으로 이해했습니다.만약 제가 롤의 SmartKey 기능과 같은 눌렀다가 키를 뗄때(스킬이 등록된 키마다 받아야할 입력이 달라짐)의 입력으로 비동기적 처리를 구현하고 싶다면 어떤식으로 구현해야 할까요?제가 고민해본 방법은 다음과 같습니다.Skill에 ReleaseInput()이라는 함수를 만든다.그리고 TargetSelectionAction에 똑같은 이름의 ReleaseInput() 함수를 만든다.ReleaseInput() 함수는 SkillSlot의 바인딩된 키 값을 기준으로 키를 뗄 때 호출된다.Skill의 RealeseInput()호출되면 Skill -> TargetSearch -> TargetSelectionAction 의 순서로 TargetSelection에 접근하여 TargetSelection의 추가로 만든releaseInput()함수를 호출한다.TargetSelectionAction에 releaseInputOccur이벤트를 만들고 ReleaseInput()함수로 이 이벤트를 Invoke해준다."키를 뗌" 액션을 Select의 비동기 방식에서 추가 입력값으로 이용하고 싶다면 releaseInputOccur이벤트에 추가적인 함수를 구독하여 기능을 구현한다.이런 식으로 생각해봤는데. 제가 아직 이 TargetSearcher 시스템에 이해도가 부족해서, 구현해주신 TargetSearcher 의 흐름을 망치지 않고 추가 기능을 만든 것 인지 아직 헷갈립니다.그래서 강사님께서 SmartKey방식을 구현하신다면 어떤 방식으로 구현하실지 궁금해서 여쭤봅니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
UseInAction에 대해서 질문드립니다.
제가 TargetSelectionTimingOption을 useInAction으로 했는데 SpawnSkillObjectAction클래스의 Apply부분에서 에러가 발생합니다.public override void Apply(Skill skill){foreach (var targetPosition in skill.TargetPositions) // 이 부분에서 에러 발생{var skillObject = GameObject.Instantiate(skillObjectPrefab).GetComponent<SkillObject>();skillObject.transform.position = targetPosition + (Vector3.up * 0.001f);skillObject.Setup(skill, targetSearcherForSkillObject, duration, applyCount, objectScale);}} 에러는 다음 오류가 발생합니다.NullReferenceException: Object reference not set to an instance of an objectSpawnSkillObjectAction.Apply (Skill skill) (at Assets/Scripts/Core/Skill/Action/SpawnSkillObjectAction.cs:25)Skill.Apply (System.Boolean isConsumeApplyCount) (at Assets/Scripts/Core/Skill/Skill.cs:643)InActionState.Apply () (at Assets/Scripts/Core/Skill/StateMachine/State/InActionState.cs:75)InActionState.Enter () (at Assets/Scripts/Core/Skill/StateMachine/State/InActionState.cs:23)StateMachine`1[EntityType].ChangeState (StateMachine`1+StateData[EntityType] newStateData) (at Assets/Scripts/Core/StateMachine/StateMachine.cs:88)StateMachine`1[EntityType].ChangeState (State`1[EntityType] newState, System.Int32 layer) (at Assets/Scripts/Core/StateMachine/StateMachine.cs:99)StateMachine`1[EntityType].TryTransition (System.Collections.Generic.IReadOnlyList`1[T] transtions, System.Int32 layer) (at Assets/Scripts/Core/StateMachine/StateMachine.cs:117)StateMachine`1[EntityType].Update () (at Assets/Scripts/Core/StateMachine/StateMachine.cs:135)Skill.Update () (at Assets/Scripts/Core/Skill/Skill.cs:396)SkillSystem.UpdateSkills () (at Assets/Scripts/Core/Skill/SkillSystem.cs:165)SkillSystem.Update () (at Assets/Scripts/Core/Skill/SkillSystem.cs:76)
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
Effect만 이용하고 싶습니다.
Combat 시스템에 effect만 따로 사용하고 싶은데 아래처럼 그냥 사용하면[SerializeField] private Effect stunEffect; playerEntity.SkillSystem.Apply(stunEffect);Effect.cs var stackActions = StackActions.Where(x => x.Stack <= currentStack && !aplliedStackActions.Contains(x) && x.IsApplicable);위의 블록에서 ArgumentNullException: Value cannot be null 오류가 뜨더라구요 아마 StackActions값이 null이라 뜨는 것 같은데Skill을 사용 안하고 Effect를 사용하니 초기화 과정에서 문제가 있는 것 같습니다. 아니면 혹시 다르게 사용할 방법이 있을까 싶어서 질문드려봅니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
스킬의 Statemachine에서 변수를 가져오는 방법이 있을까요
너무 많은 질문을 드려서 죄송합니다.InActionState에서 액션을 추가해서 이벤트를 통해서 SkillSystem에서 이벤트가 호출될때를 이용하려고 하는데 SkillSystem에서 직접적으로 해당 스킬을 가져와서 스킬의 StateMachine을 가져오려고해도 가져올수가 없습니다. 애니메이션 이벤트를 활용하는 함수에서Owner.StateMachine.GetCurrentState() is InSkillActionState ownerState를 이용하면 가져올수있을까 했는데 안되네요스킬의 statemachine의 내부에 있는 InActionState에서 Entity가 가진 변수를 가져오는건 알겠는데 skillsystem에서 skill의 statemachine에 포함되는 inActionstate의 변수를 가져오는 방법을 잘 모르겠습니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
InActionState에 추가하는 변수에 관하여 질문이 있습니다.
InActionState 플레이어의 입력을 받게 하려고 했는데 private PlayerInputEnum[] playerinput; 이렇게 변수를 만들고playerinput = Entity.Owner.PlayerEntityInput.playerInputList; 이거를 통해서 가져오려고 했는데 이걸 Setup에 넣으면 스테이트 머신이 고장나면서 버그가 발생하고KeyNotFoundException: The given key '0' was not present in the dictionary.System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at <834b2ded5dad441e8c7a4287897d63c7>:0)StateMachine`1[EntityType].GetCurrentState (System.Int32 layer) (at Assets/Scripts/Core/StateMachine/StateMachine.cs:360)StateMachine`1[EntityType].GetCurrentStateType (System.Int32 layer) (at Assets/Scripts/Core/StateMachine/StateMachine.cs:363)Skill.GetCurrentStateType (System.Int32 layer) (at Assets/Scripts/Core/Skill/Skill.cs:600)Test.SkillTest.OnGUI () (at Assets/Scripts/Test/Skill/SkillTest.cs:53)UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)Enter에 넣어야 멀쩡히 작동을해서 질문을 드립니다.다른 변수로 테스트를 해보아도 배열 형태의 변수만 버그가 발생하는것 같아 질문을 드립니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
스킬 사용에 관한 질문이 있습니다.
스킬시스템의public bool Use(Skill skill){ skill = Find(skill); Debug.Assert(skill != null, $"SkillSystem::IncreaseStack({skill.CodeName}) - Skill이 System에 등록되지 않았습니다."); return skill.Use();}여기에서 스킬을 사용한다는것은 알겠는데 등록되어있는 스킬을 사용하는 방식이 어떤건지 잘 모르겠습니다.모든 참조를 이용해서 찾아도 스킬테스트에서 사용한 것 말고는 없고 이벤트를 이용한것인가 싶어서 다 찾아보아도 안보여서 질문을 드립니다.
주간 인기글
순위 정보를
불러오고 있어요