Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 1103번
- 유니티
- 17070번
- 백준 17070번
- 백준 c++ 2468번
- 백준
- 코딩테스트
- Lv2
- 백준 1103번 게임
- 2468 c++
- dfs
- Algorithm
- 오브젝트 풀링
- Lv.3
- 2870번 수학숙제 c++
- 수학숙제
- 2870번 c++
- 코테
- 2870번
- c++
- 프로그래머스
- 백준 2870번
- 백준 1103번 c++
- Unity
- 플레이어 이동
- 백준 c++ 2870번
- 백준 17070번 c++
- Beakjoon
- C#
- 2870번 수학숙제
Archives
- Today
- Total
주녘공부일지
[해피스케치] 스테이지 관리 및 제어 본문
플레이 영상
해피스케치의 요청에 따라 모션 감지를 이용한 AR게임 프로토타입 모델
- 여러 가지 미니게임 스테이지를 구현하여 2명의 사용자가 대전을 하는 AR 멀티 게임
- PC버전으로 선 구현 후 채택 시 AR 멀티 게임으로 확장
스테이지 관련
StageController는 Stage를 제어 및 관리
- Stage는 콘텐츠에 따라 SingleStage와 MultiStage를 상속받아서 구체화하며 스테이지를 구현
- 구체화된 스테이지 클래스는 OnReceiveStageParam 메서드로 스테이지의 정보가 변경됨을 알림
Stage는 스테이지 진행 상황에 대한 정보와 플레이어를 관리
- 싱글 스테이지 : 하나의 스테이지에 2명의 플레이어가 소환되어 플레이하는 환경
- 멀티 스테이지 : 동일한 스테이지 2개의 각각의 플레이어가 소환되어 플레이하는 환경
public enum EStageType
{
SharkAvoidance,
CollectingCandy,
CrossingBridge,
Max
}
public abstract class BaseStage : MonoBehaviour
{
[field: SerializeField, ReadOnly] protected Transform playerStartPoint;
[field: SerializeField, ReadOnly] public EStageType StageType { get; protected set; }
#if UNITY_EDITOR
protected virtual void Reset()
{
playerStartPoint = Util.FindChild<Transform>(this.gameObject, "PlayerStartPoint", true);
playerStartPoint ??= Util.Editor_InstantiateObject(this.transform).transform;
playerStartPoint.gameObject.name = "PlayerStartPoint";
}
#endif
public abstract void StartStage();
public abstract void EndStage(ETeamType winnerTeam);
}
public abstract class SingleStage : BaseStage
{
[SerializeField, ReadOnly] protected Player leftPlayer;
[SerializeField, ReadOnly] protected Player rightPlayer;
public event Action<StageParam> OnLeftReceiveStageParam;
public event Action<StageParam> OnRightReceiveStageParam;
protected void OnLeftReceiveStageParamCallBack(StageParam stageParam)
{
if (Managers.Game.IsGamePlay == false)
return;
OnLeftReceiveStageParam?.Invoke(stageParam);
}
protected void OnRightReceiveStageParamCallBack(StageParam stageParam)
{
if (Managers.Game.IsGamePlay == false)
return;
OnRightReceiveStageParam?.Invoke(stageParam);
}
public virtual void SetInfo(Player leftPlayer, Player rightPlayer)
{
StageType = Managers.Game.GetCurrStageType();
this.leftPlayer = leftPlayer;
this.rightPlayer = rightPlayer;
}
public override void StartStage()
{
leftPlayer.SetInfo((int)StageType);
rightPlayer.SetInfo((int)StageType);
}
public override void EndStage(ETeamType winnerTeam)
{
leftPlayer.OnEndStage(leftPlayer.TeamType == winnerTeam);
rightPlayer.OnEndStage(rightPlayer.TeamType == winnerTeam);
}
public abstract void ConnectEvents(Action<ETeamType> onEndGameCallBack);
public abstract Vector3 GetStartPoint(ETeamType teamType);
}
public abstract class MultiStage : BaseStage
{
[field: SerializeField, ReadOnly] public ETeamType TeamType { get; protected set; }
[SerializeField, ReadOnly] protected Player player;
public event Action<StageParam> OnReceiveStageParam;
protected void OnReceiveStageParamCallBack(StageParam stageParam)
{
if (Managers.Game.IsGamePlay == false)
return;
OnReceiveStageParam?.Invoke(stageParam);
}
public virtual void SetInfo(Player player)
{
StageType = Managers.Game.GetCurrStageType();
this.player = player;
TeamType = player.TeamType;
}
public override void StartStage()
{
player.SetInfo((int)StageType);
}
public override void EndStage(ETeamType winnerTeam)
{
player.OnEndStage(player.TeamType == winnerTeam);
}
public abstract void ConnectEvents(Action<ETeamType> onEndGameCallBack);
public Vector3 GetStartPoint() => playerStartPoint.position;
}
'GameDevelopment > [Unity] Project' 카테고리의 다른 글
[더 챌린저스] 오브젝트 풀링 (0) | 2024.12.27 |
---|---|
[해피스케치] 에디터 인스펙터 툴 (카메라, 스테이지) (1) | 2024.12.04 |
[마법사의 길] 캐릭터, 몬스터 AI 상태 관리 (0) | 2024.09.09 |
[더 챌린저스] 동기화(RPC) & 네트워크(Photon) (1) | 2024.09.09 |
[더 챌린저스] 캐릭터 (0) | 2024.09.09 |