あなたの世界を作りなさい
プレイヤーとキャラクター: ヒント

ZEPETOキャラクターの外見を隠すと表示する

3
レンダラーメソッドの使用 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\) canvas > buttonを使用して、各ボタンを画面に追加し、スクリプトインスペクタに割り当てます。 6\) \[▶︎(再生)] ボタンを押して実行します。 キャラクターのレイヤーを変更して隠す処理を行う キャラクターのレンダラーを無効にすることに加えて、キャラクターの外見を隠したり表示したりすることもできます。 これはzepetoカメラのカリングマスクを利用して行われます。 カリングマスクを使用すると、特定のレイヤーを不可視として扱うことができます。 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; // カリングマスクにレイヤーを追加 this zepetocamera cullingmask |= (1 << layermask nametolayer("player")); // カリングマスクからレイヤーを削除 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"); } }