五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

你瞅啥?——Animation Rigging 實現(xiàn)NPC視線跟隨

2020-03-27 17:58 作者:皮皮關做游戲  | 我要投稿

作者:Truly


在一些游戲中,如果玩家從NPC面前經過,NPC的頭會在一定的范圍內朝向玩家,這次我們用Animation Rigging來實現(xiàn)這個功能。實現(xiàn)效果如下:


一、基本組件

Animation Rigging是基于Animation C# Jobs構建的程序化動畫綁定系統(tǒng),可以在運行時更新動畫骨骼的運動行為。

在開始具體操作前,先簡單了解各個相關組件的作用(快速瀏覽即可)。

其實下邊的一堆定義,用人話(可能不太準確)來說大概就是:

用Rig Constraints設置想要的運動規(guī)則,Rig組件會把這些信息收集起來傳給Rig Builder,Rig Builder生成新的動作“覆蓋”到動畫狀態(tài)機上。

1.Bone Renderer

Bone Renderer可以在Scene窗口中顯示骨骼,只需把對應骨骼的添加進Transform列表,便能可視化列表內容,一個角色可有多個Bone Render組件。


2.Rig Constraints 綁定約束

Rig Constraints 的作用是程序化控制骨骼,約束對應骨骼的運動,Unity中預置了各種不同作用的約束,也可以自行編寫。

3.Rig

Rig用于收集子物體的Rig Constraints并生成列表,然后交給Rig Builder。Rig組件要與骨骼的根節(jié)點同一層級。

4.Rig Builder

Rig Builder用于生成Playable Graph,并且把Playable Graph添加到動畫狀態(tài)機中。Rig Builder需要與Animator組件在同一個Game Object上。


二 、導入資源包

1.本項目使用的是Unity 2019.3,打開資源包管理器:菜單欄Window > Package Manager

2. Advanced >?Show preview packages

3.選中Animation Rigging并安裝


三、實現(xiàn)功能

1.添加基本組件

(1)在Animator組件所在的Game Object上添加Rig Builder組件


(2)在骨骼根節(jié)點的同一層級新建空的Game Object,重命名為Rigs并添加Rig組件,然后把Rig拖進Rig Bulider中。

(3)在Rigs Game Object下新建子物體,重命名為HeadAim并添加Multi-Aim Constraint組件。Multi-Aim Constraint可以旋轉Game Object使其某個軸朝向目標。


2.設置Multi-Aim Constraint組件參數(shù)

(1)Weight(權重):1代表被約束的對象會完全根據(jù)下邊的設置去運動,本次將在腳本中控制權重。

(2)Constrained Object(被約束的對象):把角色骨骼的Head節(jié)點拖進Constrained Object。意味著Head節(jié)點將會受到控制。

(3)Aim Axis:Z,把Head節(jié)點的Z軸朝向目標。

(4)Source Objects(可理解為目標對象):在角色下新建空Game Object,重命名為AimTarget并拖進Source Objects欄。第三部分將會通過腳本控制AimTarget的Transform,從而實現(xiàn)NPC視線跟隨效果。

(5)Constrained Axes(約束軸):僅勾選Y軸,因為面向玩家只需繞Y軸旋轉頭部。

NPC頭部繞Y軸旋轉,面朝AimTarget

(6) Max Limit(限制最大旋轉角度):70,如果不進行角度限制且玩家站在NPC背后,那么這可能會變成一個恐怖游戲......


3.編寫腳本

(1)在編寫腳本前,先在玩家角色下新建一個空Game Object并重命名為LookTrans,調整到大概頭部的位置(用作NPC瞄準的參考Transform)。接著把玩家的Tag改為Player。

(2)新建腳本,頂部添加Using UnityEngine.Animations.Rigging;

(3)①聲明變量,代碼如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.Animations.Rigging;

?

public class NPC : MonoBehaviour

{

??? public Transform aimTarget; //瞄準對象,Source Objects

??? public Transform lookTrans; //玩家身上的瞄準參考Transform

??? public MultiAimConstraint multiAimConstraint;?? //約束

??? public float aimSpeed = 4f; //發(fā)現(xiàn)玩家時瞄準速度(調節(jié)權重)

?

??? public Transform headTrans; //畫線相關

?

??? void Start()

??? {

??????? multiAimConstraint.weight = 0;

??? }

?

②拖入對應變量賦值


(4)在NPC角色中添加一個Sphere Collider,勾選Is Trigger并且調節(jié)大小,用其模擬NPC的探測范圍。

(5)當玩家進入探測范圍時,把lookTrans設置為玩家身上的LookTrans;當玩家退出探測范圍時,把lookTrans設置為null.

? ? private void OnTriggerEnter(Collider other)

??? {

??????? if (other.CompareTag("Player"))

??????? {

??????????? lookTrans = other.transform.Find("LookTrans");

??????? }

??? }

?

??? private void OnTriggerExit(Collider other)

??? {

??????? if (other.CompareTag("Player"))

??????? {

??????????? lookTrans = null;

??????? }

??? }

?

(6)在LateUpdate()中根據(jù)LookTrans更新aimTarget的位置,同時調節(jié)Multi-Aim Constraint的權重。


private void LateUpdate()

{

??? if (lookTrans)

??? {

??????? aimTarget.SetPositionAndRotation(lookTrans.position, lookTrans.rotation);

??????? multiAimConstraint.weight = Mathf.Clamp01(multiAimConstraint.weight + aimSpeed * Time.deltaTime);

??? }

??? else

??? {

??????? multiAimConstraint.weight = Mathf.Clamp01(multiAimConstraint.weight - aimSpeed * Time.deltaTime);

??? }

?

??? Debug.DrawLine(headTrans.position, headTrans.position + 3.5f * headTrans.forward, Color.red);

}

?


結語:利用Animation Rigging實現(xiàn)NPC視線跟隨就介紹到這里,Unity還預置了很多好用的Rig Constraints(例如Two Bone IK Constraint:https://docs.unity3d.com/Packages/com.unity.animation.rigging@0.2/manual/constraints/TwoBoneIKConstraint.html?可以簡便地制作手部或者腳部的IK),
有興趣的小伙伴可以參考官方文檔自行了解。

官方文檔:https://docs.unity3d.com/Packages/com.unity.animation.rigging@0.2/manual/index.html

鏈接:https://pan.baidu.com/share/init?surl=IK89EfBHlZEpt12_dkAYFQ

提取碼:jpka


咱們的游戲開發(fā)交流群也歡迎強勢插入:869551769

希望參與線下游戲開發(fā)學習的,歡~~~~~~迎訪問:levelpp.com/


你瞅啥?——Animation Rigging 實現(xiàn)NPC視線跟隨的評論 (共 條)

分享到微博請遵守國家法律
宜良县| 自贡市| 云阳县| 体育| 嘉鱼县| 迁安市| 阿拉尔市| 定结县| 泗水县| 株洲县| 郧西县| 武陟县| 聂拉木县| 浪卡子县| 新河县| 大邑县| 阿拉善左旗| 武夷山市| 平定县| 留坝县| 临清市| 逊克县| 富裕县| 鄂伦春自治旗| 湾仔区| 开封县| 永和县| 南投市| 九江县| 化德县| 永顺县| 漾濞| 济阳县| 清水河县| 周至县| 南郑县| 博野县| 乌鲁木齐市| 苏州市| 旬阳县| 太保市|