25. diel - Unity (C #) Android: Vylepšenia pľuvanie ohňa
V predchádzajúcej lekcii, Unity (C #) Android - Publikovanie na Google Play , sme nahrali hru na Google Play store.
V minulej lekcii, Unity (C #) Android - Publikovanie na Google Play , som sa zaoberal štruktúrou pľuvanie ohňa a ako ho vlastne celý dať do kopy.
Dnešná tutoriál sa bude točiť opäť okolo pľuvanie ohňa a to najmä preto, že v komentároch na YouTube pristál nápad, ako aktivovať pľuvanie ohňa.
Video
Nový PlayerMoveScript
Upravený PlayerMoveScript prináša ovládanie a aktiváciu ohňa:
using UnityEngine.UI; using UnityEngine; using System.Collections; public class PlayerMoveScript : MonoBehaviour { public LayerMask touchControlLayerMask; public Text countOfFireText; float flapAmount = 10; public float speed = 150; bool android; bool started = false; private bool paused = false; private Quaternion pausedRotation; public GameObject pauseIndicator; Animator anim; private bool didFlap = false; private GameObject flame; private float fireLength = 2; private float currentFlameTime = 0; private bool currentlyFlaming = false; private int countOfFires = 5; // Use this for initialization void Start() { anim = GetComponent<Animator>(); flame = transform.GetChild(0).gameObject; if (Application.platform == RuntimePlatform.Android) android = true; else android = false; } // Update is called once per frame void Update () { if (currentlyFlaming) { if (currentFlameTime <= 0) { currentFlameTime = 0; DeactivateFire(); } else { currentFlameTime -= Time.deltaTime; } } if (Input.GetKeyDown(KeyCode.Escape)) { paused = !paused; if (paused) { Time.timeScale = 0; //pauseIndicator.enabled = true; pauseIndicator.SetActive(true); pausedRotation = transform.rotation; } else { Time.timeScale = 1; //pauseIndicator.enabled = false; pauseIndicator.SetActive(false); } } if (paused) { if (!android) { if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) { didFlap = true; } } else { if (Input.touches.Length > 0) { didFlap = true; } } transform.rotation = pausedRotation; return; } if (!started) { if (!android) { if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) { StartGame(); } } else { if (Input.touches.Length > 0) { StartGame(); } } return; } Vector3 vel = rigidbody2D.velocity; if (didFlap) { didFlap = false; vel = Flap(vel); } if (!android) { if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) { if(RaycastingDragon(Input.mousePosition)) ActivateFire(); vel = Flap(vel); } } else { if (Input.touches.Length > 0) { vel = Flap(vel); } } vel.x = speed * Time.deltaTime; rigidbody2D.velocity = vel; RotateMe(vel.y); } private bool RaycastingDragon(Vector3 mousePos) { Ray r = Camera.main.ScreenPointToRay(mousePos); RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction, Mathf.Infinity, touchControlLayerMask); if (hit.collider == null) { return false; } return true; } void StartGame() { started = true; rigidbody2D.gravityScale = 2.5f; Vector3 vel = rigidbody2D.velocity; vel = Flap(vel); rigidbody2D.velocity = vel; } void RotateMe(float y) { // -20, 10 // -70, 0 // 0 -70 if(y >= 0) { transform.rotation = Quaternion.Euler(0, 0, 0); } else { float angle = Mathf.Lerp(0, -70, -y); transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(0, 0, angle), 0.05f); } } Vector3 Flap(Vector3 v) { anim.SetTrigger("DoFlap"); v.y = flapAmount; return v; } void ActivateFire() { if (countOfFires <= 0) return; countOfFires--; countOfFireText.text = "Fire count avalible: " + countOfFires; currentlyFlaming = true; flame.SetActive(true); currentFlameTime = fireLength; } void DeactivateFire() { currentlyFlaming = false; flame.SetActive(false); } }
Ako hra vyzerá teraz?
Problémy?
Ak máte nejaké otázky, neváhajte sa opýtať v komentároch alebo mi napísať do správ.
V budúcej lekcii, Unity (C #) Android: Návrat do menu , pridáme ukončenie hry.