PF2: Kombination af Hololens og Blender

Lavet af Ling Siu Chang og Katja Nanche Aagaard Nordin på 4. semester OPTEK

1. Beskriv ideen med applikationen – ca en halv side

Vores ide var at vi ville lave et spil, hvor vi kunne kombinere hololens og noget fra blender. Vi kom på idéen, at man kunne “knuse” nogle æbler, ved hjælp af to bolde. Boldene skulle fungere som hvis de have tyngdekraft, derfor skulle de falde ned på en plade, og derefter fordele sig naturligt ud over pladen. På pladen er der æbler på linje, som man skal prøve og ramme. Vores spil spilles på en Hololens, og bliver derved spillet ved hjælp af ens hænder og hvor man kigger hen. Dette sker ved at man tager sin hånd hen på en af boldene som bevæger sig fra side til side, og trykker på dem ved hjælp af sin tommelfinger og pegefinger. Hvorefter falder bolden ned på pladen og hvis man er heldig og har sigtet rigtig rammer de æblerne. Boldene kan rulle ned af pladen, hvor de rammer en plane og bliver respawned til deres starts position. For at gøre spillet lidt svære, har vi sat boldene til at køre frem og tilbage. Dette gøre at spilleren først skal “lære” at fokusere på bolden med Hololensen. Vi har lavet æblet-elementet i Blender, og det har vi taget og duplikeret flere gange og sat dem rundt på pladen.

2. Screendump fra den kørende applikation

3. Kort video af den kørende applikation ca. 30-60 sekunder.

Link til video af den kørende applikation: PF2

4. Udvalgte og forklarede kode-highlights af særlige højdepunkter

Denne kode er taget fra Destroy-script:

// Update is called once per frame
    void OnCollisionEnter(Collision collision) {
        if (collision.gameObject.CompareTag("Apple")) { //hvis gameobject collider med "Apple"
            Destroy(collision.gameObject); //bliver "Apple" destroyed
        }
    }

Dette er et script som boldene har, som gør at æblerne kan ødelægges. Når bolden kommer i collision med et gameobject, med tagget “Apple”, så bliver æblet ødelagt. Alle æblerne har tagget “Apple”, så det er dem alle som kan blive ødelagt, hvis de collider med et gameobject.

 

public class Rotate : MonoBehaviour {
 
private bool dirRight = true; //definere en private bool til true
 
void Update() {
    //rotation af bolde    
    if (dirRight)
        transform.Translate(Vector2.right * 0.2f * Time.deltaTime); //rotere til højere
    else
        transform.Translate(-Vector2.right * 0.2f * Time.deltaTime); //rotere til venstre
 
    if (transform.position.x >= 0.3f) //hvis x >= 0.3f så {
        dirRight = false;
    }
 
    if (transform.position.x <= -0.3) //hvis x >= -0.3f så {
        dirRight = true;
    }
  }
}

Denne koden er benyttet til at bevæge boldene frem og tilbage på x-aksen. Koden er sat på boldene og viser at boldene bevæger sig med hastigheden 0.2f fra side til side. Og hvis x position er større end 0.3f så bliver dirRight sat til false og hvis den er mindre eller lig med -0.3f så bliver dirRight sat til true. Dette gøres for at tjekket hvornår den skal bevæge sig i modsatte retning, når den når til x position 0.3 eller -0.3.

 

Denne kode er taget fra Ground-script:

void OnCollisionEnter(Collision collision) {
if (collision.gameObject.CompareTag("Plane")) { //gameobject collider med "Plane”:
            //gameobject bliver respawned
            Rigid.isKinematic = true;
            Rigid.detectCollisions = false;
            var kugle = Instantiate(Prefab, startPosition.position, Quaternion.identity);
            kugle.transform.parent = Parent;
            Destroy(this.gameObject); //gameobject bliver destroyed
        }
}

Denne kode er benyttet til at respawne boldene når de collider med plane, altså når de falder ned fra pladen. Vi definerer hvad gameobject skal gøre når det collider med plane. Rigid.isKinematic sættes til true, fordi så bliver den ikke påvirket af physics. Da vi har sat kinematic til true så er Rigid.detectCollisions sat til false, fordi man vil undgå tunge kollisionsdetektion. Derefter sætter vi en start position på kuglen, som er der den skal respawne. Kuglen bliver transformeret til parent, for at den kan respawne i repawn pointet. Derefter bliver gameobject ødelagt.

Link til PF2

Leave a Reply