Exemple de Vue Quart
Les contrôles du personnage ZEPETO peuvent être personnalisés pour utiliser le nouveau système d'entrée de Unity au lieu de V-Pad.
Voici des exemples de configuration du contrôle de vue quart.

ÉTAPE 1 : Paramétrage de la vue de la caméra
Réglez la caméra en vue quart (Ceci est un exemple, veuillez modifier le paramètre de la caméra selon votre projet.)
À ce stade, le tag de la caméra doit être réglé sur MainCamara.

ÉTAPE 2 : Paramétrage de l'InputAction
En définissant un nouvel InputAction pour la vue quart, vous pouvez contrôler les mouvements du personnage via l'écran tactile.
Sélectionnez Créer > Actions d'entrée et définissez le nom du fichier comme QuarterViewActions.
- Déplacer
- Type d'action : Passer à travers
- Déclencheur de mouvement
- Type d'action : Bouton

Après avoir créé Hiérarchie > Créer un objet vide, changez le nom du fichier en QuarterViewController.
À partir de l'objet QuarterViewController, sélectionnez Ajouter un composant et ajoutez l'entrée du joueur.

Faites glisser et connectez les actions de QuarterView que vous venez de créer à la liste des actions.
Changez le comportement pour invoquer des événements Unity.

ÉTAPE 3 : Scriptage
Écrivez un script qui calcule la direction du mouvement du personnage à travers l'entrée de l'écran tactile.
Sélectionnez Créer > ZEPETO > TypeScript et renommez-le en Contrôleur de Vue Quart.
Ajoute le script à l'objet QuarterView Controller.
import {ZepetoScriptBehaviour} from 'ZEPETO.Script'
import {PlayerInput,InputAction} from "UnityEngine.InputSystem"
import {CallbackContext} from "UnityEngine.InputSystem.InputAction"
import {CharacterState, ZepetoCharacter, ZepetoPlayers, ZepetoCamera} from 'ZEPETO.Character.Controller'
import {Camera, Quaternion, Time, Vector2, Vector3, WaitForEndOfFrame} from "UnityEngine";
export default class QuarterViewController extends ZepetoScriptBehaviour {
private myCharacter: ZepetoCharacter;
private startPos: Vector2 = Vector2.zero;
private curPos: Vector2 = Vector2.zero;
private playerInput: PlayerInput;
private touchPositionAction : InputAction;
private touchTriggerAction : InputAction;
private isTriggered: boolean = false;
private isTouchDown: boolean = false;
private CanMove() : boolean {
return this.isTouchDown && !this.isTriggered;
}
OnEnable(){
this.playerInput = this.gameObject.GetComponent<PlayerInput>();
}
Start() {
this.touchTriggerAction = this.playerInput.actions.FindAction("MoveTrigger");
this.touchPositionAction = this.playerInput.actions.FindAction("Move");
this.touchTriggerAction.add_started((context)=>{
this.isTriggered = true;
this.isTouchDown = true;
});
this.touchTriggerAction.add_canceled((context)=>{
this.isTriggered = false;
this.isTouchDown = false;
});
this.touchPositionAction.add_performed((context)=>{
if(this.isTouchDown)
{
this.curPos = context.ReadValueAsObject() as Vector2;
if(this.isTriggered) {
this.isTriggered = false;
this.startPos = this.curPos;
}
}
});
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
ZepetoPlayers.instance.LocalPlayer.zepetoCamera.gameObject.SetActive(false);
this.myCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
this.StartCoroutine(this.InputControlLoop());
});
}
private *InputControlLoop(){
while(true)
{
yield new WaitForEndOfFrame();
if (this.myCharacter && this.CanMove()) {
var camRot = Quaternion.Euler(0, Camera.main.transform.rotation.eulerAngles.y, 0);
var moveDir = Vector2.op_Subtraction(this.curPos, this.startPos);
moveDir = Vector2.op_Division(moveDir, 100);
if (moveDir.magnitude > 0) {
if(moveDir.magnitude > 1)
moveDir.Normalize();
var optMoveDir = new Vector3(moveDir.x, 0, moveDir.y);
optMoveDir = Vector3.op_Multiply(optMoveDir, Time.deltaTime * 80 );
this.myCharacter.Move(camRot * optMoveDir);
}
}
}
}
}