Visualizzazione post con etichetta Unity. Mostra tutti i post
Visualizzazione post con etichetta Unity. Mostra tutti i post

venerdì 27 aprile 2018

Daydream Controller in Unity

Un semplice esempio di script da aggiungere al Player per muovere la Camera di Unity con il DayDream Controller





public class move_player : MonoBehaviour {


    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        Quaternion ori;

        ori = GvrController.Orientation;
        if (ori.eulerAngles.z > 20 && ori.eulerAngles.z < 90) {
            Debug.Log ("Roll Left ");
        }

        if (ori.eulerAngles.z > 270 && ori.eulerAngles.z < 340) {
            Debug.Log ("Roll Right");
        }

        if (ori.eulerAngles.x > 20 && ori.eulerAngles.x < 90) {
            Debug.Log ("Drop");
            var rot = transform.rotation;
            rot.z -= Time.deltaTime * 1;
            transform.rotation = rot;
        }

        if (ori.eulerAngles.x > 270 && ori.eulerAngles.x < 340) {
            Debug.Log ("Climb");
            var rot = transform.rotation;
            rot.z += Time.deltaTime * 1;
            transform.rotation = rot;

        }





        Debug.Log ("X : " + ori.eulerAngles.x.ToString("#.0")); //pitch
        Debug.Log ("Y : " + ori.eulerAngles.y.ToString("#.0")); // yaw
        Debug.Log ("Z : " + ori.eulerAngles.z.ToString("#.0")); // roll



        if (GvrController.IsTouching) {
            Vector2 touchPos = GvrController.TouchPos;
            Debug.Log ("Toccato " + touchPos.x.ToString ("#.00"));

            var x = touchPos.x * Time.deltaTime * 5.0f;
            var y = touchPos.y * Time.deltaTime * 5.0f;
            if (touchPos.x < 0.5f)
                x *= -1.0f;
            else
                x *= +1.0f;
            
            if (touchPos.y < 0.5f)
                y *= -1.0f;
            else
                y *= +1.0f;

            transform.Translate (x, y, 0.0f);
        }
        
    }
}

venerdì 30 marzo 2018

Modello digitale del terreno con Google DayDream ed Unity

In questo post il metodo che ho usato per mostrare dati di modelli digitali del terreno con Unity ed il visore DayDream di Google

Il progetto che ho creato e'  di tipo Android. Nel Player Settings del progetto sotto XR Settings deve essere spuntato il supporto alla realta' virtuale e si aggiunge DayDream tra gli SDK. Sempre nel Player Settings si deve impostare in Other Settings un Minimum Level API a livello 24

Sicilia con Etna

Per prima cosa si crea il modello digitale.
L'immagine deve essere a scala di grigi, in cui il livello di grigio indica la quota sul livello del mare (nero equivale a livello piu' basso, spesso il livello del mare, il bianco e' la quota piu' alta)

Si crea un oggetto Terrain da GameObject/3D/Terrain con dimensioni pari a quelle del modello DEM
Si trascina l'immagine negli assets del progetto e si prende il file HeightmapfromTexture. Dalle proprieta' dell'immagine (a destra Advanced si deve spuntare Read/Write and Apply)
L'editor delle versioni moderne di Unity (Unity 3d 2017.2) non permettono di editare direttamente file JavaScript. Si copia quindi lo script in un editor e si aggiungono le seguenti linee (dove si dichiarano le variabili x ed y)

    var mapColors = heightmap.GetPixels();
    var map = new Color[w2 * w2];
    var y = 0.0;
    var x = 0.0;



 si salva il file e lo si trascina negli assets del progetto.

Si selezione negli assets l'immagine DEM importata e si clicca sul menu' in alto Terrain/HeightMapFromTexture

Per settare il livello di amplificazione delle quote si cambia il valore di Terrain Height nell'inspector

Il modello usato e' poco dettagliato 2048x2048 pixels


