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

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

假期筆記1-6節(jié)

2022-01-08 22:42 作者:挽秋_z  | 我要投稿

b站麥扣老師的課程:教程鏈接

學習筆記

第一節(jié)

1.創(chuàng)建管線

將項目升級到URP通用渲染管線,在包管理器中搜索Universal RP,安裝后為項目創(chuàng)建渲染管線,如圖

在創(chuàng)建的管線中,在屬性General的Renderer List中可以添加渲染器。

在edit——project settings——Graphics中設置剛才添加的渲染管線,同時在quality中也可以進行添加。

2.添加素材

在尋找素材時,需要注意該素材是否支持當前的渲染管線,在素材的描述中可以查看是否支持

3.為渲染管線適配素材和場景

當將素材放到場景中不能正常顯示時,一般是沒有適配當前的渲染管線。

這個場景素材中已有,可直接安裝升級。

對于人物素材,在edit菜單中


第一個選項是將整個project中的材質都升級到URP,第二個是僅將選中的材質升級到URP。一般是直接全部升

級,升級后場景中的素材可以正常顯示。

第二節(jié)

天空盒

在這個下拉菜單處可以隱藏場景中默認的天空盒


同時,可以在資源商店中尋找合適的天空盒資源導入工程

導入后,還可以調整天空盒的參數(shù)來實現(xiàn)不同的效果。

在windows——rendering——中調出lighting窗口,在lighting的Environment可以

調整默認的天空盒

場景搭建

要先場景中添加物體時,可以直接拖拽到Hierarchy窗口中,這樣物體就會保持初

始的默認位置。

調整角色的影子,在之前建立的渲染管線中進行調整:

Shadows屬性

Max Distance:默認的距離50,也就是在50米遠的范圍內,都進行陰影

的渲染,這個距離是指攝像機可以看到的距離。當場景中的物體較多時,可以減小

該距離,以降低性能的消耗。

Cascade Count: 是指分為幾層幾級來渲染,當模擬真實場景時,遠處的東西會比較

虛,近處的比較實。如分為兩層,可以設置每一層的距離,第一層的為實陰影,第

二層為虛的陰影。

Normal Bias:這個值越低,陰影越實,中間沒有縫隙

Soft Shadows:虛陰影

Lighting屬性中的Shadow ?Resolution,這個值越高,陰影效果越好,同時開銷也

越高。

Quality屬性

Anti Aliasing(MSAA) :抗鋸齒級數(shù)

需要開啟Quality中的HDR,在后期的后處理效果中需要用到。

場景光照設置

調出lighting窗口,新建一個光照設置文件New...


Shadowmask:間接烘焙

Progressive GPU:使用gpu來渲染可以節(jié)省CPU的開銷,調整好參數(shù)后,進行渲染。

在lighting的環(huán)境設置中,環(huán)境光的來源默認是天空盒,場景的渲染會受到環(huán)境光

的影響,也可以進行修改,Color時還可以調整需要的顏色和光照強度。

場景中物體的放置

按住V鍵,再去拖拽物體,物體的坐標中間會有一個矩形,碰到其他平面時,會自

動吸附,這樣就可以很方便的放置物體。

Crtl+shift+F,便捷調整游戲視圖。

第三節(jié)

導入包Poly brush(一個用來編輯地形和場景的工具),安裝后菜單欄中會出現(xiàn)Tools欄,

在里面即可使用Poly brush。

Poly brush

第一個是用來調節(jié)地形高度的工具

先選中地面,點擊該按鈕,正常是向上,按住ctrl后是向下。mirroring是鏡像工

具,可以選擇在某個方向上同時刷兩個對稱的。direction:方向,可以選擇法線方

向等。

第二個是柔化工具,用來將比較堅硬的頂角刷平。

第三個是將當前的物體刷上不同的顏色

但是需要選中的物體的材質是poly brush的材質,在poly brush的shader graph中直

接右鍵創(chuàng)建材質賦給對應物體即可。如果希望某塊場景整個變成某個顏色,直接點

擊Flood。這個功能可以用來規(guī)劃不同的區(qū)域。

第四個是將預制件刷到場景中

需要先將一些預制件放到Current Palette,需要刷哪些,放到Brush loadout中。按

住ctrl鍵再點擊是消除已經刷上的物體。在這個筆刷工具下,有一個選項Hit ? ? ?

Surface is Parent,可以將這個地形上的所有物體自動的整理到這個地形的子集中

第五個是紋理刷工具。

ProBulider

下載導入該插件,用來創(chuàng)建基本的地形,在Tools欄里可以看到(一般下載的插件

都在這里)

點擊三個點,選擇如圖,較為直觀,按住sfift,可查看具體的功能


對于有齒輪的選項,按住Alt再點擊齒輪可進行進一步的設置(調出了shape Tool窗

口)

