1. 유니티의 Transform.Find
유니티에서 특정 오브젝트를 검색해서 찾아주는 함수는 Transform의 Find 함수가 대표적이다.
스크립트에서 간단하게 자식 노드들에 접근할 수 있고, 파라미터로 들어가는 path에 경로를 더하고 빼면서 다양하게 활용할 수 있다.
2. 코코스 크리에이터의 Node.getChildByName
유니티의 Find와 대응되는 함수가 코코스 크리에이터에는 getChildByName 이라는 함수로 존재한다.
문제는 이 함수는 노드의 자식을 한 단계밖에 검색하지 못 한다는 것이다.
A 노드에서 getChildByName 함수를 통해서 B, C는 찾을 수 있지만 그 아래 D, E, F, G는 못 찾는다.
이런 큰 단점이 있지만 코코스 2.4.8 기준으로, 유니티의 Find와 같은 함수는 아직까지 제공하지 않고 있다.
결국 A 노드에서 H 노드를 찾으려면
root.getChildByName("B").getChildByName("D").getChildByName("H") 라는 코드를 작성해야 한다.
그래서 이를 매핑해서 유니티의 Find 함수와 최대한 비슷하게 함수를 만들면 이러하다.
static Find(root:cc.Node, path:string):cc.Node
{
var ret = root;
var childs = path.split("/");
for(var i = 0; i < childs.length; ++i)
{
if (ret == null) {
console.log("Can not find - " + path);
return null;
}
ret = ret.getChildByName(childs[i]);
}
return ret;
}
입력받은 문자열을 '/' 단위로 잘라서 노드 구조의 레벨(level)을 나누고
재귀 함수 형태로 getChildByName 함수를 호출해서 레벨을 하나씩 내려가면서 노드를 찾는 구조다.
var target = Utility.Find(this.node, "Houses/West/LeftSide");
사용할 때는 이와 같이 유니티의 Find 함수와 비슷하게 사용할 수 있다.
'Cocos Creator' 카테고리의 다른 글
[2.4.5 버그] cc.tween repeatForever (0) | 2022.03.10 |
---|---|
비동기 함수 실행 방법들 (0) | 2022.01.07 |
cc.tween (0) | 2021.06.09 |
[예제 게임] GameScene #5 (스프라이트 로드와 교체) (0) | 2021.06.07 |
[예제 게임] GameScene #4 (오디오 매니저) (0) | 2021.06.04 |