1. 程式人生 > >Unity3D AI角色移動和自動跟隨

Unity3D AI角色移動和自動跟隨

AI角色按照一定的移動邏輯進行移動時,AI邏輯處理角色需要移動的位置,還需要移動邏輯實時處理角色的當前速度和角度。官方的示例中角色的移動是通過設定速度之後,依靠動畫的位移來實現的,所以程式碼中只需要設定角色的速度和角度即可。Animator控制元件中的Apply Root Motion需要勾選,這樣才能使用動畫中的位移,而不需要在程式碼中更新角色座標,勾選之後也不能通過程式碼更新了。

這裡寫圖片描述

這裡寫圖片描述

其中的nav是繫結在角色身上的navMeshAgent。deadZone是忽略區間,當實際角度和目標角度的差值在忽略區間內時就不再改變方向了,這樣可以避免走曲線。

這裡的normal法向量,叉乘和點乘是為了確定角度的正負。
animSetup.Setup()中的方法主要是:
anim.SetFloat(“Speed”,0,speedDampTime,Time.deltaTime);
anim.SetFloat(“AnglarSpeed”, angleRad,anglarSpeedDampTime,Time.deltaTime);
這兩個方法會漸變的設定引數,也就會有一個加速的過程,不會顯得突兀。

navMeshAgent的作用是給定一個位置可以告訴我們該怎麼走,但是具體怎麼走過去,速度,方向的設定還是需要我們自己來設定的,就像一個複雜的A星演算法一樣。

有時候會有一些自動跟隨的需要,比如寵物跟著主角走,思路就是將主角的空間位置設定為移動目標,通過update裡的迭代去接近目標,朝向也是同樣處理,朝向上的接近使用:Quaternion.Slerp(self.transform.rotation, target.transform.rotation, Time.deltaTime * dirSpeed);
移動上的接近使用:Vector3.MoveTowards(self.transform.position, target.transform.position, Time.deltaTime * moveSpeed);
如果要讓跟隨更自然一些,可以在主角移動,每次轉向的時候傳給寵物一個目標,寵物按順序將這些目標位置存放在一個列表裡,按照列表裡的順序移動,就像重走了一遍主角的路線一樣。

程式碼塊

寵物跟隨示例,這裡僅展示下大致方法:

using UnityEngine;

