多语言展示
当前在线:1122今日阅读:162今日分享:23

Unity 物体运动 之 物体按规定路线运动的优化

Unity 物体运动 之 物体按规定路线运动的优化。本节针对之前已有的《Unity 物体运动 之 物体按规定路线运动的使用》(链接如下)的不足,物体运动朝向不对的问题,进行优化的简单案例,具体如下20Unity 物体运动 之 物体按规定路线运动的使用
工具/原料

Unity

一、知识要点
1

Vector3.MoveTowards:1)功能简述public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);Moves a point current in a straight line towards a target point.The value returned by this function is a point maxDistanceDelta units closer to a target/ point along a line between currentand target. If the target is closer than maxDistanceDelta/ then the returned value will be equal to target (ie, the movement will not overshoot the target). Negative values of maxDistanceDelta can 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 void LookAt(Transform target, Vector3 worldUp = 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 the worldUp vector. If you leave out the worldUp parameter, the function will use the world y axis. worldUp is only a hint vector. The up vector of the rotation will only match the worldUp vector if the forward direction is perpendicular to worldUp.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 : MonoBehaviour{    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 物体运动 之 物体按规定路线运动的优化》讲解结束,谢谢

注意事项

您的支持,是我们不断坚持知识分享的动力,若帮到您,还请帮忙投票有得;若有疑问,请留言

推荐信息