2. Leap Motion - softvér na vývoj

2.2. Bowling

Vyhľadáme service desktop (slúži na prepojenie Leap Motion a Unity assets) v All (kvôli prehľadnosti súborov si môžeme cez pravý dolný scrollbar zmeniť veľkosť zobrazenia) a presunieme ho do Hierarchy.




Taktiež pridáme CapsuleHands (samotné ruky, ktoré budeme môcť ovládať) a Interaction Manager (slúži na interakciu objektov – možnosť s nimi pohybovať)



Skontrolujeme u Service Provider, CapsuleHands, Interaction Manager či majú default nastavené hodnoty pre Position, RotationScale.



Main Camera nastavíme Transform hodnoty podľa obrázku nižšie


Keď si v hornej časti prepneme Game a nastavíme scale na 1x, mali by sme vidieť ruky.



Pridanie platformy – v Hierarchy cez pravé tlačidlo pridáme 3D Object -> Plane



Pridanie objektu – v súboroch vyhľadáme objekt InteractionSphere, ktorý následne presunieme priamo do scény tak, aby bol v malej vzdialenosti od rúk.



Pridanie kužeľov – v Hierarchy vytvoríme empty objekt (Create Empty), ktorý pomenujeme napríklad Cones



Následne si vyhľadáme objekt InteractionCapsule a postupne budeme pridávať tento objekt priamo do scény (tak ako vidieť na obrázku).



Hierarchy presunieme všetky vytvorené InteractionCapsule do Cones


Assets vytvoríme C# Script, pomenujeme ho Bowling a otvoríme.


Na začiatku si pridáme knižnicu TMPro

using TMPro;

Do class Bowling pridáme:

private int score = 0;
private int counter = 0;
public TMP_Text ScoreText;

// List, do ktoreho sa bude vkladat position kuzelov
private List<Vector3> objects = new List<Vector3>();

// Premenna, do ktorej bude position bowlingovej gule
private Vector3 ballVector = new Vector3();

Do funkcie Start vložíme:

// zapise position bowlingovej gule
ballVector = GameObject.Find("InteractionSphere").transform.position;

// vyhlada vsetky kuzele a ulozi do Listu ich position
for(int i = 0; i < gameObject.transform.childCount; i++) {
    objects.Add(gameObject.transform.GetChild(i).position);
}

ScoreText.text = "Skóre: 0\nPokusov: 0";
score = 0;

Do funkcie Update vložíme:

// stlacenie medzernika
if (Input.GetKeyDown("space"))
{
    counter++;

    for(int i = 0; i < gameObject.transform.childCount; i++)
    {   
        // kontrola rotacie kuzelov (ci spadli alebo nie) 
        if (gameObject.transform.GetChild(i).rotation.x > 0.40 ||
            gameObject.transform.GetChild(i).rotation.x < -0.40 ||
            gameObject.transform.GetChild(i).rotation.z > 0.40 ||
            gameObject.transform.GetChild(i).rotation.z < -0.40
        ) {
            score++;
        }

        // vylistuje vsetky kuzele a nastaví im prvotnú position
        // nastavi aj default velocity a rotation
        gameObject.transform.GetChild(i).position = objects[i];
        gameObject.transform.GetChild(i).GetComponent<Rigidbody>().velocity = Vector3.zero;
        gameObject.transform.GetChild(i).GetComponent<Rigidbody>().angularVelocity  = Vector3.zero;
        gameObject.transform.GetChild(i).rotation = Quaternion.Euler(0, 0, 0);
    }

    // nastavi text na obrazovke
    ScoreText.text = "Skóre: " + score + "\nPokusov: " + counter;

    // vyhlada bowlingovu gulu nastaví jej prvotnú position
    // nastavi aj default velocity a rotation
    GameObject.Find("InteractionSphere").transform.position = ballVector;
    GameObject.Find("InteractionSphere").transform.GetComponent<Rigidbody>().velocity = Vector3.zero;
    GameObject.Find("InteractionSphere").transform.GetComponent<Rigidbody>().angularVelocity  = Vector3.zero;
    GameObject.Find("InteractionSphere").transform.rotation = Quaternion.Euler(0, 0, 0);
}

Celý kód:



Script uložíme a presunieme do ConesHierarchy



Pridanie textu – v Hierarchy vytvoríme Text cez UI -> Text - TextMeshPro



Hierarchy klikneme na Text (TMP) a nastavíme:

  • Súradnice X, Z: 0
  • Y: 70
  • Width: 300
  • Text Input: Skóre: 0\nPokusov: 0
  • Vertex Color napríklad: 2BC13B (hexadecimal)
  • Alignment: Flush



Hierarchy klikneme na Cones a do Score Text (pod scriptom) vložíme z Hierarchy Text (TMP).



Typy:

  • Reštart sa vyvolá medzerníkom
  • Najlepšie je „bowlingovú“ guľu odrážať päsťou

 

Hru už len otestujeme