文章目錄
- 前言
- 一、素材制作
-
- 1.這邊就是簡單用PS到了幾個基礎圖形
- 二、場景搭建
-
- 1.搭建目标場景
- 2.搭建遊戲場景
- 3.添加按鈕重新開始和退出遊戲
- 三、代碼功能實作
-
- 1. Shoot腳本,子彈射擊的實作
- 2.ButtonGreen腳本,實作點選控制子彈的射出
- 3.通過标簽實作碰撞檢測和空氣牆的制作
- 4.實作遊戲重新開始和通關判斷
前言
寫個了ColorShoot的小遊戲簡單Demo,主要是分享思路和鞏固基礎知識。
自學Unity一個月做個小遊戲試試手
一、素材制作
1.這邊就是簡單用PS到了幾個基礎圖形
1.三種顔色的方塊
2.4種顔色的圓(主要顔色一樣的話射擊的時候顔色會疊加)
二、場景搭建
1.搭建目标場景
1.這邊其實在PS裡搭建好以後直接用一個精靈展示也是可以的,我這邊是拼出來的。
2.這裡目标就看關卡的需要了,我這邊就随便拼了個這樣的
3.基本下面的Target,RectWhit,Circle都是空物體,用于存放其他精靈子物體
2.搭建遊戲場景
1.先建立一個白色方塊精靈,制作為預制體,然後拖出來9個方塊組成遊戲場景
注意:該遊戲物體需要添加2D的碰撞器元件
2.建立圓的按鈕預制體,先放一個綠的和紅的就可以了
注意:該遊戲物體需要添加2D的碰撞器用于檢測滑鼠點選
3.建立子彈的預制體,用顔色較深的兩個圓來做
注意:該遊戲物體需要添加2D的碰撞器和剛體,同時需要勾選觸發器,剛體重力調整為0
3.添加按鈕重新開始和退出遊戲
1.我這邊選擇是這種渲染模式,因為遊戲場景不會超出螢幕範圍
三、代碼功能實作
1. Shoot腳本,子彈射擊的實作
1.需要引用的空間
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
2.制作子彈的射擊
public float speed = 5;//定義一個浮點變量速度
public bool isGreen;//定義一個布爾變量判斷射出的子彈是綠的還是不是綠的
public void ShootGreen()//聲明一個射擊方法,思路是子彈自動向前方勻速運動
{
transform.Translate(transform.up * speed * Time.deltaTime, Space.World);
}
void Update()
{
ShootGreen();//在Update種調用射擊方法
}
2.ButtonGreen腳本,實作點選控制子彈的射出
1.代碼實作子彈執行個體化的功能
public bool isButtonGreen;//定義一個布爾變量用于判斷按鈕是綠的還是不是綠的
public GameObject GreenBullet;//定義一個遊戲物體用于擷取綠色子彈
public GameObject RedBullet;//頂一個遊戲物體用于擷取紅色子彈
private void OnMouseDown()//這裡用一個滑鼠按下方法來判斷射擊的時機,按鈕需要添加2D碰撞器元件,不然檢測不到
{
if (isButtonGreen)//當按下綠色按鈕時,原地執行個體化一個綠色子彈
{
Instantiate(GreenBullet, transform.position, transform.rotation);
}
if (!isButtonGreen)//當按下紅色按鈕時,原地執行個體化一個紅色子彈
{
Instantiate(RedBullet, transform.position, transform.rotation);
}
}
2.挂載在按鈕上,然後右邊三個按鈕調整為Z軸旋轉90度,這樣根據之前Up的子彈運動代碼,子彈就會從按鈕上生成後向左移動,下面三個按鈕不需要旋轉就會往上發射子彈(然後該旋轉不需要通過預制體改動,是根據按鈕自身的需求進行改動)
3.通過标簽實作碰撞檢測和空氣牆的制作
1.新添加2個标簽用于判斷是矩形還是空氣牆
2.回到Shoot腳本,同時給所有的白色方塊添加上RectWhite的标簽
同時也需要給挂載Shoot腳本的子彈,指定紅色方塊和綠色方塊,還有選擇這個子彈是紅色子彈還是綠色子彈
public Sprite green;//定義一個綠色精靈用于擷取綠色矩形,如果顔色矩形數量多就用數組
public Sprite red;//定義一個紅色個精靈用于擷取紅色矩形
```private void OnTriggerEnter2D(Collider2D collision)//碰撞檢測
{
switch (collision.tag)//用标簽判斷碰撞的物體
{
case "Wall"://當子彈碰到空氣牆就銷毀
Destroy(gameObject);
break;
case "RectWhite"://當子彈碰到白色方塊的時候
if (isGreen)//判斷如果是綠色子彈則将碰撞到的方塊變成綠色
{
collision.GetComponent<SpriteRenderer>().sprite = green;
}
if (!isGreen)//判斷如果不是綠色子彈則将碰撞到的方塊變成紅色
{
collision.GetComponent<SpriteRenderer>().sprite = red;
}
break;
}
3.空氣牆的制作
1.建立一個空物體,然後建立四個空物體,添加上2D碰撞器元件,并加上Wall 的标簽,位置可以像我下面一樣,這樣子彈射到空氣牆就會銷毀。
4.實作遊戲重新開始和通關判斷
1.通關判斷,在Shoot腳本裡
public void Sucess_F()//勝利方法,相當于遊戲種的9個方塊達成與目标一樣的條件,如果後續學會了更簡單的方法再來改
{
if (GameObject.Find("RectWhite1").GetComponent<SpriteRenderer>().sprite == red&&
GameObject.Find("RectWhite2").GetComponent<SpriteRenderer>().sprite == green&&
GameObject.Find("RectWhite3").GetComponent<SpriteRenderer>().sprite == green&&
GameObject.Find("RectWhite4").GetComponent<SpriteRenderer>().sprite == red&&
GameObject.Find("RectWhite5").GetComponent<SpriteRenderer>().sprite == red&&
GameObject.Find("RectWhite6").GetComponent<SpriteRenderer>().sprite == red&&
GameObject.Find("RectWhite7").GetComponent<SpriteRenderer>().sprite == red&&
GameObject.Find("RectWhite8").GetComponent<SpriteRenderer>().sprite == green&&
GameObject.Find("RectWhite9").GetComponent<SpriteRenderer>().sprite == red
)
{
SceneManager.LoadScene("Sucess");//切換勝利場景
}
}
void Update()
{
Sucess_F();//勝利方法
}
2.退出遊戲和重新開始
建立新腳本Game嗎,并建立一個空物體用于挂載腳本,然後将該物體指定給按鈕後,選擇對應的方法,退出遊戲按鈕也同理
public Sprite white;//定義一個精靈擷取白色方塊
public void Button_Restart()
{
GameObject[] gameObject = GameObject.FindGameObjectsWithTag("RentWhite");//定義一個精靈數組用于擷取所有有白色标簽的方塊
for (int i = 0; i < gameObject.Length; i++)//用一個For循環來把所有方塊換成白色方塊完成初始化
{
gameObject[i].GetComponent<SpriteRenderer>().sprite = white;
}
}
public void Button_OnApplicationQuit()//遊戲退出方法
{
Application.Quit();
}
3.勝利界面腳本
這邊建立了第二個場景,勝利場景裡面就一個按鈕和一個文字
GameObject空物體用于挂載腳本,将該物體指定給按鈕,然後選擇到我們聲明的方法,這樣點選後就會傳回遊戲界面
public void Button_MorePlay()
{
Button_Restart();//重置方塊顔色方法
SceneManager.LoadScene("Game");//回到遊戲界面
}