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);
}
}
}
Visualizzazione post con etichetta Unity. Mostra tutti i post
Visualizzazione post con etichetta Unity. Mostra tutti i post
venerdì 27 aprile 2018
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
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
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.
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));
}
}
}
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);
}
}
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)
Iscriviti a:
Post (Atom)
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...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...