CREATE YOUR WORLD
Players & Characters : Tips
제페토 캐릭터 외형 숨기기, 나타나기
3min
렌더러 방식 사용 zepeto 캐릭터의 렌더러를 비활성화하여 카메라에 보이지 않게 할 수 있습니다 다음은 버튼을 눌러 캐릭터의 외형을 숨기고 보여주는 예제 코드입니다 1\) 계층 구조 만들기 > 빈 객체 만들기 및 이름을 hideshowcharacter로 변경합니다 2\) 프로젝트 만들기 > 만들기 > zepeto > typescript 및 이름을 hideshowcharacter로 변경합니다 3\) hideshowcharacter 객체에 스크립트를 추가합니다 4\) 아래와 같이 샘플 스크립트를 작성합니다 hideshowcharacter import { renderer } from 'unityengine'; import { button } from 'unityengine ui'; import { spawninfo, zepetoplayers } from 'zepeto character controller'; import { zepetoscriptbehaviour } from 'zepeto script'; export default class hideshowcharacter extends zepetoscriptbehaviour { public hidecharacterbtn button; public showcharacterbtn button; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this hidecharacterbtn onclick addlistener(() => { // zepeto 캐릭터의 렌더러를 비활성화하여 카메라에 보이지 않게 합니다 zepetoplayers instance localplayer zepetoplayer character getcomponentsinchildren\<renderer>() foreach(r => { r enabled = false; console log("숨기기"); }); }); this showcharacterbtn onclick addlistener(() => { zepetoplayers instance localplayer zepetoplayer character getcomponentsinchildren\<renderer>() foreach(r => { r enabled = true; console log("보이기"); }); }); }); } } 5\) 캔버스 > 버튼을 사용하여 각 버튼을 화면에 추가하고 스크립트 검사기에 할당합니다 6\) \[▶︎(재생)] 버튼을 눌러 실행하세요 캐릭터의 레이어를 변경하여 숨기기 처리하기 캐릭터의 렌더러를 비활성화하는 것 외에도 캐릭터의 외형을 숨기고 보여줄 수 있습니다 이것은 zepeto 카메라의 culling mask를 활용하여 수행됩니다 culling mask를 사용하면 특정 레이어를 보이지 않게 처리할 수 있습니다 zepeto 캐릭터가 생성될 때 기본적으로 설정된 레이어가 없습니다 다음 예제 코드는 zepeto 카메라에서 특정 레이어를 보이지 않게 만드는 방법을 보여주며, 버튼 클릭 시 zepeto 캐릭터의 레이어를 변경하여 숨기고 표시하는 방법을 보여줍니다 import { zepetoscriptbehaviour } from 'zepeto script'; import { camera, layermask, transform } from "unityengine"; import { zepetocharacter, zepetoplayers } from "zepeto character controller"; import { button } from "unityengine ui"; // 캐릭터의 모든 하위 객체의 레이어를 변경하는 함수 function changelayersrecursively(transform transform, layer string, fromlayer? string) void { if (!transform || !layer || layer length === 0) { return; } if (fromlayer) { if (transform gameobject layer === layermask nametolayer(fromlayer)) { transform gameobject layer = layermask nametolayer(layer); } } else { transform gameobject layer = layermask nametolayer(layer); } for (let i = 0; i < transform childcount; i++) { let child = transform getchild(i); changelayersrecursively(child, layer, fromlayer); } } export default class changecameralayer extends zepetoscriptbehaviour { private zepetocamera camera; public hidecharacterbtn button; public showcharacterbtn button; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { let character = zepetoplayers instance localplayer zepetoplayer character; this zepetocamera = zepetoplayers instance localplayer zepetocamera camera; // culling mask에 레이어 추가 this zepetocamera cullingmask |= (1 << layermask nametolayer("player")); // culling mask에서 레이어 제거 this zepetocamera cullingmask &= (1 << layermask nametolayer("transparentfx")); this hidecharacterbtn onclick addlistener(() => { this sethiddenlayer(character); }); this showcharacterbtn onclick addlistener(() => { this setplayerlayer(character); }); }); } setplayerlayer(playerobject zepetocharacter) { changelayersrecursively(playerobject transform, "player"); } sethiddenlayer(playerobject zepetocharacter) { changelayersrecursively(playerobject transform, "transparentfx"); } }