리스폰 가능한 포지션 가져오기(방해물 영역제외)
게임을 만들다보면 게임 장르특성에 따라 다르긴하지만 .
리스폰영역에대한 고민을 할때 구현했던 코드들이다.
기본적으로 겹쳐서 생성하면안되는 로직으로 처리를 했고 distance를 기반으로 해당 위치를 제외하고 리스폰 영역을 구하도록 작업했다.
public Vector3 GetNotObstaclePosition(List<GameObject> _obstacle)
{
Vector3 returnValue = Vector3.zero;
bool flag = false;
do
{
returnValue = this.GetIntPosition(Random.insideUnitSphere * 100f);
returnValue.y = 0f;
if(false == Utill.Instance.CheckMapPosition(returnValue, 0.5f)){
flag = true;
}
else{
flag = false;
for (int i = 0; i < _obstacle.Count; i++)
{
Vector3 pos = _obstacle[i].transform.position;
float distance =Vector3.Distance(returnValue, pos);
//if (distance < 5f)
if (distance < 5f)
{
flag = true;
i = _obstacle.Count;
}
}
}
} while (flag);
return returnValue;
}
public Vector3 GetRespawnPosition(){
Vector3 returnValue = Vector3.zero;
List<GameObject> obstacleList = new List<GameObject>();
List<UnitBase> unitList = UnitManager.Instance.GetUnitList();
for(int i = 0; i < unitList.Count;i++){
obstacleList.Add(unitList[i].gameObject);
}
do{
Vector3 createPosition = InfluenceManager.Instance.GetNotObstaclePosition(obstacleList);
returnValue = new Vector3(createPosition.x ,0.6627319f,createPosition.z);
}while(false == Utill.Instance.CheckMapPosition(returnValue, 0.5f));
return returnValue;
}
★★☆☆☆
반응형
'개발 > 코드' 카테고리의 다른 글
코드)Linq - list 특정조건 비교 / list 와 list의 중복/ list 와 list 합집합 (2) | 2021.01.13 |
---|---|
Unity)List Shuffle(리스트 랜덤으로 순서 변경) (0) | 2020.12.15 |
코드) c# 날짜계산하기(DateTime 비교) (0) | 2020.05.29 |
코드) Unity - 바이트를 기준으로 String 짜르기 (2) | 2020.03.25 |
코드) 카메라 줌 (Camera Zoom) (1) | 2020.03.15 |
댓글