playXP

서브 메뉴

Page. 1 / 244 [내 메뉴에 추가]
글쓰기
작성자 판밍
작성일 2021-06-12 02:09:08 KST 조회 256
제목
유닛을 생성할 수 있는, 구역 내 무작위 지점을 만들 수 있을까요?

원하는 것

반경이 n인 유닛을 지점 A에 생성한다. (n은 1~7)

   - 단, 지점A : 구역 B의 무작위 지점

   - 단, 유닛은 반드시 구역 B 내부에 생성되어야 함

 

 

현재의 문제

그냥 구역 내 무작위 지점을 하게 되면, 유닛이 원하는 곳에 생성되지 않거나, 생성이 안됨

 

예를 들어

- 지점 A = 구역 B의 무작위 지점

- 유닛 만들기 - 광전사 1개를 지점 A에 만들기

 

이런 트리거를 쓰면

지점 A가 광전사가 서있을 수 있는 지점이면, 그 위치에 생성되지만

지점 A가 광전사가 서있을 수 없는 지점이면, 그 위치 주변으로 생성되면서, 의도하지 않은 곳에 생성되거나

생성이 안될 수도 있습니다.

 

 

현재 시도 중인 것

변수 A 설정 = 구역C 의 무작위 지점

변수 B 설정 = 유닛 유형의 지점에서 배치 찾기 - [광전사]를 [변수A]지점에서 배치 찾기, [플레이어1], [반경1]

 

While-Do

 조건

  - 변수B = 통과가능 = 거짓

  - 변수B = 구역 C내에 있음 = 거짓

  - 전체지도 중앙과 변수B 사이가 이동경로로 연결됨 = 거짓

 행동

  - 변수 A = 구역C 의 무작위 지점

  - 변수 B = 유닛 유형의 지점에서 배치 찾기 - [광전사]를 [변수A]지점에서 배치 찾기, [플레이어1], [반경1]​

 

유닛 만들기 - 변수B 지점에 광전사 생성

 

이런구조로 해봤는데

되기는 한데, 간혹가서 While-Do가 무한반복되면서 게임이 멈춰버립니다.

그렇다고 대기를 0.0625초 이상 넣게 되면, 게임이 엄청나게 지연이 되어버리구요

 

