Baywatch

Over dit spel...

Baywatch is een spel dat ik samen met één Nederlandse en 3 Zweedse studenten heb gemaakt in Zweden tijdens een gamejam georganiseerd door mijn school.

Tijdens de gamejam had de school ook een Model U.N. lopen. Dat is een soort namaak Verenigde Naties waar leerlingen van over de hele wereld heen komen om aan mee te doen om te leren hoe het in zo'n situatie gaat.

Ons spel valt dus ook onder één van de thema's waar de V.N. zich mee bezig houd: De plasticsoep in de oceaan. Daarnaast hebben we erg de focus gelegd op het nog wel leuk houden van het spel. Mensen iets leren is leuk, maar als het spel dat niet is zullen mensen veel sneller interesse verliezen!

Engine: Unity/C#
Platform: Android/Windows

UnitSelector.cs

using UnityEngine;
using System.Collections.Generic;
using System.Collections;

public class UnitSelector : MonoBehaviour
{
    [SerializeField]
    Color _color;

    bool _isSelecting = false;
    bool _canSwipe = false;
    bool _swipe = false;
    Vector3 _mousePosition1;

    List _selected;

    LineRenderer _lineRenderer;
    TrashHandlerScript _trashHandler;

    void Start( )
    {
        _selected = new List ( );
        _lineRenderer = GetComponent ( );
        _trashHandler = FindObjectOfType ( );
    }

    // Update is called once per frame
    void Update( )
    {
        if (Input.GetMouseButtonDown (0))
        {
            _mousePosition1 = Input.mousePosition;
            if (!_canSwipe) _isSelecting = true;
            else
            {
                _swipe = true;
                _lineRenderer.SetPosition (0, Camera.main.ScreenToWorldPoint (new Vector3 (_mousePosition1.x, _mousePosition1.y, 1)));
            }
        }
        if (Input.GetMouseButtonUp (0))
        {
            if (_isSelecting && !_canSwipe)
            {
                _isSelecting = false;
                if (_selected.Count > 0)
                {
                    _trashHandler.UpdateSelectedUnitList = _selected;//You don't only enable 'CanSwipe' But you also
                    _canSwipe = true;                                //Update the Selected units of TrashHandlerScript.
                }
            }

            else
            {
                Vector3 currMouse = Camera.main.ScreenToWorldPoint (Input.mousePosition);
                currMouse.z = 0;
                Vector3 prevMouse = Camera.main.ScreenToWorldPoint (_mousePosition1);
                prevMouse.z = 0;
                foreach (GameObject obj in _selected)
                {
                    if (obj.GetComponent ( ))
                    {
                        obj.GetComponent ( ).MoveTo ((currMouse - prevMouse).normalized, Vector3.Distance (currMouse, prevMouse));
                        continue;
                    }
                }
                _swipe = false;
                _canSwipe = false;
                _selected = new List ( );

                Vector3 zero = new Vector3 (0, 0, -1);
                _lineRenderer.SetPosition (0, zero);
                _lineRenderer.SetPosition (0, zero);

                foreach (GameObject obj in GameManager.instance.collectors)
                {
                    obj.GetComponentInChildren ( ).color = Color.white;
                }
                _trashHandler.UpdateSelectedUnitList = _selected;
            }
        }

        if (Input.GetMouseButtonDown (1))
        {
            _selected = new List ( );
            foreach (GameObject obj in GameManager.instance.collectors)
            {
                obj.GetComponentInChildren ( ).color = Color.white;
            }
            _swipe = false;
            _canSwipe = false;
        }

        if (_isSelecting)
        {
            _selected = new List ( );
            foreach (GameObject obj in GameManager.instance.collectors)
            {
                if (IsWithinSelectionBounds (obj))
                {
                    _selected.Add (obj);
                    obj.GetComponentInChildren ( ).color = new Color (0, 1, 0);
                }
                else obj.GetComponentInChildren ( ).color = Color.white;
            }
        }

        if (_swipe)
        {
            _lineRenderer.SetPosition (1, Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 1)));
        }
        else
        {
            _lineRenderer.SetPosition (1, Vector3.zero);
        }
    }

    void OnGUI( )
    {
        if (_isSelecting)
        {
            Rect rect = Utils.GetScreenRect (_mousePosition1, Input.mousePosition);
            Utils.DrawScreenRect (rect, _color);
            Utils.DrawScreenRectBorder (rect, 2, new Color (_color.r, _color.g, _color.b));
        }
    }

    public bool IsWithinSelectionBounds( GameObject gameObject )
    {
        if (!_isSelecting) return false;

        Bounds viewportBounds = Utils.GetViewportBounds (_mousePosition1, Input.mousePosition);
        return viewportBounds.Contains (Camera.main.WorldToViewportPoint (gameObject.transform.position));
    }
}

Downloads

Android
Windows