使用plane來作為基本的地形,后面兩個參數(shù)是使用Probulider的主要原因,可以設

置頂點數(shù)目,數(shù)值越大,場景的細節(jié)越豐富,設置好后點擊build


ProGrids

需要先在項目設置的包管理器中將Enable Preview Packages勾選,然后在包管理器

中才可以搜索到這個包。安裝后在Tools欄打開該工具

ProGrids主要的做法是讓場景中多一些參考線


最下面的三個就是場景當中的參考線,選擇3D時,會顯示立體網格,格子的密度由

第一個數(shù)值決定,角色在移動時,會按照格子移動一個格子的距離。

地形一開始設置的是正方形切割,選中地形,在Probulider窗口中使用


將地形變成為三角形切割,適合Lowpoly風格。

第四節(jié)

打開導航窗口,windows---AI---Navigation。

導航,烘焙地圖

將需要進行烘焙的物體設置為Navigation static類型,這樣才可以被烘焙,并且在設置時不要將地面上的子物體也

設置為Navigation static類型,而是只將地面設置為Navigation static類型。

Navigation窗口下的子窗口

1:Agents,被導航的對象

2:Areas,導航區(qū)域設置

3:Object,可以對選中的物體進行導航相關的設置,可以設置是否可行走

4:Bake,烘焙子窗口,點擊Bake,場景中可通過的部分會被用藍色標識出來。Agent Radius,調整角色的半徑。Max Slope :可通過的最大坡度。Step Height :可通過的樓梯高度


為避免人物和樹木的穿模,可以將樹木所在的區(qū)域設置為不可通行,在層級窗口中直接搜索tree,選中所有的

tree,將其設置為Navigation static類型,然后選擇不可通行即可。


為需要控制的角色添加Nav ?Mesh Agent組件,添加后,選中添加后的角色, 調整其Agent的大小,使其符合人物

的大小。同時還要在NAvigation的Bake窗口中調整為同樣的值。


場景的障礙物(一般是可移動的物體)可以添加Nav Mesh Obstacle組件,可以選擇其形狀(box,Capsule),

該組件的Carve選項表示切割,就是可移動的物體在移動后,切割的區(qū)域仍然存在。


第五節(jié)

代碼控制人物移動

實現(xiàn)的思路是通過事件,讓某個物體通過某個函數(shù)來實現(xiàn),

1,編寫腳本,先來實現(xiàn)事件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;//使用事件的引用

[System.Serializable]
//序列化,因為EventVector3不是繼承自MonoBehaviour的,所以需要這個描述,才可以在Unity中顯示出來相應的事件
public class EventVector3 : UnityEvent<Vector3> { }
//EventVector3繼承自UnityEvent,尖括號內寫引用類型(Vector3)

public class MouseManager : MonoBehaviour
{
? ?public EventVector3 OnMouseClicked;
}


2,

NavMeshAgent.destination,這個方向就是讓角色移動到目標點

3,獲取鼠標點擊的目標點,方向是從攝像機的位置發(fā)射一條射線來看其碰撞到了世界坐標的哪個位置,查找手

冊,使用Camera.ScreenPointToRay()方法,還要使用Physics.Raycast()來計算射線碰撞的物體的相關信息。使用

RaycastHit來保存射線碰撞到的物體的信息。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;//使用事件的引用

[System.Serializable]
//序列化,因為EventVector3不是繼承自MonoBehaviour的,所以需要這個描述,才可以在Unity中顯示出來相應的事件
public class EventVector3 : UnityEvent<Vector3> { }
//EventVector3繼承自UnityEvent,尖括號內寫引用類型(Vector3)

public class MouseManager : MonoBehaviour
{
? ?RaycastHit hitinfo;//用來保存射線碰撞到的物體的相關信息
? ?public EventVector3 OnMouseClicked;
? ?void Update()
? ?{
? ? ? ?SetCursorTexture();
? ? ? ?MouseControl();
? ?}

? ?void SetCursorTexture()//設置指針的貼圖
? ?{
? ? ? ?Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

? ? ? ?if(Physics.Raycast(ray,out hitinfo))
? ? ? ?{
? ? ? ? ? ?//切換鼠標貼圖
? ? ? ?}
? ?}

? ?void MouseControl()
? ?{
? ? ? ?if(Input.GetMouseButtonDown(0) && hitinfo.collider != null)
? ? ? //鼠標左鍵點擊,但是有可能會點到地圖外面,所以要加上后面的判斷,點擊物體的碰撞體不為空
? ? ? ?{
? ? ? ? ? ?if (hitinfo.collider.gameObject.CompareTag("Ground"))
? ? ? ? ? ? ? ?OnMouseClicked?.Invoke(hitinfo.point);
? ? ? ? ? ?//當前事件不為空的時候使用Invoke執(zhí)行,OnMouseClicked,并且該事件的引用類型為Vector3,Raycast的point為碰撞點
? ? ? ?}
? ?}
}

