巧用Unity 2D功能:只需六步開發簡單的2D UFO遊戲

2021-01-11 CSDN

無論我們現在可以選擇多少種類繁多的,擁有逼真畫面感的遊戲,2D遊戲始終會在玩家們的心中佔據一席之地,而對於想邁入開發者行列的同學們來說,先嘗試做一款2D遊戲無疑是合適的起點。Unity中的2D功能讓開發此類遊戲更加的便捷,這篇教程將教大家使用Unity 2D功能製作一個非常簡單的UFO遊戲,整個過程只需要6個步驟,適合Unity初學者以及對Unity的2D功能不甚熟悉的開發者們,希望Unity能讓你初嘗遊戲開發的樂趣,為以後的開發之路奠定基礎,你準備好完成這款簡單的2D遊戲了嗎?

第一步 新建項目設置場景

首先下載項目所需的資源,或者在Asset Store中下載Unity官方的2D UFO Tutorial。

新建2D項目,在Assets文件夾下新建三個文件夾:Prefabs、Scripts、Scenes。將下載的資源導入項目,會看到Sprites文件夾。將Sprites文件夾下的Background和UFO圖片拖拽至層級視圖(Hierarchy),將UFO重命名為Player。如下:

依次點擊菜單項Edit > Project Settings > Tags and Layers,新建三個Sorting Layer分別命名為Background、Pickups和Players,然後設置各Sprite的Sorting Layer。

將Player的Scale設為(0.75, 0.75, 0),如下:

將Main Camera的Size設為16.5,背景顏色設為RGB(32, 32, 32),如下:

將場景保存到新建的Scenes文件夾下,任意命名即可,本例中命名為Main。

第二步 添加控制主角的腳本

首先為Player遊戲對象添加Rigibody 2D組件。然後新建腳本CompletePlayerController

用於控制Player對象,腳本代碼如下:

using UnityEngine;

using System.Collections;

//Adding this allows us to access members of the UI namespace including Text.

using UnityEngine.UI;

public class CompletePlayerController : MonoBehaviour {

public float speed; //Floating point variable to store the player’s movement speed.

public Text countText; //Store a reference to the UI Text component which will display the number of pickups collected.

public Text winText; //Store a reference to the UI Text component which will display the 『You win』 message.

private Rigidbody2D rb2d; //Store a reference to the Rigidbody2D component required to use 2D Physics.

private int count; //Integer to store the number of pickups collected so far.

// Use this for initialization

void Start()

{

rb2d = GetComponent ();

count = 0; //Initialze winText to a blank string since we haven't won yet at beginning. winText.text = ""; //Call our SetCountText function which will update the text with the current value for count. SetCountText (); }

//Store the current horizontal input in the float moveHorizontal. float moveHorizontal = Input.GetAxis (「Horizontal」);

//Store the current vertical input in the float moveVertical. float moveVertical = Input.GetAxis (「Vertical」);

//Use the two store floats to create a new Vector2 variable movement.

Vector2 movement = new Vector2 (moveHorizontal, moveVertical);

rb2d.AddForce (movement * speed);

}

//OnTriggerEnter2D is called whenever this object overlaps with a trigger collider. void OnTriggerEnter2D(Collider2D other)

//Check the provided Collider2D parameter other to see if it is tagged 「PickUp」, if it is…

if (other.gameObject.CompareTag (「PickUp」))

//… then set the other object we just collided with to inactive. other.gameObject.SetActive(false);

//Add one to the current value of our count variable.

//Update the currently displayed count by calling the SetCountText function. SetCountText ();

//This function updates the text displaying the number of objects we』ve collected and displays our victory message if we』ve collected all of them. void SetCountText() {

countText.text = 「Count: 」 + count.ToString ();

if (count >= 12)

依次點擊Edit > Project Settings > Input設置控制鍵,如下:

將Player對象的Rigibody 2D組件的Gravity Scale屬性設為0以防止Player向下墜落,並將PlayerController腳本的Speed屬性設為10。

第三步 添加碰撞

為Player添加Circle Collider 2D組件並將Radius屬性設為2.15,如下:

接下來為背景添加碰撞體,讓玩家不要跑出牆壁。為背景邊框添加4個Box Collider 2D組件,各組件屬性設置如下:

第四步 讓攝像機跟隨主角

新建腳本CompleteCameraController綁定到Main Camera上,用於控制相機跟隨主角移動。腳本代碼如下:

public class CompleteCameraController : MonoBehaviour {

//Public variable to store a reference to the player game object

private Vector3 offset;

void Start ()

//Calculate and store the offset value by getting the distance between the player’s position and camera’s position.

offset = transform.position - player.transform.position;

// LateUpdate is called after Update each frame

void LateUpdate ()

// Set the position of the camera’s transform to be the same as the player’s, but offset by the calculated offset distance.

transform.position = player.transform.position + offset;

將Player遊戲對象賦給CameraController腳本的player欄位。

第五步 設置寶石

將Sprites文件夾下的Pickup圖片拖拽至層級視圖,將其Sorting Layer設為Pickup並添加Circle Collider 2D組件。然後新建腳本CompleteRotator用於旋轉寶石,腳本代碼如下:

//Update is called every frame

//Rotate thet transform of the game object this is attached to by 45 degrees, taking into account the time elapsed since last frame.

transform.Rotate (new Vector3 (0, 0, 45) * Time.deltaTime);

將該遊戲對象拖拽至項目視圖(Project)的Prefabs文件夾下存為預設體,在層級視圖複製出11個寶石對象。然後在層級視圖新建GameObject命名為Pickups,並將這12個對象均拖至Pickups下,分別設置合適的位置,如下圖:

將Pickup預設體的Tag設為PickUp,並將所有Pickup對象的Circle Collider 2D組件的isTrigger屬性勾選上:

第六步 添加UI

右鍵點擊層級視圖,在彈出菜單中選擇UI > Text新建文本,層級視圖中除了Text外還會添加Canvas和EventSystem組件。將新建的Text命名為CountText,在檢視面板中打開Rect Transform的錨點設置面板後按下Shift+Alt/Option鍵點選左上角,讓Text自動吸附到界面左上角並選擇合適的文本顏色,如下圖:

再次新建Text命名為WinText,將字體大小設為24,對齊位置設為中間並選擇合適的顏色,如下圖:

最後,將剛才新建的兩個Text分別賦給PlayerController腳本的CountText及WinText欄位,如下圖:

到此就大功告成了,最後運行效果如下:

同學們如果想掌握更多Unity 2D開發的知識與技巧,通過更系統的學習變身Unity技術達人,創造出夢想中的遊戲,請關注「技術閃耀未來-Unity全球技術校園行」。

「技術閃耀未來-Unity全球技術校園行」- Unity Plus加強版開學季專屬優惠(9月1日-9月30日):

1, 特惠價格139元/月訂閱價

2, 免費獲得Unity認證開發者課程(訪問權截止到12月31日)

3, 免費獲得1款資源工具包:VR、2D、藝術設計和移動平臺(4選1)

點擊此連結,完成訂閱購買:https://store.unity.com/cn/offer/unity-essentials-education-packs?login=1

相關焦點