Una volta importato e settato il modello digitale si deve aggiungere il supporto DayDream a Unity.
Una volta scaricato il package Daydream per Unity e lo aggiunge al progetto con il menu Assets/Import Package/Custom/GoogleVRforUnity.unitypackage.


  • Si aggiunge quindi alla Hierarchy il modulo GvrEditorEmulator
  • Si crea quindi un GameObject (dal menu' in alto), Gameobject/Create Empty e si rinomina come Player
  • Si trascina la camera e si inserisce nell'albero sotto l'oggetto Player
  • Si aggiungono GvrControllerMain e GvrEventSystem
  • Se il progetto include una canvas deve essere aggiunto GvrPointerGraphicsRaycaster da Add Component
  • Si aggiunge GvrPointerPhysicsRaycaster alla Camera da Add component
  • Si aggiunge GvrControllerPointer agganciandolo al Player

mercoledì 9 marzo 2016

Unity con Google Cardboard ed Android


Cardboard SDK for Unity
Dopo aver installato Unity si lancia l'applicazione creando un nuovo progetto.
Si cancella dal progetto la camera di default e si scarica lo Unity Package dell' SDK Cardboard.
Una volta effettuato il download, tenendo aperto Unity, si fa doppio click sullo Unity package e si attiva l'importazione. Si importa tutto tranne il ramo Legacy

A questo punto da Assets/Cardboard/Prefabs si trascina sulla Hierarchy il componente Carboard Main per creare nel progetto la camera stereoscopica per Cardboard



Importare Modelli 3D
Si trascina il modello 3d (in formato 3DS o FBX) dentro la cartella Assets
Si scala il modello
Si crea una nuova cartella Texture dentro Assets e si copiano le texture trascinandole

a questo punto si deve collegare il modello 3d alla texture
si deve modificare lo Shader portandolo da Standard a Legacy Shader/Bumped Diffuse
si aprono due finestre Base e NormalMap. Si devono trascinare le due immagini (Base e' la pelle del modello mentre NormalMap e' la mappa delle normali dei vettori dei modello e di solito si mostra come immagine azzurra o nera)



Un sito da cui scaricare modelli gratuiti e'  http://tf3dm.com/

Joystick XBox 360 USB su Mac e Unity
Un altro problema con cui mi sono dovuto confrontare e' stato quello di interfacciare il Joystick Microsoft XBox 360 USB su Mac con Unity

Per prima cosa si deve installare il driver prelevandolo da questo indirizzo


In seguito si deve aggiungere al progetto XBoxCtrlInput

Interazione utente
Per aggiungere l'interazione utente devono essere definiti gli script collegati con i GameObject. Cio' si fa cliccando un oggetto in Hierarchy e poi andando su Inspector ed Add Component/New Script in C#

per esempio per muovere la camera i pulsanti A,B,X ed Y del mouse si puo' aggiungere questo script

--------------------------------
using UnityEngine;
using XboxCtrlrInput;

using System.Collections;

public class muovi_camera : MonoBehaviour {

    public float speed = 5.0f;


    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        if (XCI.GetButton (XboxButton.B)) {
            transform.Translate(new Vector3(speed * Time.deltaTime,0,0));
        }

        if (XCI.GetButton (XboxButton.X)) {
            transform.Translate(new Vector3(-speed * Time.deltaTime,0,0));
        }

        if (XCI.GetButton (XboxButton.Y)) {
            transform.Translate(new Vector3(0,0,speed * Time.deltaTime));
        }

        if (XCI.GetButton (XboxButton.A)) {
            transform.Translate(new Vector3(0,0,-speed * Time.deltaTime));
        }


    }
}

--------------------------------

per ruotare un oggetto, in questo caso un dinosauro, con il joystick 

--------------------------------
using UnityEngine;
using System.Collections;

public class gira_tiranno : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");
        transform.Rotate(0, h, v);
        Debug.Log (h);
        Debug.Log (v);


    
    }
}
--------------------------------

Unendo il tutto (usando il pulsante Play)



Per finire si deve mandare in esecuzione su Android usando il comando Build&Run.
Per compilare un progetto verso Android e' necessario il solo Android SDK e Unity fa tutto per conto suo.
Su IOS invece Unity crea solo un progetto ma non lo compila, deve essere compilato separatamente all'interno XCode (con la versione attulamente in uso non sono riuscito a compilare su XCode per un errore nelle impostazioni del progetto)


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...