Unity 物体运动 之 物体按规定路线运动的优化
Unity 物体运动 之 物体按规定路线运动的优化。本节针对之前已有的《Unity 物体运动 之 物体按规定路线运动的使用》(链接如下)的不足,物体运动朝向不对的问题,进行优化的简单案例,具体如下
工具/原料
Unity
一、知识要点
1、Vector3.MoveTowards:1)功能简述public static外狒芙梨Vector3MoveTowards(Vector3current,Vector3target, floatmaxDistanceDelta);Moves a pointcurrentin a straight line towards atargetpoint.The value returned by this function is a pointmaxDistanceDeltaunits closer to atarget/point along a line betweencurrentandtarget. If the target is closer thanmaxDistanceDelta/then the returned value will be equal to target (ie, the movement will not overshoot the target). Negative values ofmaxDistanceDeltacan be used to push the point away from the target.2)使用举例using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour { public Transform target; public float speed; void Update() { float step = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, target.position, step); }}
2、Transform.LookAt:1)功能简述public voidLoo氯短赤亻kAt(Transformtarget,Vector3worldUp= Vector3.up);Parameterstarget:Object to point towards.worldUp:Vector specifying the upward direction.Rotates the transform so the forward vector points at /target/'s current position.Then it rotates the transform to point its up direction vector in the direction hinted at by theworldUpvector. If you leave out theworldUpparameter, the function will use the world y axis.worldUpis only a hint vector. The up vector of the rotation will only match theworldUpvector if the forward direction is perpendicular toworldUp.2)使用举例// This complete script can be attached to a camera to make it// continuously point at another object.// The target variable shows up as a property in the inspector.// Drag another object onto it to make the camera look at it.using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour{ public Transform target; void Update() { // Rotate the camera every frame so it keeps looking at the target transform.LookAt(target); }}
二、物体运动 之 物体按规定路线运动的优化
1、在Unity场景中新建一个“Plane”和“Cube”是低昂调整大小与布局,“Maain Camera”的视角调整好,具体如下图
2、在场景中添加路线的关键点,演示需要大致随意摆放几个点,具体如下图
3、在工程中,仙剑两个脚本“Move”和“WayPoints”,代开脚本进行编辑,具体如下图
4、在“WayPoints”脚本上编辑代码,具体代码和代码说明如下图
5、“WayPoints”脚本具体内容如下:using UnityEngine;public class WayPoints : MonoBehaviour{ public static Transform[] wayPoints; void Awake() { int count = transform.childCount; wayPoints = new Transform[count]; for (int i = 0; i < count; i++) { wayPoints[i] = transform.GetChild(i); } }}
6、在“Move”脚本上编辑代码,本脚本关键使用LookAt朝向目标,然后MoveTowards在移动到目标点,具体代码和代码说明如下图
7、“Move”脚本具体内容如下:using UnityEngine;public class Move : MonoBeh锾攒揉敫aviour{ public float speed = 5; private Transform[] ways; private int index; // Use this for initialization void Start(){ ways = WayPoints.wayPoints; index = 0; } // Update is called once per frame void Update(){ MoveTo(); } void MoveTo(){ if (index > ways.Length - 1) return; //保证正面朝向物体运动 transform.LookAt(ways[index].position); transform.position = Vector3.MoveTowards(transform.position, ways[index].position, Time.deltaTime * speed); if (Vector3.Distance(ways[index].position, transform.position) < 0.2f){ index++; if (index == ways.Length){ transform.position = ways[index - 1].position; } } }}
8、脚本编译正确,回到Unity界面,“WayPoints”脚本赋给场景中的“WayPoints”,“Move”脚本赋给“Cube”
9、运行场景,可以看到,物体首先朝向目标点,然后在向目标点运动,弥补朝向不变的不足,具体如下图
10、到此,《Unity 物体运动 之 物体按规定路线运动的优化》讲解结束,谢谢