  • 如何製造一個簡單的2D遊戲?
    前言本文主要介紹的是我在參加學校工作室考核(是的)時開發一個簡單的2D橫板跳躍遊戲時的一些思路和開發記錄,如果你對遊戲開發比較感興趣並且想成為一個遊戲開發者的話,這篇文章或許對你會有一些幫助!如果你是一個遊戲開發者的話歡迎來和我交流:D!
  • 2021新年匯總:Unity項目原型快速開發資源,看這一篇就夠
    本文匯總了截止2021年1月2日的Unity項目原型快速開發資源,歡迎自取~01  Unity
  • 使用unity製作RPG遊戲3——2D精靈
    context=%7B%22nid%22%3A%22news_9564882242542237691%22%2C%22sourceFrom%22%3A%22bjh%22%2C%22url_data%22%3A%22bjhauthor%22%7D下面需要利用Tiled2Unity把01地圖導入unity下載Tiled2Unity,在根目錄下打開可執行文件進入unity。
  • unity業餘愛好者說一下
    unity業餘愛好者說一下,這幾天傳的關於《太吾繪卷》代碼的事幾乎都是無中生有的事...一群用.net和vs做工程的人談論第三方引擎做的遊戲...真是雞同鴨講。太吾繪卷現在針對幾個常見誤會說一下1.只有一個main (x)unity的腳本都是依附於各個精靈的,沒有main,只有update2.沒有注釋(x)你反編譯出來的代碼有注釋
  • 使用Unity和HTML5開發移動遊戲的優缺點
    HTML5在開發移動遊戲的優勢比較明顯,但是還是有人希望能使用Unity重構。Unity由Unity Technologies開發的一個讓玩家輕鬆創建諸如三維視頻遊戲、建築可視化、實時三維動畫等類型互動內容的多平臺的綜合型遊戲開發工具,是一個全面整合的專業遊戲引擎。
  • 使用Unity的2D功能開發彈球遊戲
  • unity遊戲項目實踐-2d戰旗策略遊戲
    ,首先戰旗策略遊戲的角色基本功能是點擊選中,顯示移動範圍,攻擊範圍,移動,攻擊,死亡。GameManager的selected和顯示移動範圍時對範圍內所有單元格的可移動選項moveable設置為true結合做一個簡單的坐標切換。
  • 使用Unity 粒子系統實現 2D 人物足跡效果
    之後深入一想腳本大概要怎麼寫,感覺頭大的不行,又想到了 Hierarchy 裡面被 FootStep12345678 塞得滿滿當當的壯麗場面..還是換個方法吧 轉念一想:unity 的粒子系統似乎可以滿足所有特性:生成淡出銷毀全自動,跟隨人物也是基本操作,比較存疑的就是用腳本控制粒子的鏡像與旋轉。
  • 2D也好玩 盤點2013年八款優質2D遊戲
    星界邊境  星界邊境(Starbound)  遊戲平臺:PC單機  開發公司:Chucklefish  遊戲特色:像素風 沙盤遊戲 可聯機  《星界邊境》有兩大特點:像素風和沙盤模式,這款遊戲名字聽上去像一款空戰遊戲,其實行星只是遊戲的大背景,玩家可以搭乘飛船飛往各大行星
  • 使用Unity製作經典2D遊戲之貪吃蛇(上)
    這篇文章將講解怎麼使用Unity製作簡單的貪吃蛇遊戲。
  • 簡化AR體驗創作,Unity MARS Query系統程序化生成場景的原理
    Unity MARS資料庫:  https://docs.unity3d.com/Packages/com.unity.mars@1.1/manual/MARSConcepts.html#the-mars-database  每條數據都以稱為數據ID(data ID)的一串數字做區分,每條數據又能包含任意數量的特徵(traits),即帶名稱的特定數據類型
  • 年薪30W的Unity3D遊戲開發崗面試題(上)
    用u3d實現2d遊戲,有幾種方式?1.利用引擎自帶的GUI2.把攝像機設為Orthographic,用面片作為2d元素3.利用第三方插件:NGUI、2dToolkit8.u3d中碰撞器和觸發器的區別?帶的assets server功能學習遊戲開發,進入高薪行業!
  • Unity技術分享(100)| Texture2DArray、粒子系統的性能開銷……
    A:就目前的Unity引擎的原生功能而言,粒子系統中的狀態更新(粒子的位置、朝向、觸發事件等)均為CPU端開銷,具體表現在ParticleSystem.Update和ParticleSystem.EndUpdateAll等函數中。
  • 了解CSS3中那些顛覆性的變化之2D轉換
    那麼今天我們就來說說CSS3中具有顛覆性的特徵 , 它就是2D , 3D , 動畫等功能 , 在沒有JS的情況下就能做出動態的頁面.那下面我們來了解一下CSS3中的2D 轉換的使用1.CSS3中的2D 轉換轉換(transform)是CSS3中具有顛覆性的特徵之一,可以實現元素的位移、旋轉、縮放等效果轉換(transform)你可以簡單理解為變形 ,它擁有3個屬性:移動:translate旋轉:rotate縮放:scale
  • :強面內各向異性的2D無機雙分子晶體
    然而,由於非典型的層狀結構和複雜的分子間相互作用而導致製備困難,2D無機雙分子晶體仍未被開發。有鑑於此,近日,華中科技大學翟天佑教授和李會巧教授(共同通訊作者)等報導了一種簡單的垂直微間距升華策略,成功合成出2D無機雙分子晶體SbI3·3S8納米帶。
  • mac版Unity Pro遊戲開發工具如何創建和使用腳本
    Unity Pro 2018 for mac是遊戲開發必備的軟體之一,unity mac版主要用於創建2D和3D跨平臺遊戲,比如三維視頻遊戲、實時三維動畫、建築可視化等類型,儘管Unity的內置組件可以實現多種用途,但是您很快就會發現,您需要超越它們提供的功能來實現自己的遊戲功能。
  • 巧用思維導圖,只需要5步就搞定
    第一步:新建思維導圖首先,需要我們在瀏覽器中搜索一下迅捷畫圖網站,找到之後,點擊進入網站首頁,此時需要大家在首頁選擇思維導圖的【立即體驗】按鍵。第二步:添加主題進入到新建的思維導圖頁面後,選擇中心節點,滑鼠右擊會有添加不同主題的按鍵,通過不同主題之間的添加將思維導圖的初步構架給做出。
  • Unity項目開發過程中常見的問題,你遇到過嗎?
    最近看到有朋友問一個unity遊戲開發團隊,需要掌握哪些知識之類的問題。
  • 如何快速簡單的安裝opencv-python
    安裝opencv-python目前opencv最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