日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互

發布時間:2023/12/10 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.導入unity3D商店資源

① 直接進入unity商店下載

Unity Asset Store - The Best Assets for Game Makinghttps://assetstore.unity.com/② 在3D下面的動畫欄,點進去然后找些自己喜歡的模型就好了,可以通過排序“價格由低到高”篩選些免費的模型。

下面這個是我用到的模型:

Melee Warrior Animations FREE | 3D Animations | Unity Asset Store

③ 點擊右邊添加到我的資源,再點擊在unity打開后,就能在unity的PackageManager里面看見導入的資源。需要注意的是網頁端登陸的賬號和你unity登陸的賬號要一樣。

?④ 點擊Download下載好之后,再點擊Import加載即可。如果這個窗口沒自動跳出來,可以通過unity上方的windows下的PackageManager打開。

?

2.導入模型之后的使用

①?引入后在project欄下的Assets文件夾下可以看到我們導入的模型。需要注意的是有的模型導入之后沒有動畫,是需要自己創建動畫才能實現人物動作的。

?② 我們現在在SampleScene里面創建一個plane地面(要不要無所謂),將導入在Assets/Kevin Iglesias/prefabs/Characters位置下面的模型swordwarrior放在SampleScene里面。

④ 點擊SwordWarrior,在其Inspector下面的Add Compent給他添加一個Rigidbody(剛體)屬性。記得use Gravity別點,不然會掉下去(如果沒地面的話)。

?3.設置奔跑動畫

①?在SwordWarrior上面我們可以看到Animator這一欄,這一欄就是控制他動畫的地方。輕點Controller后的,可以跳到相應的位置,查看動畫的狀態圖。這個東西存放在Assets/Kevin Iglesias/AnimatorController/1H下面。

② 點擊之后可以看到一個狀態圖,可以簡單的理解成,你可以設置一些條件,如果滿足這些條件模型將不斷切換各種狀態。這里的狀態就是對應游戲中的各種動作。?

?③ 我們在這個位置新建一個AnimatorController,用來存放我們自己定義的跑步和攻擊動作的切換。

④ 注意打開我們新建的AnimatorController,在我們導入的資源的Assets/Kevin Iglesias/Animations/OneHanded下將模型的平常待機動畫拖入其中

【這個頁面也有點反人類,滾輪滑動控制界面大小,通過按住鼠標滾輪中鍵實現界面的拖動】

?

?⑤ 在Movement下找到奔跑的動畫,同樣拖拽進去,這里會有很多的狀態,我們僅需要forward即可。

?⑥ 右鍵狀態圖,再點擊MakeTransition生成連線。

?

?⑦ 設置狀態切換參數,點擊Animator下面的加號生成一個bool參數,我們通過這個參數實現不同狀態(動作)切換的控制。

?⑧ 取名為Run,點擊狀態圖idle狀態到forward狀態的連線,在右邊出現的窗口的Conditions【通過這里面的條件控制狀態切換】下面點擊加號將之前設置的Run放上去,值取true。另一根連線取值同樣為Run,值取為false。

翻譯一下就是:當Run值為true時,狀態從idle切換到forward,當Run值為false時,狀態從forward切換到idle。實現跑步和正常待機狀態的切換。

?

??4.設置奔跑代碼

① 在設置好奔跑的狀態切換之后,我們將創建的這個AnimatorController放到我們模型中Animator欄目下的Controller上。?

② 在Assets中新建一個Scripts文件夾,在文件夾中新增一個名叫Move的C#腳本文件?,并將這個腳本文件掛載載我們的模型上。【直接拖進去即可】

③ 給出實現奔跑的代碼:

