Unity - AI

 

 

  • 视觉感知系统

全方位无死角视觉:

  1. 利用Vector3.Distance()判断距离是否在视觉范围内;

半圆弧视觉:

  1. 利用Vector3.Distance()判断距离是否在视觉范围内;
  2. 利用Vectoe3.Angle(机器人前方,从机器人指向玩家的向量)得到夹角(<90°),判断这个夹角是否在视觉角度/2内,若在视觉角度/2内,则认为是看到了,否则反之。
  3. 这个视觉看不到看人 还会受到障碍物影响,在确认玩家在视觉范围内时,还要发射一条射线判断是否有障碍物挡着,若射线检测到的是玩家,则表明玩家在视野内,若碰到的是障碍物则不会看到玩家,也就不会触发看到玩家后的操作了。
     
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VisualSense : MonoBehaviour {
    public float viewDistance = 3;
    public float viewAngle = 90;    
    public GameObject target;
    // Use this for initialization
    void Start () {
            }
        // Update is called once per frame
    void Update () {
        if (Vector3.Distance (target.transform.position , transform.position) <= viewDistance) {
            Vector3 dir = target.transform.position - transform.position;  
             float angle = Vector3.Angle (dir, transform.forward);
            if (angle <= viewAngle/2) {
                Debug.Log ("视野范围内");
            }
        }
    }
}
  • 听觉感官系统

  1. 玩家跑动Bool变量,当玩家跑动时,为true,否则为false;
  2. 听觉最大距离:利用Unity寻路系统Nav,将2个点之间的最短距离计算出,然后判断这个最短距离是否 小于 听觉最大距离,若小于,则去判断玩家跑动Bool变量是否为true,若为true就表示听到了。这2点的意思是 机器人位置和玩家位置,因为我们的听觉是会受到障碍物干扰的,所以在计算2点距离的时候就不能使用简单的Vector3.Distance了,而是使用导航系统Nav的计算方法,或者根据你自己的寻路系统方法来计算2点的最短路径。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class NavPath : MonoBehaviour {
    
    private NavMeshAgent agent;
    public Transform end;
    private void Start()
    {
        agent = GetComponent();
        DrawPath();
    }
 
 
    private void DrawPath()
    {
        float smallestLength=0;
        List path = GetPath(end.position);
        Vector3[] pathArray = path.ToArray();
        for(int i=0;i GetPath(Vector3 endPoint)
    {
        //agent.SetDestination(endPoint);          
        NavMeshPath navMeshPath = new NavMeshPath();
        agent.CalculatePath(endPoint, navMeshPath);
        List path = new List();
        for(int i=0;i

 

 

你可能感兴趣的:(AI)