Unity3D之塔防遊戲的製作(一)

前不久,由於要練習Unity的使用,之前也寫了幾個小遊戲,但是感覺還有一些東西不太熟練,就臨時決定來寫一下這個塔防遊戲,就是模仿一下幾年前比較流行的皇家守衛軍,(其實我當時也不知道寫什麼,是別人提的建議),這對於剛開始學習Unity的我也是一種挑戰,廢話不多說,開始實戰:

 

我這裏先把我做好的遊戲放這裏,供大家下載,鏈接:https://pan.baidu.com/s/1d0s49uehmmak3QSToMbWbw 密碼:zlza),遊戲沒有做完,只做了一個箭塔,一個兵種,一個地圖,因爲原遊戲太大了,不是一個人能做出來的;再者,有什麼問題,就請大家提出來,當然,這個遊戲本身就有很多問題,比如項目文件沒有分類好、類的分工雜亂等一些問題,當然,有了問題就要解決,問題對於我們初學者是一個不錯的老師,我們應該正面面對它。

 

首先是資源,一個好的遊戲一定要有好的遊戲資源,資源在網上找,當然,我已經找好了,資源:(鏈接:https://pan.baidu.com/s/1MdblW61OTzbwDuKsdYEoCg 密碼:7xyh),剛開始不要全部導入,因爲我們不要那麼多,我們只要實現其塔防遊戲的一些功能就行了,我不會把遊戲做的很完整,當然,你有興趣的話,可以完善遊戲;

開始製作遊戲:

一.製作遊戲開始菜單

製作遊戲開始菜單會用到Unity中的GUI,所以在做菜單的同時也能鍛鍊我們對GUI的使用;一般遊戲開始菜單上都會有退出按鈕、設置按鈕、開始遊戲按鈕、關於遊戲按鈕,所以這幾個按鈕的功能我們都要實現;

效果圖:

1.製作背景圖片:

1.在Hierarchy視圖下的Create中選擇UI,然後在UI下選擇Canvas,2.右鍵Canvas選擇UI,然後選擇Image,3.點擊Image,在Inspector視圖下的Image組件中選擇Source Image,在其中選擇好圖片,4.調整好大小,基本上就OK了。

2.製作退出按鈕、開始按鈕、關於遊戲按鈕、設置按鈕:

法1:1.右鍵Canvas選擇UI,然後選擇Button;

2.同樣也是點擊Button後,在Inspector視圖下Image中的Source Image,選擇圖片,調整大小;

3.點擊Button下的Transition,在下拉菜單中有None、Color Tint、Sprite Swap、Animation,現在它默認是選擇Color Tint,Color Tint是用顏色做UI特效,Sprite Swap是用圖片做UI特效,Animation是用動畫做UI特效,我現在就選擇默認的Color Tint,4.在下面還有Normal Color(沒有任何動作時的顏色)、Highlighted Color(鼠標移上去時的顏色),Pressed Color(鼠標在上面點擊時的顏色)、Disabled Color(禁用時的顏色);之後選擇好顏色,;

4.添加script組件,然後開始寫代碼:

//退出遊戲
public void Exit()
{
    Application.Quit();
}

 寫一個公用的方法就行了;

5.把這個方法綁定到按鈕上,點擊Button下On Click中的“+”,把你之前添加script組件的對象拖到None(Object)上,然後在右邊的下拉菜單中選擇script組件的Exit方法。

這退出按鈕做完了,如果你想做漂亮點可以用Transition下的Sprite Swap和Animation,我這裏用的是Sprite Swap,我還添加了一個點擊播放聲音的方法。

 代碼很簡單:

//你可以把它放到一個特殊的類裏面,因爲還有更多的按鈕要用到這個聲音

public AudioClip clip; //要播放的音樂

private AudioSource audios;  //播放器組件

void Awake () {
    audios = GetComponent<AudioSource>();
}

public void Audio1()
{
    audios.clip = clip;
    audios.Play();
}

 當然還有另外一種方法:法2:前面四步都是一樣的,

5.選中按鈕對象,點擊菜單欄的Component,點擊下面的Event,再點擊Event Trigger,它會在按鈕對象裏添加一個

Event Trigger組件,在外面的Hierarchy下添加一個事件偵聽器,之後你就可以在Event Trigger組件裏添加事件類型和綁定方法,我一般把Event Trigger組件和Button組件相互使用,兩者互補其缺陷,能夠使你的UI更加完美;Event Trigger裏面的事件類型我就不細講了,有一些我也沒用過,一般是用前面幾個;

現在退出按鈕做好了,接下來製作其它按鈕,製作其它按鈕和退出按鈕無非就是實現的功能不一樣而已,就像開始按鈕,點擊之後要切換到下一個場景,也就是主場景,實現起來是簡單的

//切換到主場景
public void StartGame()
{
    AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("主場景的名稱");
}

 同時要導入一個類:

using UnityEngine.SceneManagement;

 就如同退出按鈕,想做漂亮,就要用心、用時間去做。

 下面做關於遊戲按鈕,它實現起來就是兩個UI界面之間的切換,所以我要做兩個UI界面:

 實現方法:

//canvas是一個遊戲對象數組,用於儲存兩個UI遊戲對象
public void Canvas1()
{
    canvas[0].SetActive(true);
    canvas[1].SetActive(false);
}

 添加這段代碼之後,把做好的那兩個UI對象給拖到上面去,就可以實現UI界面之間的切換了,

下面是我做的關於遊戲的UI界面:

                     

 最後的設置按鈕,這裏我只說一下新增功能:

1.點擊一下實現設置面板以移動的方式出現;

實現方法:

private Animator animator;

private bool isClick = false;

void Awake () {
    animator = GetComponent<Animator>();
}
	
public void Move()
{
    if (isClick)
    {
        animator.SetInteger("isMove", 1);
        isClick = false;
    }
    else
    {
        animator.SetInteger("isMove", -1);
        isClick = true;
    }   
}

我這裏加了一個動畫,不然就不會有那種移動的效果 

2.設置面板可以調節主音樂音量;

實現方法:

private AudioSource audios;

//調節音量
public void AudioSize(float newVolume)
{
    audios.volume = newVolume;
}

 在這裏要添加UI組件裏的Slider組件。

3.設置面板可以關閉主音樂;

實現方法:

private bool isClick = true;

//關閉打開主菜單音樂
public void AudioSwitch()
{
    if (isClick)
    {
        audios.Stop();
        isClick = false;
    }
    else
    {
        audios.Play();
        isClick = true;
    }
        
}

 這裏要添加UI組件裏的Toggle組件;

效果圖:

到此,四個按鈕就做好了,如果你想把它做得更好也可以添加一些其它的東西,我這裏在中間添加了一個遊戲logo,也讓整個畫面看起來飽滿些,其實我在做開始菜單時,花時間最多的是動畫製作和按鈕製作,這裏的代碼量很少。

下面公佈本節所有代碼:

具體的請到我公佈的資源中查看:

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

public class GameController : MonoBehaviour {

    public GameObject[] canvas;  //儲存兩個UI遊戲對象

    private AudioSource audios;  //音樂播放器

    private bool isClick = true;

    void Awake()
    {
        audios = GetComponent<AudioSource>();
    }

    public void Canvas1()
    {
        canvas[0].SetActive(true);
        canvas[1].SetActive(false);
    }

    public void Canvas2()
    {
        Invoke("A", 0.2f);
    }

    private void A()
    {
        canvas[0].SetActive(false);
        canvas[1].SetActive(true);
    }

    //退出遊戲
    public void Exit()
    {
        Application.Quit();
    }
    //調節音量
    public void AudioSize(float newVolume)
    {
        audios.volume = newVolume;
    }
    //關閉打開主菜單音樂
    public void AudioSwitch()
    {
        if (isClick)
        {
            audios.Stop();
            isClick = false;
        }
        else
        {
            audios.Play();
            isClick = true;
        }
        
    }

    public void StartGame()  //進入關卡場景
    {
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(1);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Canvas : MonoBehaviour {

    public AudioClip clip; //音樂

    private AudioSource audios; //音樂播放器

	void Awake () {
        audios = GetComponent<AudioSource>();
	}
	
    public void Audio1()
    {
        audios.clip = clip;
        audios.Play();
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimatorMove : MonoBehaviour {

    private Animator animator;  //動畫播放器組件

    private bool isClick = false;

    void Awake () {
        animator = GetComponent<Animator>();
    }
	
    public void Move()
    {
        if (isClick)
        {
            animator.SetInteger("isMove", 1);
            isClick = false;
        }
        else
        {
            animator.SetInteger("isMove", -1);
            isClick = true;
        }
        
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章