public class Move : MonoBehaviour {// 控制物體的移動速度public float moveSpeed = 5f;// 剛體屬性private Rigidbody rb;// 動畫屬性private Animator animator;// 位置移動private Vector3 targetPos;// 控制是否移動的bool變量private bool isMove;// 在開始的一幀執行的函數void Start(){// 獲取當前物體的剛體屬性rb = GetComponent<Rigidbody>();// 獲取當前物體的動畫屬性animator = GetComponent<Animator>();}// 刷新的每一幀執行的函數void Update(){// 接收鍵盤操作函數Run();// 移動狀態if (isMove){// 這里的Run是之前我們創建的狀態轉換的那個參數的名字,根據自己的設置修改animator.SetBool("Run", isMove);// 實現人物的移動rb.velocity = transform.forward * moveSpeed * 1.1f;// 在距離目標的地點很近的時候(0.1f),停止移動if (Vector3.Distance(transform.position, targetPos) < 0.1f){rb.velocity = Vector3.zero;isMove = false;animator.SetBool("Run", isMove);}}}void Run(){// 處理點擊w前移邏輯if (Input.GetKey(KeyCode.W)){//記錄下目標點targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + 1);// 轉向transform.LookAt(targetPos);//改變移動StateisMove = true;}// 處理點擊a左移邏輯if (Input.GetKey(KeyCode.A)){//記錄下目標點targetPos = new Vector3(transform.localPosition.x - 1, transform.localPosition.y, transform.localPosition.z);// 轉向transform.LookAt(targetPos);//改變移動StateisMove = true;}// 處理點擊s后移邏輯if (Input.GetKey(KeyCode.S)){//記錄下目標點targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z - 1);// 轉向transform.LookAt(targetPos);//改變移動StateisMove = true;}// 處理點擊D右移邏輯if (Input.GetKey(KeyCode.D)){// 記錄下目標點targetPos = new Vector3(transform.localPosition.x + 1, transform.localPosition.y, transform.localPosition.z);// 轉向transform.LookAt(targetPos);// 改變移動狀態isMove = true;}} }

?④ 到這里能實現模型的奔跑和平常動作的切換了,但還有個小問題,就是按鍵運動的時候,模型有時候會很詭異的停止,這是因為有一個動畫持續時間的設置,將動畫中的HasExitTime的?取消掉即可。?

?

?5.設置攻擊動畫

① 攻擊動畫和奔跑動畫不同,這里我們設置能從任何狀態切換到攻擊狀態。

② 新建一個trigger來監聽這個狀態切換。

③ 取出位于Assets/Kevin Iglesias/Animations/OneHanded/RightHand下面的攻擊動畫。

④ 將其切換狀態條件設置為我們新建的Trigger,“Attack”。

?④ 將attack狀態與idle狀態和forward狀態狀態相連,從attack狀態轉化到forward狀態轉換條件設為Run為true,從attack狀態轉化到idle狀態轉換條件設為Idle為true。這里idle要再自己新建一個bool參數的,并打上?。【這里不點擊?就需要自己去代碼里初始化設置】

??5.設置攻擊代碼

① 修改之前創建的腳本文件代碼即可:

這里設置的是點擊J即進行攻擊操作。

using System.Collections; using System.Collections.Generic; using UnityEngine;public class Move : MonoBehaviour {// 控制物體的移動速度public float moveSpeed = 5f;// 剛體屬性private Rigidbody rb;// 動畫屬性private Animator animator;// 位置移動private Vector3 targetPos;// 控制是否移動的bool變量private bool isMove;// 控制是否攻擊的bool變量private bool isAttack;// 在開始的一幀執行的函數void Start(){// 獲取當前物體的剛體屬性rb = GetComponent<Rigidbody>();// 獲取當前物體的動畫屬性animator = GetComponent<Animator>();}// 刷新的每一幀執行的函數void Update(){// 接收鍵盤操作函數Run();// 移動狀態if (isMove){// 這里的Run是之前我們創建的狀態轉換的那個參數的名字,根據自己的設置修改animator.SetBool("Run", isMove);// 實現人物的移動rb.velocity = transform.forward * moveSpeed * 1.1f;// 在距離目標的地點很近的時候(0.1f),停止移動if (Vector3.Distance(transform.position, targetPos) < 0.1f){rb.velocity = Vector3.zero;isMove = false;animator.SetBool("Run", isMove);}}// 攻擊狀態if (isAttack){animator.SetBool("Attack", isAttack);isAttack = false;}}void Run(){// 處理點擊w前移邏輯if (Input.GetKey(KeyCode.W)){//記錄下目標點targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + 1);// 轉向transform.LookAt(targetPos);//改變移動StateisMove = true;}// 處理點擊a左移邏輯if (Input.GetKey(KeyCode.A)){//記錄下目標點targetPos = new Vector3(transform.localPosition.x - 1, transform.localPosition.y, transform.localPosition.z);// 轉向transform.LookAt(targetPos);//改變移動StateisMove = true;}// 處理點擊s后移邏輯if (Input.GetKey(KeyCode.S)){//記錄下目標點targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z - 1);// 轉向transform.LookAt(targetPos);//改變移動StateisMove = true;}// 處理點擊D右移邏輯if (Input.GetKey(KeyCode.D)){// 記錄下目標點targetPos = new Vector3(transform.localPosition.x + 1, transform.localPosition.y, transform.localPosition.z);// 轉向transform.LookAt(targetPos);// 改變移動狀態isMove = true;}// 處理攻擊事件if (Input.GetKey(KeyCode.J)){//設置triggeranimator.SetTrigger("Attack");}} }

總結

unity的一些操作真的太容易忘了,而且我采用的這種寫法和動畫的設置肯定不是最有效率最專業的,只能說慢慢在實踐中學習吧。說實話能看見自己找的模型動起來還是挺有成就感的。越接觸這些東西,就越覺得真的現在的獨立開發者真的太難太辛苦了。

總結

以上是生活随笔為你收集整理的Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。