# data[].attributes.body
Ik moest een idee bedenken dus ik had bedacht om een game te maken met zombies waar je op moet schieten. Ik heb trouwens hulp gekregen van Eise en Steven, omdat zij er wel wat van snappen. De zombies komen dan naar je toe en voordat ze je opeten moet je ze dan doodschieten. dan gaan de zombies steeds sneller en dan moet je zo lang mogelijk overleven.

# data[].attributes.body
Na ik een game heb bedacht moet ik een programma vinden om de game in te maken. Ik heb gekozen voor unity omdat daar online veel over te vinden is.

# data[].attributes.body
Na wat tutorials online en wat hulp heb ik een grond gemaakt en daar heb ik een speler op gezet zodat die kan schieten op de zombies.
ik had ook deze tutorial gevonden die handig is https://learn.unity.com/tutorial/camera-and-play-area?uv=2019.3&projectId=5c51479fedbc2a001fd5bb9f

# data[].attributes.body
Nu dat ik een speler had gemaakt moest ik een zombie maken om op te schieten. De zombie ziet er nog hetzelfde uit als de speler zelf.

# data[].attributes.body
De zombie moet naar de speler toe, dus had ik de zombie naar een plek laten lopen, alleen werkte dat niet. Toen had ik dit script gevonden op het internet.
https://stackoverflow.com/questions/21415971/how-to-apply-force-to-an-object-in-a-particular-direction-in-unity
Met dit kon ik de zombie naar de speler laten lopen met een bepaalde snelheid.

# data[].attributes.body
Ik had bedacht dat de zombie naar de persoon toe moest gaan met een steeds sneller opbouwend tempo, wat je kan doen met de drag. Wanneer het drag getal omlaag gaat, gaat de zombie sneller. Ik wil deze aan de score verbinden, alleen weet ik nog niet hoe dat moet.

# data[].attributes.body
als er meer score is moeten de zombies sneller gaan. Je doet dan de snelheid = 5 * playerController.score / 500 + 2. Eise en Steven hebben mij hierover wat uitgelegd zodat ik het snapte.

# data[].attributes.body
Het kogelschieten werkt goed zoals je ziet.

# data[].attributes.body
Het bleek uiteindelijk met de tiling te maken hebben.

# data[].attributes.headline
Hier was ik proberen zombies te laten inspawnen, alleen ging het niet goed. Ze konden niet lopen en het ging te snel.

# data[].attributes.subject
Hier was ik proberen zombies te laten inspawnen, alleen ging het niet goed. Ze konden niet lopen en het ging te snel.

# data[].attributes.body
Ik heb deze video’s gevolgd, zodat ik een beginscherm kon maken, omdat ik het er heel vet uit vond zien.
https://www.youtube.com/watch?v=zc8ac_qUXQY
https://assetstore.unity.com/packages/tools/gui/easy-main-menu-free-106495
Helaas crashte het wanneer ik iets probeerde te veranderen, dus had ik deze maar gebruikt.

# data[].attributes.attachment_link.readable_text
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class BulletScript : MonoBehaviour
{
  private float timeRemaining = 2;
  private PlayerController playerController;
  private Text scoreUI;

  void Start()
  {
    playerController = GameObject.Find("Player").GetComponent<PlayerController>();
    scoreUI = GameObject.Find("Score").GetComponent<Text>();
  }

  // Update is called once per frame
  void FixedUpdate()
  {
    if (timeRemaining > 0)
    {
      timeRemaining -= Time.deltaTime;
    }
    else
    {
      Destroy(gameObject);
    }
  }

  private void OnCollisionEnter(Collision col)
  {
    Destroy(gameObject);
    if (col.gameObject.name.Contains("Zombie"))
    {
      Destroy(col.gameObject);
      playerController.score += 100;
      Debug.Log(playerController.score);
      scoreUI.text = playerController.score.ToString();
    }
  }
}

# data[].attributes.attachment_link.readable_text
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class CameraController : MonoBehaviour
{
    Vector3 Angles;
    public float sensitivityX;
    public float sensitivityY;

    public Transform player;
    void Update()
    {
        float rotationY = Input.GetAxis("Mouse Y") * sensitivityX;
        float rotationX = Input.GetAxis("Mouse X") * sensitivityY;
        if (rotationY > 0)
            Angles = new Vector3(Mathf.MoveTowards(Angles.x, -80, rotationY), Angles.y + rotationX, 0);
        else
            Angles = new Vector3(Mathf.MoveTowards(Angles.x, 80, -rotationY), Angles.y + rotationX, 0);
        player.localEulerAngles = Angles;
    }
}

# data[].attributes.attachment_link.readable_text
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class PlayerController : MonoBehaviour
{
  public float score = 0;

  public float speed;

  private Rigidbody rb;

  public Transform bullet;
  public Transform gun;

  void Start()
  {
    Cursor.visible = false;
    rb = GetComponent<Rigidbody>();
  }

  void FixedUpdate()
  {
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");

    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

    rb.AddForce(movement * speed);
  }

  void Update()
  {
    if (Input.GetButtonDown("Fire1"))
    {
      Transform bulletInstance;
      bulletInstance = Instantiate(bullet, gun.position, gun.rotation);
      Rigidbody bulletRb = bulletInstance.GetComponent<Rigidbody>();
      bulletRb.AddForce(gun.forward * 1000f);
    }
  }

  private void OnCollisionEnter(Collision col)
  {
    if (col.transform.name.Contains("Zombie"))
    {
      SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
    }
  }
}

# data[].attributes.attachment_link.readable_text
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnController : MonoBehaviour
{
  private float spawnTime;
  public Transform zombie;

  void FixedUpdate()
  {
    if (spawnTime > 0)
    {
      spawnTime -= Time.deltaTime;
    }
    else
    {
      spawnTime = 3;
      int loc = Random.Range(1, transform.childCount);
      Instantiate(zombie, this.gameObject.transform.GetChild(loc).transform.position, new Quaternion(0, 0, 0, 0));
    }
  }
}

# data[].attributes.attachment_link.readable_text
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ZombieController : MonoBehaviour
{
  public Transform target;

  private PlayerController playerController;

  // Start is called before the first frame update
  void Start()
  {
    playerController = GameObject.Find("Player").GetComponent<PlayerController>();
    target = GameObject.Find("Player").transform;
  }

  // Update is called once per frame
  void Update()
  {
    float speed = 5 * playerController.score / 500 + 2;
    Debug.Log(speed);
    transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
  }
}

# data[].attributes.headline
Het eindresultaat. In het echt heeft het betere fps.

# data[].attributes.subject
Het eindresultaat. In het echt heeft het betere fps.

# data[].attributes.body
Ik denk dat ik er uiteindelijk veel van heb geleerd. Ik wist eerst niet veel programmeren, alleen Steven en Eise hielpen me er doorheen. Ook viel er veel meer op te zoeken op internet over het dingen moesten dan ik had gedacht. Ik vond het coderen zelf best moeilijk dus, spreekt voor zich, heb ze mij daarmee goed geholpen.

# data[].attributes.body
Ik hoop dat het een 6,6 waard is, omdat dit misschien de doorslag gaat geven en dat nodig heb zodat de mensen die gaan over het over laten gaan van mij.