일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 소규모프로젝트
- ARProgect
- Unity
- 짐벌락
- callbyreference
- 레이캐스트
- AR게임
- ExtensionMethod
- AR세팅
- 리듬게임
- C#
- 확장메서드
- github
- 델리게이트
- 게임
- 깃허브
- ar
- AR Foundation
- 로케트
- 유니티
- 병맛게임
- callbyvalue
- 게임개발
- 게임제작
- 리듬게임에디터
- 1인개발
- Euler
- 인터페이스
- raycast
- Quaternion
- Today
- Total
Ssssong += Dev
[퍼즐게임] WHITEPOLYGON - 4 본문
아이템 트레이드 시스템을 제작하는 도중 드래그 앤 드랍이 안먹혀서 시간을 꽤 날려먹었다...
드랍을 할 때 드랍할 영역에서 IDropHandler를 인식 못하는 문제였는데, 드래그 중인 오브젝트에 Ignore Raycast도 먹여보고...
IDropHandler로 안되니까 OnTrigger도 써보고... 난리였는데
생각보다 해결 방법은 쉬웠다. 캔버스 그룹에 blocksRaycast를 false로 두면 되었던 것...
이 두 줄로 모든 것이 해결될 줄이야!
gameObject.AddComponent<CanvasGroup>();
gameObject.GetComponent<CanvasGroup>().blocksRaycasts = false;
비슷한 문제로 UI 요소를 Raycast에서 제외하고 싶다면 Raycast Target을 체크 해제하면 된다.
주말동안 프롤로그 연출과 퀘스트 시스템을 만들었다.
퀘스트 시스템은 아직 충분한 조건에 대해 유연하지는 않지만... 개발하면서 조금씩 확장성을 다듬고 있다.
퀘스트 컴포넌트로 시스템을 만들고 각 퀘스트마다 상속하여서 쓰고 있다.
모나릐자(그래서 MonaLisa가 아닌 MonaRisa로 표기된다...) 퀘스트에 대한 코드는 다음과 같이 만들었다.
CQuestComponent로 퀘스트 시스템의 틀을 잡고
그 자식으로 QClickEvent / QStartEvent 가 상속받아 클릭 시 발생 이벤트인지 시작 시 자동 실행 이벤트인지 나뉜다.
talkalbleCharacter는 dialogueNum에 따라 다른 텍스트를 출력한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CQuestComponent : CComponent, IQuestEvent
{
public delegate void QuestAdd();
public QuestAdd StartQuestAdd;
public QuestAdd EndQuestAdd;
public QuestAdd EndDialogueAdd;
public bool questStart = false;
public bool questClear = false;
public CCharacter talkableCharacter;
[Header("DialogueStyle")]
public DIALOGUESTYLE dialogueStyle;
[SerializeField]
protected CQuestComponent checkPrevQuest;
[SerializeField]
protected CQuestComponent checkNextQuest;
[Header("RotateQuestCheck")]
public Vector3[] rotateEvent;
public void StartQuest()
{
if(StartQuestAdd != null)
StartQuestAdd();
}
public void EndQuest()
{
if(EndQuestAdd != null)
EndQuestAdd();
questClear = true;
CheckNextState();
}
public void EndDialogue()
{
if (EndDialogueAdd != null)
EndDialogueAdd();
}
public void DialogueStart()
{
talkableCharacter.ShowDialogue();
}
public void CheckPrevState()
{
if (checkPrevQuest.questClear)
questStart = true;
}
public void CheckNextState()
{
if(checkNextQuest != null)
checkNextQuest.questStart = true;
}
public virtual void RotateQuestClear(int dialogueNum)
{
Debug.Log("rotateQuestClear");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class QClickEvent : CQuestComponent
{
public void OnMouseDown()
{
if(EventSystem.current.IsPointerOverGameObject())
{
Debug.Log(EventSystem.current);
}
if(!questClear && questStart && CUIManager.Instance.uiCanInteract && !EventSystem.current.IsPointerOverGameObject())
{
Debug.Log("startQuest");
StartQuest();
}
else if (EventSystem.current.IsPointerOverGameObject())
{
Debug.Log(EventSystem.current);
}
}
}
QClickEvent를 상속받고 있으므로 모나릐자는 클릭 시 발생 이벤트이다.
대사가 끝났을 때의 함수 실행은 델리게이트로 추가해주고 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonaRisaEvent : QClickEvent
{
public override void Start()
{
StartQuestAdd += CheckQuestNum;
}
public void CheckQuestNum()
{
if (talkableCharacter.dialogueNum == 0)
{
talkableCharacter.dialogueUI.ChangeDialoguePos(dialogueStyle);
talkableCharacter.ShowDialogue();
}
else if (talkableCharacter.dialogueNum == 1)
{
talkableCharacter.dialogueUI.ChangeDialoguePos(dialogueStyle);
talkableCharacter.ShowDialogue();
EndDialogueAdd += ChangeNextQuestDialogue;
}
}
public void ChangeNextQuestDialogue()
{
checkNextQuest.talkableCharacter.dialogueNum = 1;
}
public override void RotateQuestClear(int dialogueNum)
{
Debug.Log("rotateQuestClear");
talkableCharacter.dialogueNum = dialogueNum;
talkableCharacter.dialogueUI.ChangeDialoguePos(dialogueStyle);
StartQuest();
}
}
회전 완료 시 이벤트 실행 등은 다른 오브젝트에 붙어있으니 생략....
아직 꽤나 하드코딩인 느낌인데 머리를 좀 더 굴려봐서... 효율적인 방법을 고민해봐야 겠다.
'개발 > WHITE POLYGON' 카테고리의 다른 글
[퍼즐게임] WHITEPOLYGON - 6 (0) | 2022.07.24 |
---|---|
[퍼즐게임] WHITE POLYGON - 5 (0) | 2022.07.19 |
[퍼즐게임] WHITE POLYGON - 3 (0) | 2022.07.12 |
[퍼즐게임] WHITE POLYGON - 2 (0) | 2022.07.08 |
[퍼즐게임] WHITE POLYGON - 1 (0) | 2022.07.08 |