注意不要忘記將地面的Tag改為Ground。

在角色的Nav Mesh Agent 屬性中,可以修改角色移動的速度以及角速度等,Stopping Distance是角色會移動到

距離指定位置的這個數(shù)值。這個功能適合在攻擊敵人的時候,由于武器有不同的長度,由此可以來控制。

Auto Braking:如果希望角色有一個緩慢停止的過程,則勾選。


第六節(jié)

上一節(jié)的人物控制的方法太過麻煩,使用單例模式會更加簡單

改進控制方法

新建人物控制腳本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;//導航相關的內容需要使用該命名空間

public class PlayerController : MonoBehaviour
{
? ?private NavMeshAgent agent;

? ?void Awake()//自身變量的獲取一般放在Awake中
? ?{
? ? ? ?agent = GetComponent<NavMeshAgent>();
? ?}

? ?void Start()
? ?{
? ? ? ?MouseManager.Instance.OnMouseClicked += MoveToTarget;
? ? ? ?//將MoveToTarget注冊。想要注冊一個方法,必須保持參數(shù)的一致,如在本例中,都只有一個Vector3類型的變量
? ?}

? ?public void MoveToTarget(Vector3 target)
? ?{
? ? ? ?agent.destination = target;
? ?}
? ?//總結:事件在mousemanager中觸發(fā),當點擊地面時,它就會執(zhí)行所有加入到OnMouseClicked的函數(shù)方法;
}

還要修改mousemanager腳本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//unity自帶的事件

public class MouseManager : MonoBehaviour
{
? ?public static MouseManager Instance;
? ?RaycastHit hitinfo;//用來保存射線碰撞到的物體的相關信息
? ?public event Action<Vector3> OnMouseClicked;//創(chuàng)建了一個事件
? ?//事件就是需要被人注冊使用,
? ?void Awake()//單例模式
? ?{
? ? ? ?if (Instance != null)
? ? ? ? ? ?Destroy(gameObject);

? ? ? ?Instance = this;
? ?}

? ?void Update()
? ?{
? ? ? ?SetCursorTexture();
? ? ? ?MouseControl();
? ?}

? ?void SetCursorTexture()//設置指針的貼圖
? ?{
? ? ? ?Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

? ? ? ?if (Physics.Raycast(ray, out hitinfo))
? ? ? ?{
? ? ? ? ? ?//切換鼠標貼圖
? ? ? ?}
? ?}

? ?void MouseControl()
? ?{
? ? ? ?if (Input.GetMouseButtonDown(0) && hitinfo.collider != null)
? ? ? ?//鼠標左鍵點擊,但是有可能會點到地圖外面,所以要加上后面的判斷,點擊物體的碰撞體不為空
? ? ? ?{
? ? ? ? ? ?if (hitinfo.collider.gameObject.CompareTag("Ground"))
? ? ? ? ? ? ? ?OnMouseClicked?.Invoke(hitinfo.point);
? ? ? ? ? ?//當前事件不為空的時候使用Invoke執(zhí)行,OnMouseClicked,并且該事件的引用類型為Vector3,Raycast的point為碰撞點
? ? ? ?}
? ?}
}

這樣就不需要每次拖拽人物到事件,然后選擇方法了。

鼠標貼圖修改

下面來修改鼠標的貼圖,先導入圖片資源,需要將其類型修改為cursor類型,然后才可用為鼠標貼圖。

代碼中添加兩部分內容

public Texture2D point, doorway, attack, target, arrow;
//定義后在unity中將相應的圖片資源拖拽到開放出來的變量里
//以及上節(jié)沒有寫的函數(shù)(if語句里的內容),切換鼠標貼圖,這里只寫了一個例子
? ? ? ? ? ?switch(hitinfo.collider.gameObject.tag)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?case "Ground":
? ? ? ? ? ? ? ? ? ?Cursor.SetCursor(target, new Vector2(16, 16), CursorMode.Auto);
? ? ? ? ? ? ? ? ? ?//16,16是根據(jù)圖片尺寸來決定的,這里的圖片大小為32
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}





















假期筆記1-6節(jié)的評論 (共 條)

分享到微博請遵守國家法律
诏安县| 廉江市| 闽侯县| 伽师县| 皋兰县| 石柱| 西乌珠穆沁旗| 广州市| 宁陵县| 江源县| 城固县| 辽宁省| 北碚区| 阿荣旗| 合阳县| 常德市| 长泰县| 昔阳县| 个旧市| 北碚区| 西畴县| 锡林郭勒盟| 武鸣县| 望都县| 保定市| 靖江市| 柘荣县| 益阳市| 洛川县| 晋中市| 大荔县| 夏邑县| 太谷县| 新巴尔虎右旗| 定结县| 兴和县| 永吉县| 承德市| 灌阳县| 黄冈市| 德清县|