안전하고 정확하게 구현할 방법을 찾고있습니다.

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
자치령친위대 (2021-06-12 13:37:35 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
투명 유닛을 이용하여 배치확인을 활용하도록 합니다.
1.먼저 투명 유닛 1개를 배치해주고, 구역B의 무작위 지점을 돌아다니도록 지시 전달을 내립니다.
2.해당 투명 유닛을 처치하고 해당 투명 유닛의 위치에 원하는 유닛을 만들도록 합니다.
투명 유닛을 통한 배치확인은 트리거나 데이터에서 유닛을 생성할 때 많이 쓰이는 조건확인 중 하나이지요.
판밍 (2021-06-13 03:54:14 KST)
0↑ ↓0
센스 이미지
ㄴ 투명유닛을 어떻게 "무작위 지점을 돌아다니게" 지정하나요?
판밍 (2021-06-13 03:55:05 KST)
0↑ ↓0
센스 이미지
ㄴ 투명유닛이 무작위 지점을 돌아다니면, 트리거 발동까지 시간이 얼마나 걸리나요?
게임 대기가 0.0625초라도 들어가는순간 게임 진행이 끊어진다는 느낌을 강하게 받기에, 연산시간을 제외한 다른 지연시간이 들어가면 안됩니다.
자치령친위대 (2021-06-13 09:25:41 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
1.구역B를 투명 지상 유닛이 문제없이 돌아다닐수 있도록 조정하거나, 구역B를 조정하는것이 싫다면은 투명 공중 유닛을 추가하여 투명 공중 유닛이 구역B를 무작위로 계속 이동하도록하고 투명 지상 유닛은 이 유닛을 따라다니도록 하면 될거같습니다.
자치령친위대 (2021-06-13 09:31:03 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
2.투명 지상 유닛이 생성되고 무작위로 돌아다니기까지 시간이 걸릴테니 아예 지도가 시작할 때 투명 지상 유닛이 생성하여 돌아다니도록 하는것이 어떨까 싶습니다. 사용하고 난 다음에는 처치하는것이 좋긴하지만 계속 쓸거라면 처치하지 말고 내버려 두는게 나을거 같습니다.
자치령친위대 (2021-06-13 09:51:45 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
비슷한 예로 협동전 제라툴의 유물배치가 있습니다.
판밍 (2021-06-13 13:29:32 KST)
0↑ ↓0
센스 이미지
그러니까, "돌아다니게"를 어떻게 설정하냐구요
무엇을 어떻게 설정해야 유닛이 특정 구역을 벗어나지 않고, 해당 구역을 무작위로 돌아다니게 되는거죠?
아이콘 A.Reaper (2021-06-13 19:02:00 KST)
0↑ ↓0
센스 이미지
실패할 수 있는 조건으로 While 구문을 쓰면 프리징 현상이 일어날 수밖에 없습니다. 해당 구역에 광전사가 설 지점이 존재하지 않는 경우가 단 한 번이라도 발생 가능하다면 While구문을 쓸 게 아니라 N회 반복을 이용하셔야 합니다. 일종의 안전장치(이자 렉 발생 방지)인데, 협동전의 공허 균열이 유닛을 생성할 때도 100회 반복 이런 식으로 합니다. 저도 그렇게 하고요.

글을 올리시면서 실제 While 구문의 조건에 달아 놓은 "또는"을 생략하신 것 같은데, 그렇다면 시도하고 계신 방법은 맞는 것 같습니다.

만약 광전사를 반드시 생성해야만 한다면 구역을 조금 벗어나더라도 광전사가 생성되도록 2차 작업(구역의 중앙에서 생성하거나, 구역의 중앙에서 반경 R(R은 기존 구역의 반경보다 큼)인 원을 구역으로 변환해 그 안에서 다시 무작위 지점을 검색하는 등)을 넣어주시고, 굳이 광전사를 생성할 필요가 없다면 그냥 건너뛰시면 됩니다. 저 같은 경우는 중앙에서 생성합니다.
아이콘 A.Reaper (2021-06-13 19:09:38 KST)
0↑ ↓0
센스 이미지
아, 구역에 광전사가 배치될 수 없을 때 이미 구역에 있는 유닛을 치워버리는 방법도 있긴 하네요. 자치령친위대 님이 말씀하시는 방법이 이런 게 아닐까 합니다. 반경이 같고 밀어내기 우선순위가 높은 투명 유닛을 지점에 강제로 생성한 다음, 다른 유닛이 밀릴 때까지 기다린 후 투명 유닛을 제거하고 그 자리에 광전사를 생성하는 거죠. 직접 해본 적은 없지만 충분히 가능할 것 같습니다.
자치령친위대 (2021-06-13 23:51:30 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
지시전달에서 [유닛 : 투명유닛 / 지시 : 대상 지점한 지점에 지시 (능력명령 이동, 대상 지점 구역 B) / 기존 지시 바꾸기

로 하면 구역B의 무작위 지점에 투명 유닛이 이동합니다. 그런데 이렇게 하면 도착지인 구역B의 무작위 지점이 지상 유닛으로는 도착 불가능한 지점일 수도 있습니다. 따라서 다음과 같은 3가지 방법들이 있죠.
자치령친위대 (2021-06-13 23:59:58 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
1.구역B의 무작위 지점이 모두 도착 가능한 지점이 되도록 구역B를 수정
구역B를 적당히 더하고 빼서 구역 합병을 하면 됩니다. 그냥 구역B를 좀 더 세밀하게 지정해놓는 것이지요.

2.주기적인 이벤트에서 t초마다 위 지시전달을 행동
이 경우 해당 유닛이 Random Walk 운동을 따르므로 해당 유닛의 최초 지점에서 가장 먼 지점까지 도달하는에 시간이 오래 걸릴 수 있습니다.

3.위에 이야기한 투명 공중 유닛을 이용한 추적


물론 1번같은 경우 1번 지시를 내리고 난 다음 해당 유닛이 도착하고 난 뒤 다시 구역B의 무작위 지점으로 이동하도록 지시전달을 해줘야하기 때문에 "유닛 대기상태"라는 이벤트에서 "트리거 발동 유닛 유형 = 투명 유닛"인 조건을 넣고 트리거 발동 유닛이 해당 지시 전달을 행동하도록 트리거를 추가하면 투명 유닛이 도착지점에 도달하고 대기상태가 되자마자 바로 다시 구역B의 무작위 지점으로 이동합니다.
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.