inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

JobQueue

HandleSkill 내 Push(EnterGame, arrow) 함수 사용

해결된 질문

251

sounds good

작성한 질문수 13

0

안녕하세요

HandleSkill함수는 PacketHandler.cs에서 room.Push(room.HandleSkill, player, skillPacket);에 의해서 호출되고 있는것 같습니다.

그렇다면 HandleSkill함수에 포함된 Push(EnterGame, arrow); 는 이미 Job으로 관리되고 있기 떄문에, (기존의 방식대로)  EnterGame(arrow); 로 호출해도 되는건지 궁금합니다~

public void HandleSkill(Player player, C_Skill skillPacket)

{

if (player == null)

return;

ObjectInfo info = player.Info;

if (info.PosInfo.State != CreatureState.Idle)

return;

// TODO : 스킬 사용 가능 여부 체크

info.PosInfo.State = CreatureState.Skill;

S_Skill skill = new S_Skill() { Info = new SkillInfo() };

skill.ObjectId = info.ObjectId;

skill.Info.SkillId = skillPacket.Info.SkillId;

Broadcast(skill);

Data.Skill skillData = null;

if (DataManager.SkillDict.TryGetValue(skillPacket.Info.SkillId, out skillData) == false)

return;

switch (skillData.skillType)

{

case SkillType.SkillAuto:

{

Vector2Int skillPos = player.GetFrontCellPos(info.PosInfo.MoveDir);

GameObject target = Map.Find(skillPos);

if (target != null)

{

Console.WriteLine("Hit GameObject !");

}

}

break;

case SkillType.SkillProjectile:

{

Arrow arrow = ObjectManager.Instance.Add<Arrow>();

if (arrow == null)

return;

arrow.Owner = player;

arrow.Data = skillData;

arrow.PosInfo.State = CreatureState.Moving;

arrow.PosInfo.MoveDir = player.PosInfo.MoveDir;

arrow.PosInfo.PosX = player.PosInfo.PosX;

arrow.PosInfo.PosY = player.PosInfo.PosY;

arrow.Speed = skillData.projectile.speed;

Push(EnterGame, arrow);

}

break;

}

}

C# unity

답변 1

2

Rookiss

이미 Serializer에 의해 관리/실행되고 있는 함수 내부에서는
Push를 해서 새로운 Job으로 밀어넣어도 되고,
아니면 그냥 일반 함수처럼 호출해도 됩니다.
다만 이는 동일한 Serializer에서 실행하는 경우에만 그렇습니다.

지금은 간단한 규모/구조로 개발하고 있기 때문에
사실상 GameRoom 안에 1개의 Serializer가 있지만,
나중에 가면 하나의 GameRoom을 더 세부적인 영역으로 쪼개고
하나의 영역마다 Serializer를 배치하는 경우도 있고.
더 극단적으로는 하나의 객체(Player, Monster, NPC ...)마다
Serializer를 놓는 방식도 있습니다.

그런 경우에서 다른 Serializer로 일감을 넣고 싶으면
그냥 호출하면 안되고 무조건 Push를 해줘야겠죠.

그래서 일반적으로 실수의 여지를 줄이기 위해 그냥
Push를 하는 것이 더 좋다고 생각하지만,
이런 간단한 구조에서는 뭐로 해도 크게 상관 없습니다.

MessagePack

0

85

1

본인 플레이어 이동 관련 질문

0

49

1

Part7 Part9 질문이 있습니다.

0

72

1

.

0

116

1

.

0

105

2

게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제

0

92

1

타일 팔레트 깔았는데도 안돼요

0

116

2

2D로 그냥 만들어도 되나요?

0

81

2

지난 강의와 이어지는게 맞을까요?

0

80

2

순환참조 문제로 인해 발생하는 문제는 없을까요?

0

162

2

유니티 클라와 C++서버연동

0

277

2

멀티플레이 테스트 환경 관련 질문입니다

0

207

3

강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!

0

150

2

코드 관련한 몇 가지 질문입니다!

0

153

2

3d 프로젝트 이동 동기화 관련

0

321

4

파트 7 스트레스 테스트 질문 드립니다.

1

189

2

맵 이동 방식

0

133

0

맵 이동 관련해서 질문드립니다.

0

91

1

안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,

0

201

2

안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!

0

160

1

[팁] 2024년 기준 버전 이슈?

0

455

1

SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?

1

203

1

지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것

0

336

2

PushAfter 사용 질문

0

192

1