unity3d

Unity 3D – PickUp – Collecting

Unity 3D – PickUp – Collecting

Player Object

1. Create a Ball (Player) with:
– Sphere Collider -> uncheck ‘Is Trigger’ -> se fosse solo un trigger non colliderebbe più col piano e finirebbe per cadere
– Rigid Body -> check ‘Use Gravity’ -> altrimenti non riusciremo a limitarlo all’interno di una arena
– PlayerController.JS:

#pragma strict
 
function Start () {
count = 0;
SetCountText();   // Setup iniziale GUIText, vedi funzione a fine pagina
winText.text =""; // Testo 'Hai Vinto!' all'inizio è vuoto 
}

// Destroy object with tag = PickUp that enters the trigger START            
    function OnTriggerEnter (other : Collider) {
        if (other.gameObject.tag == "PickUp")
        {             
            other.gameObject.SetActive(false); // Disattivo così non viene contato una seconda volta
            count = count + 1; // incremento il valore di 1 ogni volta che raccolgo un oggetto
            SetCountText(); // aggiorno GUIText
            Destroy(other.gameObject);         // Distruggo per liberare delle risorse di sistema
        }
        }
// Destroy object with tag = PickUp that enters the trigge END

// Theese variables are public to make the code easy-reusable
// You can setup theese variables from Inspector
var speed : float;

private var count : int;
var countText : GUIText; // Setup inside Inspector
var winText : GUIText; // Setup inside Inspector

function FixedUpdate () {
     // Get User Input START
     var moveHorizontal : float= Input.GetAxis ("Horizontal");
     var moveVertical : float= Input.GetAxis ("Vertical");
     // Get User Input END

     var movement : Vector3= new Vector3 (moveHorizontal, 0.0f, moveVertical);
     rigidbody.AddForce (movement * speed * Time.deltaTime); // Time.deltaTime Use this function to make your game frame rate independent
}

// setup del contenuto del GUIText
function SetCountText()
{
    countText.text = "Count: " + count.ToString();
    // Se ho catturato un numero sufficiente di oggetti vinco
    if(count >= 3)
    {
    winText.text = "Hai Vinto!";
    }
}


PlayerController.js> Inspector> change ‘speed’ to 500

PlayerController.js> Inspector> DRAG AND DROP CountText (GUI TEXT) over ‘Count Text’ variable slot

PlayerController.js> Inspector> DRAG AND DROP WinText (GUI TEXT) over ‘Win Text’ variable slot

PickUp Object

2. Create a Cube (PickUp) as ‘Prefab’ to easy duplicate it, with:

SOLUZIONE 1: senza ‘Rigid Body’, lo considera un ‘Collider Statico’, come un muro, e quindi calcola e salva in cache la posizione una volta per tutte, questo ha senso per risparmiare calcoli in caso di un oggetto che non si muove. Se il nostro cubo ruota Unity salva in cache ogni volta la nuova posizione per ogni frame occupando risorse di sistema.
– Box Collider -> check ‘Is Trigger’ -> così non si effettuano calcoli fisici perchè il ‘Trigger’ rileva solo le collisioni senza causare reazioni fisiche

OPPURE

SOLUZIONE 2: applicando un ‘Rigid Body’, lo considera un Collider dinamico, e non salverà dati in cache, occupando meno risorse.
a. Rigid Body> Disabilitare ‘Use Gravity’ per non far cadere l’oggetto. L’oggetto risponde ancora alle sollecitazioni provenienti da altri Collider.
b. Rigid Body> Abilitare ‘Is Kinematic’ per non far calcolare a Unity le reazioni alle sollecitazioni provenienti da altri Collider e ottimizzare il consumo di CPU. Un oggetto ‘Is Kinematic’ può essere spostao utilizzando la funzione ‘Transform’. Questo setup è tipico delle piattaforme mobili di un videogioco ‘platform’.

INOLTRE DEVE AVERE

– Tag ‘PickUp’ -> per distinguere questo tipo di oggetto da tutti gli altri
– Rotator.JS -> per ruotare il cubo

#pragma strict

function Start () {

}

function Update () {
// Time.deltatime, use this function to make your game frame rate independent
transform.Rotate(new Vector3(15,30,45) * Time.deltaTime);
}

Display Text, Win Text

1. Create:

(parent)>DisplayText (EmptyObject)> Transform> Reset

– (child)> CountText (GUI TEXT)> | Transform X=0 Y=1 is Top Left of the Game Viewport
| GUI Text> Pixel Offset X=10 Y=-10

– (child)> WinText (GUI TEXT)> | Transform X=0.5 Y=0.75 is Top Left of the Game Viewport
| GUI Text> Pixel Offset: X=10 Y=-10, Anchor: middle center Alignement: center

Analisi finale

Gli oggetti taggati ‘PickUp’ sono bonus da raccogliere hanno:

– Collider, selezionare ‘Is Trigger’ per non rispondere alle collisioni fisiche

– Rigid Body
a. perchè sono oggetti in movimento e devono essere classificati da Unity come ‘Dynamic Colliders’ per evitare di registrare dati inutili in Cache
b. deselezionare ‘Use Gravity’ perchè non vogliamo che cadano
c. selezionare ‘Is Kinematic’ perchè non devono rispondere all’effetto di forze esterne, per muoverlo NON UTILIZZARE UNA FORZA, ma usare la funzione transform().

