flocking코드를 분석하면서 GetNeighbors함수 부분에서 class를 타입으로 받아오는 함수가 있었다.
처음에 이해가 안돼서 분석을 하였다. 아래는 선생님이 알려주신 부분이다.
우선 Enemy라는 클래스가 하나 따로 존재하고 있다고 생각하자.
클래스의 개념은 함수와 변수의 집합으로 생각하면 편하다.
일반적으로 기본적인 스크립트의 구조는 하나의 클래스로 존재한다.
public class Enemy
{
public float hp = 100.0f;
public float speed = 10.0f;
public Vector3 direction;
public UnityEngine.GameObject prefab;
}
EnemyInit라는 우리의 메인 클래스를 보자.
EnemyInit에서 우선 변수 타입이 List<Enemy>인 enemies라는 변수를 만든다.
public List<Enemy> enemies = new List<Enemy>();
*여기에서 List<Enemy>의 뜻은 Enemy클래스를 list로 받아온다는 의미이다.
즉, 이 말은 Enemy클래스가 마치 엑셀처럼 줄이 리스트 형태로 가져와 진다는 의미이다.
start함수에서 enemies리스트에 enemy를 생성하여서 추가한다.
void Start()
{
//Add Eenemy ...
for(int i=0; i<5;i++)
{
Enemy em = new Enemy();
em.hp = 100.0f * i;
em.speed = 10.0f * i;
enemies.Add(em);
}
그 다음,
타입이 List<Enemy>인 GetEnemyList()라는 반환함수를 만든다.
List<Enemy> GetEnemyList()
*우리가 일반적으로 만드는 void붙는 함수는 호출함수라고 한다.
반환함수는 특정 값을 반환하는 함수를 의미하며 주로 매개변수와 함께 사용한다.
* 매개 변수는 변화하는 변수라고 하여,
반환함수는 특정 값을 반환하는 함수를 의미하며 주로 매개변수와 함께 사용한다.
* 매개 변수는 변화하는 변수라고 하여,
함수를 정의할 때 함께 지정해주는 변수값에 들어가는 값을 매개변수라 이해하면 된다.
반환할 값이 list타입이기 때문에 반환할 리스트인 returnEnemies라는 리스트를 새로만든다.
foreach 반복문에서 enemies리스트에 안에 있는 변수를 enemy변수로 대입한다.
List<Enemy> returnEnemies = new List<Enemy>();
foreach (Enemy enemy in enemies)
{
}
만약 hp가 200.0이상이라면 enemy를 아까 생성해둔 returnEnemies리스트 안에 넣는다.
if (enemy.hp >= 200.0f)
{
returnEnemies.Add(enemy);
}
그리고 반환 함수는 항상 return값을 반환해야 한다.
return returnEnemies;
리스트 안에 리스트 있고,,, 또 리스트 불러오고.... 으아아아아아악....
<전체코드>
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 31 32 33 34 35 36 37 38 39 40 41 42 | public class Enemy { public float hp = 100.0f; public float speed = 10.0f; public Vector3 direction; public UnityEngine.GameObject prefab; } public class EnemyInit : MonoBehaviour { public List<Enemy> enemies = new List<Enemy>(); void Start() { //Add Eenemy ... for(int i=0; i<5;i++) { Enemy em = new Enemy(); em.hp = 100.0f * i; em.speed = 10.0f * i; enemies.Add(em); } //가까이 있는 적을 추출한다. List<Enemy> closestEnemy = GetEnemyList(); } List<Enemy> GetEnemyList() { List<Enemy> returnEnemies = new List<Enemy>(); foreach (Enemy enemy in enemies) { if (enemy.hp >= 200.0f) { returnEnemies.Add(enemy); } } return returnEnemies; } } | cs |
'Project > Galapagos' 카테고리의 다른 글
구면 좌표계 Day1(공식) (0) | 2019.01.11 |
---|---|
마우스를 따라서 이동하는 개체 코드 (0) | 2019.01.11 |
Flocking Day2(2d flocking코드 분석) (0) | 2019.01.11 |
네트워크 Day5 (포톤네트워크 PUN2 - 동기화 분석) (0) | 2018.12.25 |
네트워크 Day4 (포톤네트워크 PUN2 - Cross Device) (0) | 2018.12.18 |