最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

從零開始獨立游戲開發(fā)學習筆記(四)--Unity學習筆記(一)--Unity基礎(一)

2021-10-01 01:15 作者:oyishyi  | 我要投稿

雖然說 Unity 和 C# 的學習可能是我所有要學的東西中最簡單的。但那只是一個相對的概念,并不代表這些東西的學習本身是一個簡單的事情。很多人學了七八年也不敢說自己精通 Unity 或者 C#。說它們簡單只不過是相對于繪畫和音樂來說,因為后兩者可能窮極一生都無法精通。

Anyway,對于 Unity 我并不需要達到一個精通的水準。我只需要能夠把自己的想法實現出來就行。而目前我的目標也只是看完 brackeys 的教程和 Unity 文檔而已。

1. 安裝

1.1 如何逃離中國特供版 Unity

早有耳聞中國 Unity 壞事做盡。于是安裝前搜到了這么一個?網站。域名很有意思。

1.2 安裝

  1. unity hub:問我要不要轉 beta 下載器。轉了,好看多了,看來像 unreal 學習了很多。

  2. unity 本體的下載:看了下官網的版本說明,beta 版比穩(wěn)定版本多了功能,但并不是說不穩(wěn)定。alpha 才是不穩(wěn)定的可能會出 bug 的版本。所以我下載了 beta 版本。

  3. 附加下載選擇如下:

1.3 下載失敗

瘋狂下載失敗,而且下載失敗需要從 0 開始重新下載,絕了。
下載花了兩個小時,今天(29 號)估計沒法更了。

2. 起步

新建一個 3d 空項目。然后就能看到 unity 的界面。長這樣:

2.1 UI 簡單介紹

2.1.1 hierachy


左邊的 panel 顯示了當前項目的 hierachy。

  1. 可以看到默認有一個叫做 sampleScene 的東西,顧名思義這是個 scene(unity 里的 scene 就是關卡)。

  2. 然后其下方可以展開的兩個叫做 object。一個是主相機,一個是定向光。

2.1.2 inspector


  1. 點擊任意一個 object 后,右邊就會顯示一些東西。

  2. 這些東西也是有 hierachy 的,那些可展開的東西叫做 components(組件?)。component 可以使 object 做各種各樣的事情。展開里的東西叫做 Properties(屬性)。

2.1.3 project


  1. 下方很長的這個是 project panel。里面放著游戲 asset,可以從這里把 asset 直接拖進屏幕。從而顯示在 hierachy 里。

右上角可以更換視圖顯示,傳統藝能了。

2.2 創(chuàng)建地面

  1. 在 hierachy 視圖里新建一個 3d cube。

在中央視圖里選擇物體后按 f 可以自動聚焦到該物品上。(過去式)

現在是雙擊 Object 聚焦。

  1. 物品出現的位置不是我么想要的,所以選擇 cube 后,在 inspector 里右鍵 transform 這個 component,點擊 reset。這樣物品的位置和縮放就被重置了。

  2. 中央界面上方有幾個 tab,代表著不同視圖,選擇 game 后就會變成游戲實際看到的畫面。這些視圖 tab 也可以拖動改變布局。比如說把 game 拖動到右邊,這樣就可以同時看到游戲畫面的樣子了。我們就這么做。

4. 改變一下 transform 讓其變長變寬。就成了一個地面。在 inspector 左上方可以更改 object 的名字。這里改成 ground。

2.3 創(chuàng)建角色

  1. 依舊用 cube 來作為游戲角色。創(chuàng)建后 reset。你看,之前的地面我們 reset 過了,現在的角色我們也 reset。那么調整兩者之間的距離關系就簡單多了。

2.3 material

角色現在和地面一樣是白色,并不好區(qū)分。所以要用 material 改變角色的外觀。

  1. material 是 asset,要在 project panel 里創(chuàng)建。

  2. material 也有很多屬性可以在 inspector 里更改。

  3. 把 material 拖到 object 上就可以用了。在 material 里更改的屬性可以實時顯示在屏幕上。

2.4 添加物理

  1. 把角色往上拖一點。點擊中央上方的 play。發(fā)現無事發(fā)生,cube 并不會掉下來。因為我們什么都沒做,什么都沒加。

  2. 所以我們得讓這個 object 和 unity 物理系統交互。

  3. 之前講過 component 使得 object 做各種各樣的事。因此我們需要給 object 一個新的 component。

  4. 我們加上 RigidBody 這個 component,這樣我們的 cube 就可以掉下來了。然后我們旋轉一下以讓物品掉下來更有趣。(qwerty 快捷鍵可以快速更換拖動,位置,旋轉,縮放等工具)

2.5 component

再好好看看 cube 的 components。除了我們添加的 RigidBody。還有很多別的。

  1. transform 不用說了,基本每個 object 都有的基本屬性。

  2. Mesh Rendered。渲染 object 的,如果去掉勾選。物品就不會顯示在屏幕上。但是仍然存在,只是不顯示。

  3. Box Collider。顧名思義,碰撞相關的組件。去掉勾選后物品就沒有碰撞效果了。在有重力的時候,會無視地面一直往下掉。和其他物品碰到也不會相互影響。Box Collider 和 RigidBody 共同提供了真實物理效果。

  4. Mesh Filter。沒什么好說的,只有一個屬性,改變形狀。如果我們改成球體。注意由于我們的組件里依然還是 Box Collider。因此碰撞體積還是 Box??梢詣h掉 Box collider 換成 Sphere Collider。

