unity路径跟随的算法
2016-05-26 20:32
405 查看
using UnityEngine; using System.Collections; public class EnemyMove : MonoBehaviour { public Transform[] EnemyMovePoints; private float speed = 0.5f; private float mass = 1.0f; public bool isLoop = true; private float Radius = 10.0f; private float curSpeed; private int curPointIndex; private int pointsLenth; private Vector3 targetPoint; private Vector3 velocity; private Vector3[] points; public float Length { get { return points.Length; } } // Use this for initialization void Start() { points = new Vector3[EnemyMovePoints.Length]; for (int i = 0; i < EnemyMovePoints.Length; i++) { points[i] = EnemyMovePoints[i].position; } pointsLenth = points.Length; curPointIndex = 0; velocity = transform.forward; } // Update is called once per frame void Update() { curSpeed = speed + Time.deltaTime; targetPoint = GetPoints(curPointIndex); if (Vector3.Distance(transform.position, targetPoint) <= Radius) { if (curPointIndex <= pointsLenth - 1) curPointIndex++; else return; } if (curPointIndex >= pointsLenth) { } else { if (curPointIndex == pointsLenth) { velocity += Steer(targetPoint, true); } else velocity += Steer(targetPoint); transform.position += velocity; transform.rotation = Quaternion.LookRotation(velocity); } } public Vector3 GetPoints(int index) { return points[index]; } public Vector3 Steer(Vector3 target, bool isFinalPoint = false) { Vector3 desiredVelocity = (target - transform.position); float dist = desiredVelocity.sqrMagnitude; desiredVelocity.Normalize(); if (isFinalPoint && dist < 10.0f) desiredVelocity *= (curSpeed * (dist / 10.0f)); else desiredVelocity *= curSpeed; Vector3 steeringForce = desiredVelocity - velocity; Vector3 acceleration = steeringForce / mass; return acceleration; } }
相关文章推荐
- unity总结1
- Unity3D中各种Path
- Unity3d Input按键系统
- unity3d之在屏幕上画线
- 在Unity里内嵌SVN基本操作
- 在Unity5中使用C#脚本实现UI的下滑、变色、渐隐渐现效果
- unity文件夹
- unity3d常用的游戏对象引用技巧
- Unity3D中的线性插值Lerp()函数解析
- UNITY3D自学(五)-- 导航寻路的学习
- unity中如何解决两个物体的绑定
- Unity 2D射线与 3D射线 UI射线
- Unity5.x的GUIText被UI Text所取代--增加头文件UnityEngine.UI
- Unity3D客户端和Java服务端使用Protobuf
- unity ugui自适应
- unity 优化 WaitForTargetFPS Gfx.WaitForPresent Graphics.PresentAndSync
- Unity3D 物体移动方式总结
- unity3d 各种路径&权限
- Unity实用案例之——CameraController
- Unity3D实现3D立体游戏原理及过程