– uno script con funzione transform() per ruotare su se stessi all’infinito

L’oggetto ‘Player’, il giocatore controllato dall’utente ha:

– Collider, deselezionare ‘Is Trigger’ perchè deve rispondere a tutte le sollecitazioni fisiche, prima delle quali restare su piano dove si muove

– Rigid Bodi
a. è un ‘Dynamic Colliders’ perchè si muove
b. selezionare ‘Use Gravity’ perchè deve rotolare, cadere etc…
c. deselezionare ‘Is Kinematic’ perchè deve rispondere alle forze esterne, per muoverlo devo applicare una forza NON UTILIZZARE LA FUNZIONE transform().

– uno script ‘PlayerController’ che:
a. usando GetAxis() rileva l’input dell’utente e applica una forza rigidbody.AddForce() al player
b. rileva lo scontro tra player e tutti gli oggetti taggati ‘PickUp’
c. cancella gli oggetti, conta le collisioni, se il numero è sufficiente renderizza la scritta ‘Hai Vinto!’

By |Unity3D, Video Games Development|Commenti disabilitati su Unity 3D – PickUp – Collecting

Unity 3D – PickUp – Rotator

Unity 3D – PickUp – Rotator

1. Create a Cube with Rotator.js

#pragma strict

function Start () {

}

function Update () {
// Time.deltatime, use this function to make your game frame rate independent
transform.Rotate(new Vector3(15,30,45) * Time.deltaTime);
}
By |Unity3D, Video Games Development|Commenti disabilitati su Unity 3D – PickUp – Rotator

Unity 3D – Camera Controller

Unity 3D – Camera Controller

1. Create a ball that rolls over a plane

2. Creare a Camera with:
– CameraController.js

#pragma strict

public var player : GameObject;
private var offset :  Vector3;

function Start () {
offset = transform.position;
}

function LateUpdate () {
//LateUpdate is called after all Update functions have been called. 
// This is useful to order script execution. For example a follow camera should always be implemented in LateUpdate because it tracks objects that might have moved inside Update.
transform.position = player.transform.position + offset;
}

2. Hierarchy DRAG AND DROP ‘ball’ GameObject over Inspector> CameraController.js ‘player’ variable slot.

By |Unity3D, Video Games Development|Commenti disabilitati su Unity 3D – Camera Controller

Unity 3D – Get Axis – rigidbody.AddForce

Unity 3D – Get Axis – rigidbody.AddForce

1. Create a Plane (Ground) with:
– Mesh Collider

2. Create over the plane a Sphere with:
– Mesh Collider
– Rigid Body
– PlayerController.JS:

#pragma strict
 
function Start () {
 
}
// Theese variables are public to make the code easy-reusable
// You can setup theese variables from Inspector
var speed : float;

function FixedUpdate () {
     // Get User Input START
     var moveHorizontal : float= Input.GetAxis ("Horizontal");
     var moveVertical : float= Input.GetAxis ("Vertical");
     // Get User Input END

     var movement : Vector3= new Vector3 (moveHorizontal, 0.0f, moveVertical);
     rigidbody.AddForce (movement * speed * Time.deltaTime); // Time.deltaTime Use this function to make your game frame rate independent
}

Inspector> change ‘speed’ to 500 and Play

By |Unity3D, Video Games Development|Commenti disabilitati su Unity 3D – Get Axis – rigidbody.AddForce

Unity – JS – Strings Operations

Unity – JS – Strings Operations
Unity uses the .Net System.String class for strings. See the Microsoft MSDN documentation for Strings for more details.

#pragma strict
function Start () {
    var s : String = "hello";
    Debug.Log(s);                    // prints hello
    s = String.Format("{0} {1}", s, "world");
    Debug.Log(s);                    // prints hello world
    s = String.Concat("hello","world");
    Debug.Log(s);                    // prints helloworld
    s = s.ToUpper(); 
    Debug.Log(s);                    // prints HELLOWORLD
    s = s.ToLower();
    Debug.Log(s);                    // prints helloworld
    //Debug.Log(s.CharAt(1));        // CharAt not supported, produces compiler error
                                     // instead use array syntax below
    Debug.Log(s[1]);                 // prints e
    
    var c : char = 'x'[0];           // slight odd JS way of specifying a char
                                     // 'x' is a string and [0] means first character
                                     
    Debug.Log(s.IndexOf(c));         // prints -1 (s does not contain an x)
    
    var i : int = 42;
    s = i.ToString();
    Debug.Log(s);                    // prints 42
    s = "-43";
    i = int.Parse(s);
    Debug.Log(i);                    // prints -43
    
    var f : float = 3.14159265358979f;
    s = f.ToString();
    Debug.Log(s);                    // prints 3.141593 (which is an approximation)
    
    s = "-7.14159265358979";
    f = float.Parse(s);
    Debug.Log(f);                    // prints -7.141593 (which is an approximation)
}
By |Unity3D, Video Games Development|Commenti disabilitati su Unity – JS – Strings Operations