1、Time时间类函数:
- Time.time
- Time.timeSinceLevelLoad
- Time.deltaTime
- Time.fixedTime
- Time.fixedDeltaTime 在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
- Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前 N帧的时间加权平均的值。
- Time.timeScale 时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,回放等。如果游戏中控制运动的都是使用了Time.deltatime的话,则可以通过设置Time.timeScale=0来暂停其运动等。
- Time.frameCount 总帧数
- Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加。(一般用作性能测试)
- Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。
- Time.unscaledDeltaTime 以秒计算,完成最后一帧的时间 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
- Time.unscaledTime 从游戏开始到现在所用的时间 不考虑timescale时候与time相同,若timescale被设置,则无效。
2、GameObject类:
(1)、属性、变量: - GameObject.activeInHierarchy 游戏物体是否处于激活状态,与父类有关,父类被取消激活,则子类也是取消激活的
- GameObject.activeSelf 自身的激活状态,与父类无关,只与自身有关。(控制组件的激活与取消激活则使用.enable=false/true)
- GameObject.tag 游戏物体的tag标签,具体的由程序员自定义设置
- GameObject.SetActive(false/true) 通过参数的控制来设置其游戏物体的激活状态,true为激活状态,反之为取消激活状态。
(2)、UnityEngine.Object中的共有方法与变量 - name
- Destroy()
- DontDestroyOnLoad()
- FindObjectType<>
- FindObjectsType<>
- FindGameObjectWithTag
- FindGameObejctsWithTag
(3)、消息的发送 - BroadcastMessage()
- SendMessage()
- SendMessageUpwards()和BroadcastMessage()是相反的
(4)、游戏组件的查找 - Cube cube = target.GetComponent();
- Cube[]cc= target.GetComponents();
- Cube[] xx = target.GetComponentsInChildren();
- Cube[] yy = target.GetComponentsInParent();
3、MonoBehaviours的类:
(1)、继承的变量成员 - enabled
- isActiveAndEnabled 只读的
- tag
- name
(2)、Invoke等方法、变量:将添加要调用的方法添加到等待队列中,然后等待用户设定的时间后,进行队列中的方法调用。 - Invoke(“方法1”,float time): 在等待time的时间后调用方法1
- bool i= IsInvoking(“方法1”)
- InvokeRepeating(“方法1”,time,number): 等待time时间后,会重复开始运行方法1,每秒钟运行number次。
- CancelInvoke() 会暂停通过Involve/InvokeRepeating的运行,但是一般来说CancelInvoke会和InvokeRepeating组合调用。参数由自己设定
扩充:在脚本的类前添加[ExecuteInEditMode]:则该脚本不用按游戏运行按钮就会开始编译,只限在编辑模式里面
在脚本的共有变量前添加[HideInInspector]:则该共有变量不会在Inspector面板进行显示
4、Coroutines:协程:
1、定义协程:IEnumerator 方法名()
{
yield return 0/null ;
yield return new WaitForSeconds(1.0f); //等待一定时间在运行下面的代码
}
2、开启协程:StartCoroutines(方法名());
说明:协程开启会继续执行下面代码,不会等协程方法运行完再执行接下来的方法
3、开启与关闭协程时,StartCoriutine(参数)、StopCoroutine(参数) 其中的参数要互相对应,如果传递的是方法名,则两个方法中的参数就要是方法名,如果是IEnumerator的返回值,则其中两个方法发的参数就要是IEnumerator的返回值
1、 private IEnumerator coroutine;
coroutine = WaitAndPrint();
StartCoroutine(coroutine);
StopCoroutine(coroutine);
2、StartCoroutine(“WaitAndPrint”);
StopCoroutine(“WaitAndPrint”);
4、StopAllCoroutines() 停止所有的协程,不管你是怎么调用的
5、Mathf类:所有的成员均为静态的
Mathf.Abs() 返回绝对值的
Mathf.Ceil() 向上取整的,10.1—>11
Mathf.Clamp(value,min,max) 如果value的值在min–max之间的话就返回value,但是如果value的值小于min,则返回min,
Mathf.ClosePowerOfTwo(value): 取得离value的2次方最近的值
Mathg.DeltaAngke: 取得两个角度之间的最小夹角
Mathf.Floor 向下取整
Mathf.Pow(i,j) 取得i的j次方
Mathf.MoveToWards() 一般用来做移动控制,是匀速的运动,加速度固定的
Mathf.Lerp() 差值运算,一般是用来控制动画、运动,越往后运行的越慢的。
Mathf.PingPong(t,maxValue)
6、Vector2;二维向量
magnitude: 返回向量的长度
normalized
Normalize()向量化,但是调用该方法会改变原向量值,使其的值被向量化
ClampMagnitude() ;将一个向量限制在参数中指定的长度之间
MoveToWards() 用来做匀速的运动,由一个位置向另一个位置进行移动
sqrMagnitude 对求向量的的长度时不进行开平方根运算
扩充:向量是结构体,为值类型,修改其中的变量的时候要整体进行修改,不能单独的进行单个变量的赋值修改
7、Vector3:三维变量
Cross() 插乘运算【左手法则】,通过两个向量来获得另一个向量的方向,然后进行相关的判断
Project() 投影运算
Reflect() 反射运算
Slerp() 按照角度进行插值,与lerp的按照位置信息进行插值的,一般用在炮台的旋转,使旋转的更加平滑
8、Random随机数类:
InitState()伪随机数。一般要生成的随机数不同,可以设置参数为System.DataTime.Now.Ticks:通过时间戳来完成
insideUnitFCircle在单位为1的园内随机生成一个位置信息,如果要在更大的圆中生成,则可以在后面圆的半径信息。
insideUnitSphere: 在单位为1的球内随机生成一个位置信息,如果要在更大的球中生成,则可以在后面圆的半径信息。
9、四元数 Quaternion:
.eulerAngles 将四元数转变为欧拉角
Euler() 将欧拉角转变为四元数
.LookRotation() 让玩家通过设置四元数来进行望向敌人的旋转,将向量方向转变为四元数
Vector3 temp = enemy.position - player.position; //获得两个位置信息之间的变量
enemp.y = 0; //如果不想主角在望向他的时候出现低头的情况,也就是y轴的值出现了变化了。
player.rotation= Quaternion.LookRotation(temp);
slerp() 在做朝向的旋转的时候,不建议使用lerp,而是建议使用slerp,使其的旋转朝向更为平滑,更加的自然
Quaternion target= Quaternion.LookRotation(temp);
player.rotation = Quaternion.Slerp(player.rotation, target, Time.deltaTime); //插值的缓慢旋转
10、Rigidbody:刚体组件,控制角色的移动
.position
MovePosition() 对position的优化,利用了插值运算
.rotation:
MoveRotation建议使用MoveRotation(),然后配合Quaternion,slerp()进行使用,使其更加的平滑
AddForce() 当进行短时的加速则可以给以限定时间的AddForce方法
11、Camera;相机组件:
Ray ray = cameraMain.ScreenPointToRay(Input.mousePosition); //获得相机到鼠标之间的射线
RaycastHit hit; //用来存放射线检测到的游戏物体的信息的
bool temp = Physics.Raycast(ray, out hit); //进行射线检测
12、SceneManager场景类
SceneManager.LoadScene()
SceneManager.LoadSceneAsync()
sceneCount
sceneCountInBuildSettings
GetActiveScene()
GetSceneAt(index)
当加载新的场景的时候会触发下面的事件:
activeSceneChanged
sceneLoaded
扩充:事件的注册时通过加方法来进行注册的:
SceneManger.activeSceneChanged+=OnAcitiveScenenChanged;
13、射线检测:一般射线检测要在射线检测的范围内,并且被检测物体要有Collider
Ray ray=new Ray(起点,方向);
PaycastHit hit; //hit中存放的是射线检测的碰撞信息
bool temp=Physics.Raycast(ray,out hit); //具体的重载方法边用边查
Ray ray = new Ray(this.transform.position + transform.forward, transform.forward);
RaycastHit hit; //存储射线检测到的游戏物体信息
if(Physics.Raycast(ray,out hit)) //通过返回值来判断射线是否检测到相关的物体了
{
Debug.Log(hit.collider.gameObject.name);
}
扩充:
Raycast;检测的是射线碰撞到的第一个物体,不具有穿透性
RaycastAll:返回的是RaycastHit数组,具有穿透性,可以返回检测到的多个游戏物体
14、代码监听触发事件:
().onClick.AddListener(方法名); //当触发button组件,则会触发指定的方法名的方法
通过实现接口来注册监听事件: using UnityEgine.EventSystems; 导入命名空间
IPointerDownHandler 鼠标按下的事件
Raycast Target: 如果取消勾选则不做事件监听,无法实现检测
15、www类,下载 是用来在网络中下载资源的,
public string url = “http://img.taopic.com/uploads/allimg/120727/201995-120HG1030762.jpg”;
IEnumerator Start()
{
WWW www = new WWW(url);
yield return www;
Renderer renderer = this.GetComponent();
renderer.material.mainTexture = www.texture;
}
16、Debug.DrawRay(ray.oridin,ray.direction) 绘制射线,第一个参数是原点,第二个是方向