Unity3D游戲-鼠標(biāo)點(diǎn)擊使角色移動(dòng)避開障礙物
在Unity的世界里,當(dāng)你輕點(diǎn)鼠標(biāo),角色仿佛被賦予了新的使命,沿著一條無形的軌跡,向著地圖上的目標(biāo)點(diǎn)進(jìn)發(fā)。每一次移動(dòng),不僅是簡單的位移,更是對(duì)未知的探索。這種交互,讓玩家與游戲世界緊密相連,仿佛自己就是那個(gè)掌控命運(yùn)的魔法師,用指尖繪制出角色的冒險(xiǎn)之路......
安裝導(dǎo)航網(wǎng)格
1.打開package Manager包管理器,找到并選擇Unity Registry。

2.在搜索框里輸入“AI”,找到AI Navigation,然后點(diǎn)一下“安裝”按鈕。(像我這里,因?yàn)橹耙呀?jīng)裝過了,所以沒有顯示“安裝”按鈕。如果你是第一次裝,就會(huì)看到一個(gè)“安裝”按鈕,點(diǎn)一下就能裝上了)

為角色和地圖設(shè)置和烘培導(dǎo)航網(wǎng)格
1.我們首先需要為角色添加一個(gè)導(dǎo)航組件,選中角色對(duì)象,然后在其上添加一個(gè)Nav Mesh Agent組件。
2.設(shè)置角色的碰撞框(角色身上綠色的圓柱型框框),讓其盡量去貼近我們的角色。

3.接著我們?yōu)榈匦翁砑訉?dǎo)航網(wǎng)格。選中地形Terrain,然后點(diǎn)擊Add Component,添加Nav Mesh Surface組件。
4.設(shè)置Default Area的屬性為Walkable(可行走的)。
5.點(diǎn)擊“Bake”烘培。

6.(可選)如果需要額外添加“不可行走的”障礙物。選中該障礙物對(duì)象,點(diǎn)擊Add Component,為其添加一個(gè)NavMeshModifier的組件。
7.(可選)勾選上Override Area,選擇Not Walkable(不可行走的)。

8.(可選)重新烘培地形。
編寫移動(dòng)功能的腳本
1.在Assets文件夾下創(chuàng)建一個(gè)空文件夾,可命名為Scripts(名稱可自定),用于存放腳本。接著,在Scripts文件夾中創(chuàng)建C#腳本。

2.實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊的移動(dòng)功能
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class PlayerController : MonoBehaviour
{
//獲取到導(dǎo)航網(wǎng)格的代理
private NavMeshAgent agent;
//動(dòng)畫器
private Animator anime;
//聲明射線檢測結(jié)果的變量
RaycastHit hitByScreen;
void Start()
{
agent = transform.GetComponent();
anime = transform.GetComponent();
hitByScreen = new RaycastHit();
}
void Update()
{
//當(dāng)鼠標(biāo)左鍵按下時(shí)觸發(fā)。0代表左鍵,1代表右鍵
if (Input.GetMouseButtonDown(0))
{
//創(chuàng)建一條從鼠標(biāo)在屏幕上的位置射出到接觸到場景物體的射線
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//判斷射線是否碰到場景的物體
if (Physics.Raycast(ray, out hitByScreen))
{
//判斷射線碰撞到的是否為障礙物(這里的6就是我們的圖層編號(hào),第6是障礙物圖層)
if (hitByScreen.collider.gameObject.layer == 6)
{
//獲取到碰撞到的障礙物的位置,然后把位置加上大小,就可以獲取到障礙物邊緣的坐標(biāo)點(diǎn)(也就是障礙物前面的地面上的點(diǎn))
hitByScreen.point = hitByScreen.collider.gameObject.transform.position + hitByScreen.collider.gameObject.transform.localScale;
//把這個(gè)點(diǎn)設(shè)置為目的地,角色就會(huì)在障礙物前面停下
agent.SetDestination(hitByScreen.point);
}
else
{
//把射線碰到物體的點(diǎn)設(shè)置為目的地點(diǎn),并且角色會(huì)向目的地移動(dòng)
agent.SetDestination(hitByScreen.point);
}
//角色開啟跑步動(dòng)畫
anime.SetBool("Run", true);
}
}
//如果角色到達(dá)指定地點(diǎn)就停止跑步動(dòng)畫
if (hitByScreen.point != null && transform.position.x == hitByScreen.point.x && transform.position.z == hitByScreen.point.z) {
//角色停止跑步動(dòng)畫
anime.SetBool("Run", false);
}
}
}測試和運(yùn)行
經(jīng)過對(duì)案例的運(yùn)行測試,成功實(shí)現(xiàn)在“無障礙物”地圖上點(diǎn)擊鼠標(biāo)左鍵,角色朝鼠標(biāo)位置移動(dòng)。在“有障礙物”地圖上點(diǎn)擊障礙物,角色成功移動(dòng)到障礙物前停下,并且停止跑步動(dòng)畫。

到此這篇關(guān)于Unity3D游戲-鼠標(biāo)點(diǎn)擊使角色移動(dòng)避開障礙物的文章就介紹到這了,更多相關(guān)Unity3D游戲-鼠標(biāo)使角色移動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WinForm項(xiàng)目開發(fā)中NPOI用法實(shí)例解析
這篇文章主要介紹了WinForm項(xiàng)目開發(fā)中NPOI用法,有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08
C#采用OpenXml實(shí)現(xiàn)給word文檔添加文字
這篇文章主要介紹了C#采用OpenXml實(shí)現(xiàn)給word文檔添加文字的方法,包括了用法的實(shí)例分析,是非常實(shí)用的技巧,需要的朋友可以參考下2014-09-09
C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中
這篇文章介紹了C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
C# WPF 建立無邊框(標(biāo)題欄)的登錄窗口的示例
這篇文章主要介紹了C# WPF 建立無邊框(標(biāo)題欄)的登錄窗口的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2020-12-12