public class PetMovement : BaseMovement
{
    void Update()
    {
        Player ownerPlayer = pet.OwnerPlayer;
        GameObject target = GetTarget(ownerPlayer );
        if (target != null)
        {
            float distance = Vector3.Distance(transform.position, target.transform.position);
            PetInfo petInfo = GetPetInfo(pet.ID);
            var dir = target.transform.position - transform.position;
            int
skillRange = petInfo.skillRange; if (skillRange < distance) // 當和主人之間的距離超過技能距離時跟隨 { Action.ChangeAction(CAction.RunFront);// 改變動畫 var destPos = transform.position + dir.normalized * (distance - skillRange + 1); transform.position = Vector3.MoveTowards(transform.position, destPos, Time.deltaTime * move_Speed); } var rotation = Quaternion.LookRotation(dir); // 獲得 目標方向 transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * 5); // 差值 寵物朝向趨向目標 return; } } }

相關推薦

Unity3D AI角色移動自動跟隨

AI角色按照一定的移動邏輯進行移動時,AI邏輯處理角色需要移動的位置,還需要移動邏輯實時處理角色的當前速度和角度。官方的示例中角色的移動是通過設定速度之後,依靠動畫的位移來實現的,所以程式碼中只需要設定角色的速度和角度即可。Animator控制元件中的Apply

unity3D:遊戲分解之角色移動相機跟隨

ini img form static 錄像 void 方法 lda okr 遊戲中,我們經常會有這樣的操作,點擊場景中某個位置,角色自動移動到那個位置,同時角色一直是朝向那個位置移動的,而且相機也會一直跟著角色移動。有些遊戲,鼠標滑動屏幕,相機就會圍繞角色旋

unity 實現滑鼠控制角色移動角色頭部的血條顯示

在很多專案中,都有這樣的場景就是滑鼠點選一個位置,滑鼠所控制的玩家就會移動到指定的位置處,還有就是在戰鬥過程中任務頭上血條的UI跟隨顯示,今天就講一下如何實現通過滑鼠控制人物移動和人物頭部血條的顯示。 一、首先是搭建簡易的3D場景 這裡使用Terrain地形元件,安裝官方

Unity3d 控制角色移動 鍵盤按鍵與虛擬搖桿

先上角色移動指令碼 using UnityEngine; using System.Collections; public class PlayerMove:MonoBehaviour

Unity3D 利用character controller控制人物在場景中移動利用Navmesh Agent設定人物自動尋路

考慮碰撞的情況下控制人物的行走 在考慮碰撞的情況下,控制人物在場景中移動一般有兩種方法,一種是利用剛體Rigidbody,然後通過施加力或者改變速度來控制人物的移動,另外一種方法就是利用unity自帶的character controller來方便的呼叫函式直

Stealth行動中角色移動攝像機的跟隨

看了官網的案例真的是學了不少的東西,就像這個角色移動官網使用了四元素來編寫角色的轉彎。各位大佬原諒我這個小白的無知 先附上我寫的程式碼 發圖  /// <summary> /// 控制角色的移動類 /// </summary> public class Pla

Unity3d相機跟隨角色移動

using UnityEngine; using System.Collections; public class follwCam : MonoBehaviour { public Transf

移動端APP第一次登入自動登入流程

App登陸儲存資料流程App因為要實現自動登陸功能,所以必然要儲存一些憑據,所以比較複雜。  App登陸要實現的功能:  密碼不會明文儲存,並且不能反編繹解密; 在伺服器端可以控制App端的登陸有效性,防止攻擊者拿到資料之後,可以長久地登陸; 使用者如果密碼沒有洩露

Unity3d--第三人稱角色移動控制

第三人稱的角色移動控制方案有很多種: 前提:相機Camera已經為角色Player的子物體【自行調節第三人稱角度】 1. rigidbody.velocity() : 通過控制剛體的速度 來實現對角色的移動控制 public GameObject

Unity3D遊戲製作 移動平臺上的角色陰影製作

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

專案部署之nginx實現PC端移動自動跳轉

假設PC端域名為 www.abc.com     移動端域名為m.abc.com PC端nginx配置檔案server中加入如下程式碼: if ($http_host !~ "^www.abc.com$") { rewrite ^(.*) http://ww

asp.net Core 使用過濾器判斷請求客戶端是否為移動端,並實現PC端移動端請求對映自動跳轉

很多時候我們做網站時單純的用bootstrap等前端框架實現的前端自適應帶給使用者的體驗並不太好,所以為了提高使用者體驗會專門針對PC端網頁重新設計一套移動端網頁,但是怎麼才能做到在移動端訪問PC頁面的時候返回對應的移動端頁面,而不是PC端頁面呢?下面我們就簡單的進行介紹。主要技術是asp.net core。

角色控制器控制移動碰撞

Unity3d中CharacterController的移動和碰撞分析 這個地方值得記錄一下.之前看教程的時候沒注意,後來才發現這裡涉及到很重要的角色移動方式和碰撞檢測問題.可惜今天沒時間了,等之後有時間了再來補上. 有必要仔細檢視一下官方文件,養成習慣. Character Contro

圓點自動跟隨滑鼠移動

思路:在畫布上繪製一個圓點,在移動滑鼠時用背景圖覆蓋上一次的圖片,然後再在這張背景圖上繪製一個原點,利用定時器每隔10ms進行一次重新整理<!doctype html><html><head> <title>test</title> &l

cocos2d-x 如何使用CCProgressTimer作為血條,實現跟隨怪物進行移動自動掉血,然後死亡。

1、如何使用CCProgressTimer  2、如何跟隨怪物  3、如何掉血和死亡  4、結構層次。  //注意加紅色部分 樣例程式碼如下: 怪物的定義: class Enemy :public CCSprite { public:     Enemy(CCPoint

Unity3D之滑鼠控制角色移動與奔跑示例

最新補充。          一般在做滑鼠選擇時是從攝像機向目標點發送一條射線,然後取得射線與物件相交的點來計算3D目標點。後來在開發中發現了一個問題(射線被別的物件擋住了),就是如果主角的前面有別的遊戲物件擋著。此時如果使用射線的原理,滑鼠選擇被檔的物件,這樣主角就

自動跟隨機器人教程(四)軟體部分 樹莓派+電腦 控制小車移動

接下來可以說是本教程的核心內容了,不可能在一篇文章中講完,首先講一個比較初級的程式。樹莓派可以接收同一個區域網上電腦的連線,並且電腦鍵盤上發出的前後左右的控制訊號通過網路發向樹莓派後,樹莓派再經過串列埠發向Arduino,對電機進行控制。 樹莓派需要實現的程式分為兩部分

Android定位&地圖&導航——基於百度地圖移動獲取位置自動定位

public class MainActivity extends Activity { public MyApplication app; static MapView mMapView = null; public MKMapViewListener mMapListen

[UE4]角色藍圖CharacterBlueprint中設定物件往移動方向自動轉向

角色藍圖CharacterBlueprint中,設定物件沿Z軸隨移動方向自動轉向: bOrientRotationToMovment = true; bUseControllerRotationYaw = false; bOrientRotationToMovme

Unity3D開發敵人自動攻擊自動尋路

簡介:當製作動作類攻擊遊戲時,會用到敵人的自動攻擊及自動尋找攻擊目標,如何實現自動攻擊和自動尋路呢?下面簡單的講解我對這方面的理解。 當你已經匯入了敵人的模型並製作好了敵人動畫控制狀態機,接下來