初識Unity —— 兩課之后的學習總結

跟了兩個官網tutorial了,來總結下都學了些什么吧。

在Unity里做出一個游戲的基本流程是什么呢?(一個單場景的游戲)

1. 把游戲里會出現的“物品”都擺進去并設置好(包括UI)

2. 調整鏡頭和光線(2d游戲可能不大需要)

3. 通過腳本讓“物品”動起來、“物品”和“物品”產生交互、“物品”和玩家產生交互

下面主要總結步驟1和3的關鍵點

一、把游戲里會出現的“物品”都擺進去并設置好


Game Object:核心!所有的其他東西都依托于Object,每個Object負責自己的功能,然后它們合作把游戲完成(這就是所謂的面向對象的編程吧)。

Empty Object:特殊的object,用作容器。可裝物品,也可裝邏輯。

Rigidbody:要用到物理機制就要加Rigidbody

關鍵屬性 Use Gravity,Is Kinematic(不受物理力作用),Drag和Angular Drug(空氣阻力)

Collider:有碰撞就要有Collider

有碰撞后反應就要勾Trigger;有多種mesh形式

Materials:textures轉成materials再加到物體上(有待進一步學習)

Prefabs:拖到的prefabs文件夾下的物品就會變成prefab,會多次出現的物品適合做成prefab

二、腳本


基本結構(個人理解而已):

變量 --> 函數 --> 邏輯 --> API

1. 變量

public的是要引用某個物品的,或者要在inspector設定數值的

private的只在當前腳本中使用的

目前見到的數據類型有float、int、bool、GameObject、Rigidbody、Vector3、Text、GameController、Boundary、AudioSource (待研究)

引自http://my.oschina.net/u/1585857/blog/475674

*變量名首字母通常小寫

2. 函數

默認的四函數Start()、Update()、 FixedUpdate()、LateUpdate()(Awake暫時沒接觸)

其他自帶函數OnTriggerEnter()、OnTriggerExit()(更多待了解)

unity自帶函數會在預定條件下觸發,自建函數則自行調用

自建函數:

通常不需要返回值的都是void

要在其他腳本中引用的就是public void

協程返回值是IEnumerator

*函數名通常首字母大寫

3.邏輯

目前用到的有:if(){},for(;;){},while(){}

for和while會一直循環到結束才會跳出(沒有跳出指令的話)

return:跳出函數并返回值

break:終止循環

和上面兩個一套的應該還有一個continue,是跳過當前循環并開始循環的一次新迭代

參考:http://www.cnblogs.com/iceword/archive/2010/06/04/1751382.html

4. API

感覺unity真的是提供了好多好多的api啊,掌握unity的關鍵一步可能也就是熟悉這些api吧

目前用到過的:

獲取組件

GetComponent<>()

Debug

Debug.Log()

Input系列

Input.GetAxis("Horizontal"); Input.GetAxis("Vertical")

Input.GetButton("")

Input.GetKeyDown (KeyCode. )

gameObject系列

物體名.gameObject.SetActive()

物體名.gameObject.CompareTag(" ")

GameObject.FindWithTag("...") 返回標有該tag的物體

Rigidbody系列

rb.AddForce() ?(rb是裝rigidbody的變量名)

rb.rotation: rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);

rb.velocity

rb.position

rb.angularVelocity

銷毀物體

Destroy(xx.gameObject)

從prefab生成instance

Instantiate(原型,位置,旋轉)

text系列

.text

.toString

數學函數集錦 mathf

mathf.CLamp(,,)

Random系列

Random.Range(,)

Random.insideUnitSphere

協程函數等待

yield return new WaitForSeconds(...)

當前時間

Time.time

音頻播放

audioSource.Play()

重新加載場景

Application.LoadLevel(Application.loadedLevel)?已廢

用SceneManager 就可以啦

using UnityEngine.SceneManagement;

SceneManager.LoadScene(場景的build index);

5.其他

單獨類的建立

類前要加[System.Serializable]

[System.Serializable]

public class Boundary

{

public float xMin, xMax, zMin, zMax;

}

###最后 ,警惕 大小寫!

2016.07.25 接下來準備找幾個2D教程來看下


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容