07 Unity3D人工智能AI-路径跟随
2016-10-22 15:17
211 查看
using UnityEngine; using System.Collections; public class SteeringFollowPath : Steering { public GameObject[] waypoints = new GameObject[4]; private Transform target; private int currentNode; private float arriveDistance; private float sqrArriveDistance; private int numberOfNodes; private Vector3 force; private Vector3 desiredVelocity; private Vehicle m_vehicle; private float maxSpeed; private bool isPlanar; public float slowDownDistance; void Start () { numberOfNodes = waypoints.Length; m_vehicle = GetComponent<Vehicle>(); maxSpeed = m_vehicle.maxSpeed; isPlanar = m_vehicle.isPlanar; currentNode = 0; target = waypoints[currentNode].transform; arriveDistance = 1.0f; sqrArriveDistance = arriveDistance * arriveDistance; } /* public override Vector3 Force() { force = new Vector3(0,0,0); Vector3 dist = transform.position - target.position; //Vector3 dist = target.position - transform.position; if (isPlanar) dist.y = 0; if (currentNode == numberOfNodes - 1) { print("now the last point!"); if (dist.magnitude > slowDownDistance) { desiredVelocity = (-dist.normalized) * maxSpeed; force = desiredVelocity - m_vehicle.velocity; } else { desiredVelocity = (-dist) - m_vehicle.velocity; force = desiredVelocity - m_vehicle.velocity; } return force; } if (dist.sqrMagnitude < sqrArriveDistance) { if ( currentNode < numberOfNodes -1) { currentNode ++; target = waypoints[currentNode].transform; } } desiredVelocity = (target.position - transform.position).normalized * maxSpeed; if (isPlanar) desiredVelocity.y = 0; force = desiredVelocity - m_vehicle.velocity; return force; }*/ public override Vector3 Force() { force = new Vector3(0,0,0); Vector3 dist = target.position - transform.position; if (isPlanar) dist.y = 0; if (currentNode == numberOfNodes - 1) { if (dist.magnitude > slowDownDistance) { desiredVelocity = dist.normalized * maxSpeed; force = desiredVelocity - m_vehicle.velocity; } else { desiredVelocity = dist - m_vehicle.velocity; force = desiredVelocity - m_vehicle.velocity; } } else { if (dist.sqrMagnitude < sqrArriveDistance) { currentNode ++; target = waypoints[currentNode].transform; } desiredVelocity = dist.normalized * maxSpeed; force = desiredVelocity - m_vehicle.velocity; } return force; } }
相关文章推荐
- unity3d AI 学习--个体行为操控(1)--具体行为类(3)-路径跟随和躲避障碍
- Unity3DAI行为------路径跟随
- Unity3D - 路径的编辑与跟随路径的移动
- Unity3d中第三人称摄像机跟随的实现
- Unity3D各平台Application.xxxPath的路径
- 自动行为操控Steering(八)—路径跟随(单体操控)
- Unity3D自带Demo AngryBots路径
- Unity3D 控制角色移动,转向和自动跟随
- 基于Unity3D的循环路径的实现
- 【Unity3D自学记录】用NavMesh实现鼠标点击跟随
- Unity3D简单实现游戏对象跟随鼠标旋转
- Vision引擎组建系统中Lua 脚本与跟随路径介绍
- unity3d 根据指定的Assets下的文件夹路径 返回这个路径下的所有文件名
- Unity3D 移动平台Path对应路径以及文件路径权限
- Unity3D实践系列07,组件的启用或禁用开关,物体的的可见或不可见开关,以及相应事件
- unity3d 摄像机跟随角色时被物体遮挡解决方案
- 01 Unity3D人工智能AI-靠近
- Unity - 粒子系统跟随路径移动
- [Unity3D]A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)
- Unity3d相机跟随角色移动