Unity Manual之Vector3 三维向量
2015-08-07 02:13
681 查看
Unity Manual之Vector3 三维向量
表示3D的向量和点。这个结构用于在Unity传递3D位置和方向。它也包含做些普通向量运算的函数。
除了下面列出的函数,其他类用于处理向量和点。例如Quaternion和Matrix4x4类用于旋转或变换向量和点。
1、Vector3.this[int] 操作索引
使用[0], [1], [2]分别访问组件x, y, z组件。简单来说就是用索引号代替x, y, z组件。
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Vector3 p; void Example() { p[1] = 5; } }
2、Vector3.Vector3 三维向量
创建一个新的具有给定x, y, z组件的向量。
创建一个新的具有给定x, y组件的向量并且设置z为0。
3、Vector3.Lerp 线性插值
两个向量之间的线性插值。
按照分数t在from到to之间插值。这是最常用的寻找一点沿一条线的两个端点之间一些分数的方式(例如,在那些点之间逐渐移动一个对象)。这分数是在范围[ 0…1]。t是夹在 [0…1]之间,当t = 0时,返回from,当t = 1时,返回to。当t = 0.5 返回from和to的中间点。
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Transform startMarker; public Transform endMarker; public float speed = 1.0F; private float startTime; private float journeyLength; public Transform target; public float smooth = 5.0F; void Start() { startTime = Time.time; journeyLength = Vector3.Distance(startMarker.position, endMarker.position); } void Update() { float distCovered = (Time.time - startTime) * speed; float fracJourney = distCovered / journeyLength; transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fracJourney); } }
4、Vector3.MoveTowards 移向
当前的地点移向目标。
这个函数的返回值是一个点maxdistancedelta单位更接近于目标/点沿着当前的和目标之间的线。如果目标是比maxdistancedelta /然后返回值将等于目标接近(即移动不会超过目标)。maxdistancedelta负的值可以用来推点远离目标。
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); } }
5、Vector3.RotateTowards 转向
当前的向量转向目标。
这个函数类似于MoveTowards除了将向量被视为一个方向,而不是一个位置上。当前向量将被旋转朝向目标方向由maxRadiansDelta的角度,虽然会恰好落在目标,而不是超过。如果当前的大小和目标的是不同的,那么结果的幅度将被线性地旋转过程中进行插值。如果一个负值用于maxRadiansDelta ,向量会转离目标/直到它指向完全相反的方向,然后停止。
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Transform target; public float speed; void Update() { Vector3 targetDir = target.position - transform.position; float step = speed * Time.deltaTime; Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F); Debug.DrawRay(transform.position, newDir, Color.red); transform.rotation = Quaternion.LookRotation(newDir); } }
相关文章推荐
- Unity Manual之ScriptableObject 脚本化对象
- Unity Manual之PlayerPrefs 游戏存档
- Unity Manual之Transform 变换
- Unity Manual之MonoBehaviour
- Unity Manual之CharacterController 角色控制器
- Unity Manual之Component 组件
- Unity Manual之GameObject 游戏对象
- Unity解决脚本之间相互调用的几种方法
- Unity获取游戏对象详解
- Unity常用插件
- unity GL画线
- Unity3D避免玩家作弊
- Unity (三)
- unity3d 学习笔记(两)
- Unity3D EasyTouch使用教程包括实例资源
- unity AssetBundle的资源管理
- 通过Unity依赖注入
- 解决 unity 用 vs通过wifi 真机联调 一直连接不上
- unity, audio falloff
- unity 摄像头