这是一个很小的知识点,不过我觉得可以记录下来,就算是在大都项目都是这些小小的知识点堆积而来,之前我用这个小知识点获取了,两点之间都一系列点,今天当我想做一个移动的时候,发现这个知识点也能做这方面都事情,所以我觉得把它记录下来,虽然很简单,但是用处并不简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using UnityEngine; using System.Collections; /// <summary> /// 下面这个类是将一个transfrom对象移动到目标点(100,0,100)位置 /// 主要的方法GetBetweenPoint,能够获取起始点和终点之间都由起始点朝向终点都distance距离点 /// </summary> public class Main : MonoBehaviour { private Vector3 target = new Vector3(100, 0, 100); private int count = 0; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Vector3.Distance(transform.position, target) > 0.1f) { transform.position = GetBetweenPoint(transform.position, target, 0.1f); } else { transform.position = target; } } /// <summary> /// 获取两点之间的一个点,在方法中进行了向量的减法,以及乘法运算 /// </summary> /// <param name="start">起始点</param> /// <param name="end">结束点</param> /// <param name="distance">距离</param> /// <returns></returns> private Vector3 GetBetweenPoint(Vector3 start, Vector3 end, float distance) { Vector3 normal = (end - start).normalized; return normal * distance + start; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using UnityEngine; using System.Collections; /// <summary> /// 这个类和上面都类功能是相同都,都是从当前坐标移动到目标坐标点,只是向量的计算方式不一样,这种方式是向量的加法运算 /// </summary> public class Main : MonoBehaviour { private Vector3 target = new Vector3(100,0,100); private Vector3 normal; // Use this for initialization void Start () { //向量的减法运算 normal = (target - transform.position).normalized; } // Update is called once per frame void Update () { if (Vector3.Distance(transform.position, target) > 0.1) { //向量的加法运算 transform.position = transform.position + normal * 0.1f; } else { transform.position = target; } } } |
确实很简单吧。不过如果你不会,那么他肯定能对你有所帮助。
1 Comment
直接差值不就好了。