29631人加入学习
(126人评价)
Unity API常用方法和类详细讲解(基于Unity5.6)
价格 免费
承诺服务

其他随机生成方法介绍

Random.value:生成>=0,<=1的随机小数

 

Random.insideUnitCircle:

在半径n的圆内随机生成一些数(一般把这个方法×n)

用于随机产生敌人,让敌人的位置不重合

 

[展开全文]

使用Random生成随机数

public class RandomCS : MonoBehaviour {

	// Use this for initialization
	void Start()
	{
		//生成伪随机数,就是他按照一定算法生成一次随机数,以后在运行,生成的还是这些随机数
		//0相当于一个种子,种子不变,就一直这些固定的随机数
		Random.InitState(0);

		//按照现实时间来赋值随机数,因为现实的时间一直是往前走的,所以每次运行生成的随机数都不一样
		Random.InitState((int)System.DateTime.Now.Ticks);
	}
	
	// Update is called once per frame
	void Update () {
		print(Random.Range(4, 10));//输出>=4,<10随机数
		print(Random.Range(4, 5f));//加上f之后生成小数的随机数
	}
}

 

[展开全文]
        Vector2 a = new Vector2(2, 2);
		Vector2 b = new Vector2(3, 4);
		Vector2 c = new Vector2(3, 0);

		Vector2 res = b - a;//(1,2)
		print(res);//(1,2)
		print(res * 10);//(10,20)
		print(res / 5);//(0.2,0.4)
		print(a == b);//False

 

[展开全文]

关于三维向量Vector3:表示向量或坐标

Project:取得一个向量,再另外一个向量上的投影,向量的方向不会影响投影的方向

Reflect:用来做反射

Slerp(a,b,t):

  • a,b代表两个方向,做插值,按照夹角进行插值,
  • 适合用于转向

对于位置的插值用Lerp,对于方向的插值用Slerp

[展开全文]

基本用法

public class V2CS : MonoBehaviour {

	void Start () {
        Vector2 a = new Vector2(2, 2);
		Vector2 b = new Vector2(3, 4);
		Vector2 c = new Vector2(3, 0);

		//求a,b之间的夹角,既
		print(Vector2.Angle(a, b));
		print(Vector2.Angle(a, c));//为45°
		//保持方向不变,把向量c的长度限定在2
		print(Vector2.ClampMagnitude(c, 2));//(2,0)
		//b,c之间的距离
		print(Vector2.Distance(b, c));//4

		//从a到b进行插值,既((2+3)/2,(2+4)/2)
		print(Vector2.Lerp(a, b, 0.5f));//(2.5,3)
		print(Vector2.LerpUnclamped(a, b, 0.5f));//(2.5,3)

		//Lerp(a,b,t)t默认0<=t<=1,当t小于等于0,返回a,t大于等于1,返回b
		print(Vector2.Lerp(a, b, 2f));//因为2f大于1,所以返回b(3,4)
		//没有限制,所以在a,b距离的基础上再增加一个等价距离
		print(Vector2.LerpUnclamped(a, b, 2f));//(4,6)

		print(Vector2.Max(a, b));//(3,4)
		print(Vector2.Min(a, b));//(2,2)

	}
}

MoveTowards:做匀速运动

public class V2CS : MonoBehaviour {
	public Vector2 a = new Vector2(2, 2);
	public Vector2 b = new Vector2(10, 3);

	void Update () {
		a = Vector2.MoveTowards(a, b, Time.deltaTime);//a向b以一秒一米的速度靠近
	}
}
[展开全文]

二维向量Vector2中的静态方法

Normalize:将向量单位化,没有返回值,

[展开全文]

向量是结构体

Vector2和Vector3都是结构体,与类在使用上有区别

结构体是把一堆变量进行封装

结构体是一个值类型,对他修改时,只能把他当作一个整体进行修改,不能单独写出来

eg:position为一个结构体,要想修改他的x坐标为10

transform.position = new Vector3(1, 1, 1);
		//transform.position.x = 10;//这个方法错误
		Vector3 pos = transform.position;
		pos.x = 10;
		transform.position = pos;

对象是引用类型。

[展开全文]

Vector2中的变量有哪些

Vector2:可以表示二位向量和坐标

