-
ZeroRed97.
User deleted
10)Realizziamo il sistema
In questa parte trattiamo il sistema vero e proprio ovvero quegli script che andranno a regolare ad esempio l'inizio o la fine del gioco,lo script che ci permetterà di scegliere quale uccello usare .
Iniziamo creando due gameobject vuoto e chiamiamoli Gamecontroller e Menu Controller:
Creiamo due script omonimi e trasciniamoli rispettivamente ai due oggetti:
Compiliamo così Gamecontroller ,per facilitare la parte e evitare errori pesanti questi script ve li scrivo io vi invito comunque a leggere le note e capire cosa fanno effettivamenteCODICEusing UnityEngine;
using System.Collections;
public class GameController : MonoBehaviour {
public static GameController Riferimento;//C stiamo riferendo a questo script
private const string Uccello_Scelto="UccelloScelto";//Riferimento ad una costante .Aggiungeremo altri uccelli alla scena
private const string Uccello_Punk="UccelloPunk";
private const string Uccello_Giallo="UccelloGiallo";
// Use this for initialization
void Awake () {
Esistenza ();
Inizio ();
}
// Update is called once per frame
void Esistenza () {//questa funzione ci permette di portare in ogni scena del nostro gioco il gameobject gamecontroller
if(Riferimento!=null)//Se non esiste
{
Destroy(gameObject);
}else{
Riferimento = this;//è questo
DontDestroyOnLoad(gameObject);//L'oggetto non si distrugge
}
}
void Inizio () {
if (!PlayerPrefs.HasKey ("Inizio"))//Con has key recuperiamo se esiste un chive di letra diciamo così che si chiama inizio
{ //Salviamo il valore del nostro punteggio migliore oviamente all'inizio sarà zero
PlayerPrefs.SetInt (Uccello_Scelto, 0);//Usiamo la logica delle variabile bool sintetizzando diciamo che 0 e 1 sono i valori .
PlayerPrefs.SetInt (Uccello_Punk, 1);//Lo 0 vuol dire falso mentre 1 vuol dire vero
PlayerPrefs.SetInt (Uccello_Giallo, 1);
PlayerPrefs.SetInt ("Inizio",0);//Salviamo lo stato in modo da poterlo poi recuperare
}
}
public void ImpostaUccelloScelto (int uccello_Scelto) {//Scegliamo l'uccello
PlayerPrefs.SetInt (Uccello_Scelto,uccello_Scelto);
}
public int ScegliUccelloScelto () {
return PlayerPrefs.GetInt (Uccello_Scelto);
}
public void SbloccaUccelloPunk () {//Se non è sbloccato sblocchiamolo
PlayerPrefs.SetInt (Uccello_Punk,1);
}
public int èsbloccatoUccelloPunk () {//Non succede quasi nulla
return PlayerPrefs.GetInt (Uccello_Punk);
}
public void SbloccaUccelloGiallo () {//Se non è sbloccato sblocchiamolo
PlayerPrefs.SetInt (Uccello_Giallo,1);
}
public int èsbloccatoUccelloGiallo () {//Non succede quasi nulla
return PlayerPrefs.GetInt (Uccello_Giallo);
}
}CODICEusing UnityEngine;
using System.Collections;
public class MenuController : MonoBehaviour {
public static MenuController Riferimento;//C stiamo riferendo a questo script
[SerializeField]
private GameObject[] Uccelli;
private bool èsbloccatoUccelloPunk, èsbloccatoUccelloGiallo;
// Use this for initialization
void Awake () {
Esistenza ();
}
void Start () {
Uccelli [GameController.Riferimento.ScegliUccelloScelto ()].SetActive (true);
ControlloUccelli ();
}
// Update is called once per frame
void Update () {
}
void Esistenza () {//questa funzione ci permette di portare in ogni scena del nostro gioco il gameobject gamecontroller
if(Riferimento!=null)//Se non esiste
{
Riferimento = this;//è questo
}
}
public void InizioGioco()
{
Application.LoadLevel ("Scena1");
}
void ControlloUccelli () {
if(GameController.Riferimento.èsbloccatoUccelloPunk () == 1)
{
èsbloccatoUccelloPunk = true;
}
if(GameController.Riferimento.èsbloccatoUccelloGiallo () == 1)
{
èsbloccatoUccelloGiallo = true;
}
}
public void CambiaUccello () {
if (GameController.Riferimento.ScegliUccelloScelto () == 0)
{
if(èsbloccatoUccelloPunk){//Se abbiamo sbloccato il punk
Uccelli [0].SetActive (false);//Rosa non si deve attivare per questo 0 corrisponde al primo oggetto dell'indice
GameController.Riferimento.ImpostaUccelloScelto(1);//Si attiva punk
Uccelli [GameController.Riferimento.ScegliUccelloScelto ()].SetActive (true);
}
}else {
if(GameController.Riferimento.ScegliUccelloScelto () == 1)//Se siamo punk
{
if(èsbloccatoUccelloGiallo){
Uccelli [1].SetActive (false);//Rosa non si deve attivare per questo 0 corrisponde al primo oggetto dell'indice
GameController.Riferimento.ImpostaUccelloScelto(2 );//Si attiva punk
Uccelli [GameController.Riferimento.ScegliUccelloScelto ()].SetActive (true);
}else{
Uccelli [1].SetActive (false);//corrisponde al secondo oggetto dell'indice
GameController.Riferimento.ImpostaUccelloScelto(0 );//Si attiva punk
Uccelli [GameController.Riferimento.ScegliUccelloScelto ()].SetActive (true);
}
}else if(GameController.Riferimento.ScegliUccelloScelto () == 2)//Se siamo punk
{
Uccelli [2].SetActive (false);//Rosa non si deve attivare per questo 0 corrisponde al primo oggetto dell'indice
GameController.Riferimento.ImpostaUccelloScelto(0);//Si attiva punk
Uccelli [GameController.Riferimento.ScegliUccelloScelto ()].SetActive (true);
}
}
}
}
Torniamo nella schermata dell'editor e trasciniamo gli uccelli negli slot corrispondenti a GameObject[] Uccelli,
Queste parentesi dopo gameobject indicano un elenco di oggetti che formeranno una sorta di lista .Gli 1 e 0 che fanno parte invece delle funzioni seguenti indiano una variabile che se è 0 indica che l'oggetto è sbloccato mentre l'1 è sbloccato,
Questa riga indica invece l'uccello sbloccato dall'elenco if (GameController.Riferimento.ScegliUccelloScelto () == 0)
Se è 0 ci stiamo riferendo al primo elenco dell'arrays a 1 al secondo mentre 2 al terzo
Rendiamolo prefab trascinandolo nell'apposita cartella ci servirà perchè nella scena principale dovremmo averlo.A questo punto creiamo il 3 ed ultimo script che va a gestire il sistema ,andiamo nella scena di gioco non più nel menu iniziale,creiamo ora come abbiamo fatto un empty gameobject e chiamiamolo Gameplay controller,ad esso creiamo ed aggiungiamo uno script omonimo:
Compiliamolo così:CODICEusing UnityEngine;
using System.Collections;
using UnityEngine.UI;//Usiamo l'interfaccia UI
using UnityEngine.SceneManagement;//Con unity 5.3 si usa questo metodo per caricare le scene
public class GameplayController : MonoBehaviour {
public static GameplayController Riferimento;
[SerializeField]
private Text gameover;// I Vari testi
[SerializeField]
private Button Restart,Istruzioni;// I pulsanti istruzioni e pausa
[SerializeField]
private GameObject PausePanel;//Il gameobject pause panel
[SerializeField]
private GameObject[] Uccelli;//Gli uccelli
[SerializeField]
private GameObject[] Trofei;//Vedremo poi
[SerializeField]
private Image TrofeoImage;
// Use this for initialization
void Awake () {
Esistenza ();
}
void Start () {
}
// Update is called once per frame
void Update () {
}
void Esistenza () {//questa funzione ci permette di portare in ogni scena del nostro gioco il gameobject gamecontroller
if(Riferimento!=null)//Se non esiste
{
Riferimento = this;//è questo
}
}
public void PauseGame() //Funzione per mettere in pausa
{
if(Uccellino.Riferimento != null)
{
if(Uccellino.Riferimento.èvivo)
{
PausePanel.SetActive (true);
gameover.gameObject.SetActive (false);
Time.timeScale = 0f;//0 come tempo equivale a tutto fermo
}
}
}
public void VaiAlMenu() //Funzione perandare al menu
{
Application.LoadLevel ("MenuInziale");
}
public void ResumeGame() //Funzione per riprendere dalla pausa
{
PausePanel.SetActive (false);//PausePanel inattivo
Time.timeScale = 1f;//Il tempo scorre
}
public void RestartGame() //Funzione per incominciare da capo
{
Scene scene = SceneManager.GetActiveScene ();
SceneManager.LoadScene (scene.name);
}
public void PlayGame() //Funzione per incominciare da capo
{
Uccelli [GameController.Riferimento.ScegliUccelloScelto ()].SetActive (true);
Istruzioni.gameObject.SetActive (false);
Time.timeScale = 1f;//Il tempo scorre
}
public void FineGioco() //Funzione per incominciare da capo
{
gameover.gameObject.SetActive (true);
}
}
Ora creiamo un nuovo text e chiamiamolo gameover e disattiviamolo.Creiamo poi un bottone e lo chiamiamo istruzioni . A questo punto dovreste essere in grado di ricreare ed animare i due uccelli che vi allego in questo pack.Creiamolo esattamente come avevamo fatto nelle prima parte di questa guida.Trascuriamo invece trofei e trofeo image. Posizionamoli a queste coordinate 0,28 x 2,74 y mentre come dimensioni impostiamo la scale a circa 0,17Esterno inve al pause panel aggiungiamo un componente text che chiamiamo puntegio,riaggiorneremo successivamente tutte le componenti a voi apparirà differente da me nn preoccupatevi vi spiegherò poi.
Disattiviamoli in quanto quando sceglieremo nel menu precedente con chi giocare si attiverà poi l'uccellino con cui giocare . Ora dovremmo trascinare il game controller prefab nella scena come vi avevo detto precedentemente .
Ora trasciniamo i vari oggetti del gameplay controller script come in figura:
Bene fatto questo ora il nostro sistema di gioco dovrebbe funzionare,dobbiamo fare ora i vari allacciamenti con i bottoni : così per cambiare uccellino,trasciniamo il menu controller e dal menu controller script e scegliamo dalle funzione cambia uccello.
Per start trasciniamo sempre il menu controller e poi scegliamo del game controller script la funzione inizio gioco
Al bottone pausa aggiungiamo così:
Al bottone menu trascinaimo gameplay controller:
Creiamo ora uno script per caricare un livello chiamiamolo level manager e compiliamolo così:CODICEusing UnityEngine;
using System.Collections;
public class LevelManager : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void LoadLevel (){
Application.LoadLevel ("scena1");
}
}
Così per il pulsante reload
Edited by ZeroRed97 - 15/11/2016, 19:24.