play 狀態(tài)的時候仍然可以更改屬性。但是所有的更改在退出 play 狀態(tài)的時候都會撤銷。

2.6 skybox

在 camera 中可以更改 skybox。(clear flags 屬性中更改)

2.7 maximize view 快捷鍵

按?shift + space?可以把鼠標位于的視圖放大到最大。類似于 Adobe 系列的?~?鍵的作用。

3. C# 初接觸

也不算初接觸吧,稍微知道一些語法,但是也就一點點。

3.1 移動 Script

Unity 里通過 Script 來給 Object 添加代碼。
Script 其實也是一種組件。?因此還是通過 Add Component 來添加。我們在我們的 cube 上添加一個 Script 組件。
添加完畢后可以看到一個 Script 文件在 project panel 里出現。這個腳本自然也可以放到其他的 Object 上。
可以看到此時我們的 cube 上有了一個 Script 組件。雙擊組件下面屬性中的文件名就可以打開代碼編輯器(基本都是 vs)來編輯它。(或者雙擊 project panel 上的文件也行)

3.1.1 Start()


start 函數(還是方法?語法不太懂)里的代碼會在游戲運行前執(zhí)行,這個看注釋也能夠知道。 用 Debug.Log() 來打印。看起來很像 console.log(),實際上,當你回到 Unity,運行游戲的時候??梢钥吹秸窍路降?console panel(project panel 旁邊的那個 tab)里打印了你要打印的東西。

3.1.2 鏈接其他組件


還是之前的 Script 文件,這次我們在 start 上方新建一個變量,類型為 RigidBody,很明顯這是為了控制 RigidBody。變量隨意取個名叫 rb。


回到 Unity,可以發(fā)現 Script 組件里多了一個 rb 屬性。不過值是空的(None)。


我們想讓這個 rb 變量和我們 cube 上的 RigidBody 鏈接在一起,從而達成對 RigidBody 的控制。操作方式很簡單,直接把 cube 上的 RigidBody 組件拖到 None 值上即可。(Unity 會有類型檢測,別的組件你也拖不進來)

然后在 vs 里就可以對 rb 進行控制了。比如說我們用 AddForce 這個方法,可以給我們的 cube 施加一個力,比如?rb.AddForce(0, 300, 500)?可以讓我們的物品向前飛起來(假設 y 軸和 z 軸是朝上和朝前的)。

3.1.3 Update() 和 Time.deltaTime


我們想讓物品持續(xù)移動,那么就可以考慮使用 Update,可以在 update 里給其施加一個力。因為 Update 會在每一幀渲染的時候被執(zhí)行一次,因此持續(xù)移動的目的就達到了。

但是其實這個是有 bug 的,因為 Update 是每一幀運行一次。然而我們都知道不同的電腦,幀率是不一樣的。而且就算是同一個電腦的幀率也是不穩(wěn)定的。高幀率的時候,每秒 cube 受到的力更多,低幀率的時候 cube 每秒受到的力更少。
解決方案是這樣的:

這里的?Time.deltaTime?是個啥呢?其實它指的是上一幀渲染所經歷的時間(單位為 s)。所以起到了一個平衡的作用。

粗略說: 每秒幀數 * 每一幀花的秒數 = 1 ? 或者準確來說,一秒種內: 第一幀花的時間 * 600 + 第二幀花的時間 * 600 + ... + 最后一幀花的時間 * 600 = (第一幀花的時間 + 第二幀花的時間 + ... + 最后一幀花的時間) * 600 = 1 * 600

因此這樣每一秒內 cube 受到的力就無視幀率固定了。這也是為什么要從 3 改到 600,因為這個數字現在代表每秒鐘受到的力,而不是每一幀受到的力。
也就是說,在 Update 里,將一個數乘以 Time.deltaTime,可以讓這個數值代表的含義從每幀的變化,變成每秒的變化。

3.1.5 FixedUpdate()


前面的代碼沒有問題。但是不符合 Unity 風格。Unity 希望你在 FixedUpdate 里進行物理操作,而不是 Update 里。簡單地把 Update 改成 FixedUpdate 就行。


從零開始獨立游戲開發(fā)學習筆記(四)--Unity學習筆記(一)--Unity基礎(一)的評論 (共 條)

分享到微博請遵守國家法律
加查县| 铜陵市| 广东省| 西充县| 江北区| 丹凤县| 鹤峰县| 通山县| 浑源县| 云南省| 贡觉县| 宁南县| 德阳市| 昌平区| 家居| 循化| 辽阳县| 灌南县| 福海县| 区。| 承德县| 伊金霍洛旗| 阿克陶县| 新郑市| 报价| 敖汉旗| 北票市| 彰武县| 旌德县| 兰西县| 曲麻莱县| 乌拉特前旗| 特克斯县| 辉南县| 贡嘎县| 定南县| 潮安县| 上栗县| 凤城市| 中宁县| 长顺县|