public class V2CS : MonoBehaviour {
	void Start () {
		print(Vector2.down);//(0.0,-1.0)
		print(Vector2.up);//(0.0,1.0)
		print(Vector2.left);//(-1.0,0.0)
		print(Vector2.right);//(1.0,0.0)
		print(Vector2.one);//(1.0,1.0)
		print(Vector2.zero);//(0.0,0.0)

		Vector2 a = new Vector2(2, 2);
		Vector2 b = new Vector2(3, 4);
		print(a.magnitude);//根号下2的平方加2的平方=2*1.4
		print(a.sqrMagnitude);//2的平方加2的平方=8
		print(b.magnitude);
		print(b.sqrMagnitude);

		print(a.normalized);//对a向量没有影响,返回a向量单位化的向量
		print(b.normalized);

		print(a.x + "," + a.y);//访问a的x坐标和a的y坐标
		print(a[0] + "," + a[1]);//访问a的x坐标和a的y坐标
	}
	}

 

[展开全文]

屏幕坐标系和鼠标的坐标

easytouch插件:触摸事件的插件

anyKey:不需要传递参数,是一个静态的变量,按下任何按键都一直返回True

anyKeyDown:按下任何按键都返回True

mousePosition:使用摄像机里的屏幕坐标检测鼠标是否点击到一个物体

 

 

[展开全文]

使用GetAxis得到轴的值的变化来控制移动

GetAxis():是渐变的,模拟加速运动的效果

GetAxis():直接运动,没有缓冲

public class InputCS : MonoBehaviour {
	public Transform cube;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
         //按下a,d,←,→键开始加速移动,到了指定速度后按那个速度移动,松开后减速停下
		cube.Translate(Vector3.right * Time.deltaTime * Input.GetAxis("Horizontal"));
        //一按就会运动,没有缓冲
		cube.Translate(Vector3.right * Time.deltaTime * Input.GetAxisRaw("Horizontal"));
	}
}

 

[展开全文]

PingPong;最小值是0,最大值自己设,超过最大值后开始朝最小值移动,到最小值后又朝最大值移动,循环往复 

[展开全文]

GetButtonXXX相关事件监测

GetButtonXXX为虚拟按键,

如何找到:Edit——Project Settings——Input

[展开全文]

Input.GetMouseButton():0是左键,1是右键,2是中键,在按下的过程会一直触发

Input.GetMouseButtonDown():按下之后执行一次

[展开全文]

使用PingPong方法实现乒乓的来回运动效果

PingPong :默认最小值为0,不能设置最小值,只能设置长度length

public class MathfCS : MonoBehaviour {
	public Transform cube;
void Update(){
//实现物体在0-10之间来回运动,Time.time是逐渐增大的,当他在0-10,往一个方向运动,当他在11-20,反向运动.....如此循环
cube.position = new Vector3(Mathf.PingPong(Time.time,10), 0, 0);
}
}
//实现物体在5-10之间来回运动
cube.position = new Vector3(5+Mathf.PingPong(Time.time,10), 0, 0);

 

[展开全文]

使用MoveTowards做匀速运动

public class MathfCS : MonoBehaviour {
	public Transform cube;
	// Use this for initialization
	void Start () {
		cube.position = new Vector3(0, 0, 0);
	}
	
	void Update()
	{
		float x = cube.position.x;

		float newX = Mathf.MoveTowards(x, 10, Time.deltaTime);//从x到10匀速运动,会保证值不超过最大值10
		cube.position = new Vector3(newX, 0, 0);
	}
}

 

[展开全文]

Lerp:三个参数a(起始值),b(结束值),t(a和b之间的比例,最大为1,直接返回b,最小为0,直接返回a)

[展开全文]

关于游戏开发中的插值运算

Lerp(a,b,t):在a到b之间插入一个值,t用来控制插在哪个位置t的范围为0<=t<=1,当t<=0时,输出a,t>=1时,输出b

用来做动画效果,

特点为:先快后慢

public class MathfCS : MonoBehaviour {
	public Transform cube;
	// Use this for initialization
	void Start () {
		
		cube.position = new Vector3(0, 0, 0);
	}
	
	void Update()
	{
		float x = cube.position.x;
		//只要开始运行,cube的初始位置就变为(1,0,0),然后按区间长度每次运动区间长度的1/10,由于区间长度越来越短,所以运动越来越慢
		float newX = Mathf.Lerp(x, 10, 0.1f);//0.1f可以换成Time.deltaTime*speed
		cube.position = new Vector3(newX, 0, 0);
	}
}

 

LerpAngle:

[展开全文]

Mathf中的常用方法

ClosePowerOfTwo():取得离2的次方最近的数

Ceil:取大的数,向上取整

Floor:取小的数,向下取整

Lerp:

LerpAngle:

Pow(f,p):取得f的p次方

Sqrt:取得参数的平方根

 

[展开全文]

授课教师

SiKi学院老师

课程特色

图文(1)
下载资料(2)
视频(71)