Lekce 10 - Unity (C#) Android: Start, Skóre, PlayerPrefs
V minulé lekci, Unity (C#) Android: Přestavba, nová grafika, vrstvy, jsem se zabýval dalšími resty, konkrétně novými kolizemi a přidáním nové grafiky.
V dnešním dílu uvidíte, jak hráče na začátku zastavit tak, aby vyčkával na váš pokyn k začátku hry. Další a mnohem podstatnější částí je, jak si udělat počítadlo skóre, zobrazit si skóre a dokonce jak si ho na konci hry uložit.
Video
Úprava Player Move Scriptu
Do tohoto skriptu přibylo vyčkání na začátek hry
using UnityEngine; using System.Collections; public class PlayerMoveScript : MonoBehaviour { float flapAmount = 10; public float speed = 150; bool android; bool started = false; // Use this for initialization void Start() { if (Application.platform == RuntimePlatform.Android) android = true; else android = false; } // Update is called once per frame void Update () { if (!started) { if (!android) { if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) { StartGame(); } } else { if (Input.touches.Length > 0) { StartGame(); } } return; } if(Input.GetKeyDown(KeyCode.Escape)) { Application.LoadLevel(0); } Vector3 vel = rigidbody2D.velocity; if (!android) { if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) { vel = Flap(vel); } } else { if (Input.touches.Length > 0) { vel = Flap(vel); } } vel.x = speed * Time.deltaTime; rigidbody2D.velocity = vel; } void StartGame() { started = true; rigidbody2D.gravityScale = 2.5f; Vector3 vel = rigidbody2D.velocity; vel = Flap(vel); rigidbody2D.velocity = vel; } Vector3 Flap(Vector3 v) { v.y = flapAmount; return v; } }
Highscore script
using UnityEngine; using System.Collections; public class HighScoreScript : MonoBehaviour { // Use this for initialization void Start () { int highscore = PlayerPrefs.GetInt("highscore", 0); guiText.text = "Highscore: " + highscore; } }
Scorer script
Skript, který vlastní každý collider, který by měl přidávat skóre
using UnityEngine; using System.Collections; public class ScorerScript : MonoBehaviour { void OnTriggerEnter2D(Collider2D col) { if(col.CompareTag("Player")) { print("Adding score"); ScoreScript.AddScore(); } } }
Score script
Skript, který je přiřazen objektu, který má guiText element, který nám vypisuje aktuální skóre
using UnityEngine; using System.Collections; public class ScoreScript : MonoBehaviour { static int score = 0; static bool changed = false; // Use this for initialization void Start () { score = 0; } // Update is called once per frame void Update () { if(changed) { changed = false; guiText.text = "Score: " + score; } } void OnDestroy() { int highscore = PlayerPrefs.GetInt("highscore", 0); if(score > highscore) PlayerPrefs.SetInt("highscore", score); } public static void AddScore() { score++; changed = true; } }
Jak hra vypadá teď?
Problémy?
Pokud máte nějaké otázky, neváhejte se zeptat v komentářích, nebo mi napsat do zpráv.
V příští lekci, Unity (C#) Android: Oprava sekání, naklánění, se budeme věnovat naklánění hráče při padání a vyřešíme jeho sekavost.