Unity常用的基础 API
在线手册
组件
坐标系
鼠标事件
Time类
Vector3
Transform
Gameobject
lnput类
组件名称
组件作用
position
世界坐标中的位置
localPosition
父对象局部坐标系中的位置
enlerAngles
世界坐标系中以欧拉角表示的旋转
localEulerAngles
父对象局部坐标系中的欧拉角
right
对象在世界坐标系中的右方向
up
对象在世界坐标系中的上方向
forward
对象在世界坐标系中的前方向
rotation
世界坐标系中以以元数表示的旋转
localRotation
父对象局部坐标系中以四元数表示的旋转
localScale
父对象局部坐标系中的缩放比例
parent
父对象的Transform组件
组件名称
组件作用
Translate
按指定的方向和距离平移
Rotate
按指定的欧拉角旋转
RotateAround
按给定旋转轴和旋转角度进行旋转
LookAt
旋转使得自身的前方向指向目标的位置
TransformDirection
将一个方向从局部坐标变换到世界坐标系
InverseTransformDirection
将一个方向从世界坐标系变换到局部坐标系
TransformPoint
将一个位置从局部坐标系变量换到世界坐标系
InverseTransformPoint
将一个位置从世界坐标系变换到局部坐标系
Find
按名称查找子对象
IsChildOf
判断是否是指定对象的子对象
1 2 3 4 5 6 7 8 void Update () {transform.Rotate(10 ,0 ,0 , Space.World); }
按照API要求的参数进行数值传递;
Space.Self 和 Space.World 区别:
Space.Self以自身为参考系来进行旋转;
Space.World 是以世界坐标系为参考系的;
游戏物体绕某一个点沿着某个轴进行旋转
1 transform.RotateAround(target.transform.position, Vector3.up, 10 );
游戏物体绕某一个点沿着某个轴进行旋转
1 2 3 4 5 6 transform.Translate(0.01f ,0 ,0 , target.transform);
Translate移动增量,如果需要移动游戏物体,就需要写在update里
LookAt 1 2 3 4 5 transform.LookAt (target.transform); Debug.DrawLine(transform. position,target.transform.position, Color.red) ;
在代码中更深入理解GameObject和Transform
1 2 3 4 public GameObject target;public Transform target_transform;transform.parent = target.transform; transform.parent = target_transform;
因为GameObject肯定有Transform组件,所有这样做target.transform; 因为Transform不能独立存在,必然存活于游戏物体,所以可以这样做target_transform.gameObject;
设置父物体 1 2 3 4 5 6 transform.SetParent(target_transform); transform.SetParent(target.transform);
查找子物体
Transform查找子物体API:
transform.childCount:子物体的数量;
transform.GetChild(i);根据index来查找子物体,特性:子物体的子物体是不会管的;
1 2 3 Transform t = transform.Find("Cube (2)" ); if (t != null )Debug.Log("t:" + t.name);
根据游戏物体的名字来进行精确查找;也不会搜索子物体的子物体;
GameObject 通过名字查找游戏物体 1 2 3 4 5 6 GameObject go = GameObject.Find("GameObject" ); if (go)Debug.Log("go:" + go.name); else Debug.Log("没有找到" ); GameObject.Find("GameObject" );
能根据游戏物体名字在所有场景内游戏物体中查找,好用但是效率很低,谨慎使用;
通过Tag来进行查找游戏物体 1 2 3 4 5 6 7 8 9 10 11 Game0bject go = GameObject.FindGame0bjectWithTag ("NPC" ); if (go)Debug.Log("go:" + go.name); Game0bject[] gos = GameObject.FindGameObjectsWithTag("NPC" ); for (int i =0 ; i< gos. Length; i++){ Debug. Log("name:" + gos[i].name); }
Time Time的静态变量
Time.deltaTime
关于 Time.deltaTime 的使用:表示距离上一帧的执行所耗费的时间,0到1小数(秒)。
具体使用场景:场景中的游戏对象在移动或旋转时,默认速度较快,所以一般做法是参数乘以自己定义的一个小数以此来降低速度。但出现deltaTime后,小数可使用此来替代,也就是直接乘以Time.delta 也一样可以实现了; 普通更新操作放在 Update()中,但Update() 方法每一帧与每一帧执行时耗用时间不相同,如何解决呢?前提是不能写在 FixedUpdate()中,可以这样:直接乘以 Time.deltaTime 便可实现该功能
匀速移动 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class ObjTrans1Script : MonoBehaviour {private float speed;void Start () { speed = 2.5f ; } void Update () {transform.Translate(Vector3.forward*Time.deltaTime*speed); }
匀速旋转 实现物体在一个匀速的速度下旋转,不依赖帧的速率。核心代码如下:
1 2 3 4 5 6 7 8 9 10 11 using UnityEngine ;using System.Collections ;public class example :MonoBehaviour { void Update () { transform.Rotate(0 ,5 * Time.deltaTime,0 ); } }
timeScale timeScale实现游戏暂停 使用 Time.timeScale 一般可制作游戏中暂停的效果。
Random Random静态变量
静态变量
变量作用
作用汉译
insideUnitCircle
Returns a random point inside a circle with radius 1 (Read Only).
随机返回一个半径为1的圆内的点(只读)。
insideUnitSphere
Returns a random point inside a sphere with radius 1 (Read Only).
随机返回一个半径为1的球体内的点(只读)。
onUnitSphere
Returns a random point on the surface of a sphere with radius 1 (Read Only).
随机返回一个单位球体表面上的点(只读)。
rotation
Returns a random rotation (Read Only).
随机返回一个(用四元数表示的)角度(只读)。
rotationUniform
Returns a random rotation with uniform distribution (Read Only).
随机返回一个均匀分布的旋转角度(只读) 。
seed
Sets the seed for the random number generator.
给随机数发生器设置种子。
value
Returns a random number between 0.0 [inclusive] and 1.0 [inclusive] (Read Only).
返回一个0.0(包括)到1.0(包括)之间的随机数(只读)。
Random静态函数
静态函数
变量作用
ColorHSV
通过 HSV 和 Alpha 范围生成随机颜色。
InitState
使用种子初始化随机数生成器状态。
Mathf 类 在 Unity 中封装了数学类 Mathf,使用它可以轻松地解决复杂的数学公式。Mathf 类提供了常用的数学运算,下表列出了常用的 Mathf 类变量和方法,完整的资料请参阅用户手册。
SmoothDamp() SmoothDamp()制作相机跟踪效果 Mathf.SmoothDamp() 方法可以制作相机的跟踪效果,让物体的移动不是那么僵硬而是做减速的缓冲效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 static function SmoothDampAngle ( current :float , target : float , ref currentVelocity : float , smoothTime : float , maxSpeed : float = Mathf.Infinity, deltaTime : float = Time.deltaTime )
制作相机跟踪效果 随着时间的推移逐渐改变一个给定的角度到期望的角度。 这个值通过一些弹簧减震器类似的功能被平滑。 这个函数可以用来平滑任何一种值,位置,颜色,标量。最常见的是平滑一个跟随摄像机。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class example : MonoBehaviour { publicTransform target; publicfloat smooth = 0.3F ; publicfloat distance = 5.0F ; privatefloat yVelocity = 0.0F ; voidUpdate() { floatyAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, target.eulerAngles.y,ref yVelocity, smooth); Vector3position = target.position; position+= Quaternion.Euler(0 , yAngle, 0 ) * new Vector3(0 , 0 , -distance); transform.position= position; transform.LookAt(target); } }
键盘输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if (Input.GetKeyDown(KeyCode.A)){ Debug.Log("A" ); } if (Input.GetKey(KeyCode.B)){ Debug. Log("B" ); } if (Input.GetKeyUp(KeyCode.C)){ Debug.Log("C" ); }
鼠标输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if (Input.GetMouseButton(1 )){ Debug.Log(1 ); } if (Input.GetMouseButton(2 )){ Debug.Log(2 ); } if (Input.GetMouseButton(0 )){ Debug.Log(0 ); }
摇杆输入(轴值获取) 一般我们称输入轴为, Axis,又叫虚拟轴。 输入轴(虚拟轴)用于模拟一些游戏外设平滑变化的输入。 例如:模拟鼠标、键盘、摇杆、方向盘等外设的输入变化。具体如何模拟呢,其实就是开发人员根据用户平时使用外设的一些习惯,在编程时将这些习惯映射为外设上的一些虚拟按键,日后使用时可直接按虚拟按键便可使用对应的功能。 输入轴需要通过 Input Manager 输入管理器中进行配置。 它包含两个虚拟按键(Positive Button 和 Negative Button)。
1 2 3 4 5 6 7 8 float h = Input.GetAxis("Horizontal" );float v = Input.GetAxis("Vertical" );Debug.Log("h:" + h+",V:" +v); float h1 = Input.GetAxisRaw("Horizontal" );float v1 = Input.GetAxisRaw("Vertical" );Debug.Log("h1:" + h1 +",V1:" + v1);
按键检测 1 2 3 4 5 if (Input.GetButtonDown("Fire1" )){ Debug.Log("Fire1" ); }
输入管理器 前面在使用 Input.GetAxis( 参数 )时,我们使用过4个参数:Mouse X 、Mouse Y、Horizontal、Vertical。 这几个参数值其实是Unity默认定义好的,我们也可以自行再使用其它熟识单词; 另外,我们也可以创建映射了特殊功能的虚拟按键,这些操作,都需要在输入管理器(Input Manager)中配置。
打开输入管理器 Edit-->Project Settings-->Input Manager
在右侧 Inspector面板中点击“Axes”,则会显示出Unity2017.3.默认的定义好的25个虚拟按键(版本不同,个数也不同)。
访问组件 在实际代码中,经常需要访问游戏对象的各种组件并为组件设置参数。对于系统内置的常用组件,Unity提供了非常便利的访问方式,只需要在脚本里直接访问组件对应的成员变量即可,这些成员变量定义在 MonoBehviour 中并被继承了下来
常用组件 常用组件及其变量,如下表所示:
组件名称
变量名
组件作用
Transform
transform
设置对象的位置、旋转、缩放
Rigidbody
rigidbody
设置物理引擎的刚体属性
Renderer
renderer
渲染物体模型
Light
light
设置灯光属性
Camera
camera
设置相机属性
Collider
colider
设置碰撞体属性
Animation
animation
设置动画属性
访问组件的方法 如果要访问的组件不属于上表中,或者访问的是游戏上的脚本(脚本属于自定义组件),则可以通过以下方法来得到引用:
GetComponent
得到组件
GetComponents
得到组件(用于有多个同类型组件的时候)
GetComponentlnChildren
得到对象或对象子物体上的组件
GetComponentslnChildren
得到对象或对象上物体上的组件列表