UNITY - FPS Prima Persona con Virtual Joystick

CHOOSE LANGUAGE / SCEGLI LINGUA

Se state sviluppando giochi in Unity per periferiche touch, potreste aver bisogno di utilizzare i Virtual Joystick per comandare il vostro personaggio / oggetti. Ecco come fare.

PRESUPPOSTI

  • State usando il Prefab : RigidBodyFPSController dallo Standard Assets FirstPersonCharacter
  • State configurando un Virtual Joystick come questo reperibile a qui
  • Il vostro scopo è quello di avere un Joystick sul touchscreen ed interagire con quello

VIDEO TUTORIAL UTILI

VIRTUAL JOYSTICK PACK PREFABS

  • Fixed Joystick – Serve come Joystick fisso nella posizione desiderata, utilizzabile solo in quel punto
  • Floating Joystick – Serve come Joystick “invisibile” che compare solo alla pressione
  • Variable Joystick – E’ un Joystick fisso ma che è sensibile ad un area dello schermo

MODIFICHE DA FARE

  • Abilitate un Canvas e settatelo come UI Scale Mode : Scale with screen size
  • Importate nella scena uno dei tre Joystick
  • Impostate il Component Script RigidBodyFirstPersonController
    • MouseLook togliete lo spunta a LockCursor
    • Advanced Settings mettete lo spunta a Air Control
  • Aprite lo script RigidBodyFirstPersonController.cs
    • Create due nuove variabili prima di public Vector3 Velocity
      • [HideInInspector]
        public Vector2 Runaxis; //Serve per il Virtual Joystick
      • [HideInInspector]
        public bool JumpAxis; //serve per il puslante di salto / fire
    • Cambiate le rige in grassetto come indicato (//indica il testo originale)
      • private void Update()
        {
        RotateView();
        //if (CrossPlatformInputManager.GetButtonDown(“Jump”) && !m_Jump)
        if (JumpAxis && !m_Jump)
        {

        m_Jump = true;
        }
        }
      • private Vector2 GetInput()
        {
        Vector2 input = new Vector2
        {
        //x = CrossPlatformInputManager.GetAxis(“Horizontal”),
        x = RunAxis.x,
        //y = CrossPlatformInputManager.GetAxis(“Vertical”)
        y = RunAxis.y

        };
  • Aprite lo script MouseLook.cs
    • Aggiungete la seguente variabile prima di private Quaternion m_CharacterTargetRot;
      • [HideInInspector]
        public Vector2 LookAxis; //serve per la rotazione della visuale
    • Cambiate le rige in grassetto (//indica il testo originale)
      • public void LookRotation(Transform character, Transform camera)
        {
        //float xRot = CrossPlatformInputManager.GetAxis(“Mouse Y”) * YSensitivity;
        //float yRot = CrossPlatformInputManager.GetAxis(“Mouse X”) * XSensitivity;
        float xRot = LookAxis.y * YSensitivity; //X e Y sono invertite perchè la posizione del puntatote è inversa a quella del touch
        float yRot = LookAxis.x * XSensitivity; //X e Y sono invertite perchè la posizione del puntatore è inversa a quella del touch
  • Scaricate e aggiungete al vostro progetto i due script che trovate qui
    • Copiate Handle da Joystick
    • Spostatela a destra per il tasto Jump (o fire)
      • Aggiungete lo script : FixedButton
    • Create un Panel e aggiustate le dimensioni per l’area del Button
      • Aggiungete lo script : FixedTouchField
  • Create un nuovo script in FPSRigidBodyController e incollate quanto segue
    • using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      using UnityStandardAssets.Characters.FirstPerson;public class UpdFixJoypad : MonoBehaviour
      {

      public FixedJoystick MoveJoystick;
      public FixedButton Jumpbtn;
      public FixedTouchField Touchfield;

      // Start is called before the first frame update
      void Start()
      {

      }

      // Update is called once per frame
      void Update()
      {
      var fps = GetComponent<RigidbodyFirstPersonController>();
      fps.RunAxis = MoveJoystick.Direction;
      fps.JumpAxis = Jumpbtn.Pressed;
      fps.mouseLook.LookAxis = Touchfield.TouchDist;
      }
      }

    • Trascinate Joystick, Button e Panel TouchField negli appositi campi e provate il GamePlay

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *