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

欧拉角是用来观察的 四元素是用来计算的 

[展开全文]

Vector2.

Equals

normalize()单位化,之前的normalized是获取单位方向向量(x,y都改为1/-1值,length不一定为1)

ClampMagnitude(Vector2 v,float maxLength)限定向量长度

Distance当然就是两向量指向坐标的距离值

Dot点乘

Lerp插值和Mathf一样

LerpUnclamped不限定边界插值(110%之类的)

Scale叉乘?

 

[展开全文]

PingPong(t运动速度,length最大来回长度)来回运动

[展开全文]

Time

从 Unity 获取时间信息的接口。

静态变量

captureDeltaTime 减慢游戏播放时间,以便在帧之间保存屏幕截图。
captureFramerate Time.captureDeltaTime 的倒数。
deltaTime 完成上一帧所用的时间(以秒为单位)(只读)。
fixedDeltaTime 执行物理和其他固定帧率更新(如 MonoBehaviour 的 FixedUpdate)的时间间隔(以秒为单位)。
fixedTime 最近一次 FixedUpdate 已启动的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
fixedUnscaledDeltaTime 从上一个固定帧到当前固定帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。
fixedUnscaledTime 最近一次 FixedUpdate 已启动的独立于 TimeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
frameCount 已经过的总帧数(只读)。
inFixedTimeStep 如果在固定时间步长回调(如 MonoBehaviour 的 FixedUpdate)内调用,则返回 true,否则返回 false。
maximumDeltaTime 帧可以耗用的最长时间。物理和其他固定帧率更新(如 MonoBehaviour 的 FixedUpdate)将仅在每帧的该持续时间内执行。
maximumParticleDeltaTime 帧可以在粒子更新上耗用的最长时间。如果帧耗用的时间超过该值,则将更新拆分为多个较小的更新。
realtimeSinceStartup 游戏开始以来的实际时间(只读)。
smoothDeltaTime 经过平滑处理的 Time.deltaTime(只读)。
time 该帧开始的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
timeScale 时间流逝的标度。可用于慢动作效果。
timeSinceLevelLoad 该帧开始以来的时间(只读)。此为自加载上一个关卡以来的时间(以秒为单位)。
unscaledDeltaTime 从上一帧到当前帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。
unscaledTime 该帧的独立于 timeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
[展开全文]

(人物上下看)俯仰角

=Roatation.x——eulerAngels.x

(人物左右看)水平角

=Roatation.y——eulerAngels.y

(人物倾斜身子看)滚转角

=Roatation.z——eulerAngels.z//如《绝地求生》里面QE倾斜身子射击就涉及到这个值的改变 

[展开全文]

GetButton:

可以在Eidt-projectsettings-InputManger里面找到虚拟按键的设置选项,使用这个可以使程序更加形象化,如你在攻击时可以自定义一个虚拟按键

name=PlayerAttack

positiveButton:mouse 0(左键)

在调用时可以用

 if (Input.GetButtonDown("PlayerAttack"))
        {
            Debug.Log("PlayerAttack Down");
            //To Do Attack
        }

为了实时监测,一般需要写在Update()或者实时更新每帧监测的方法里。

[展开全文]

我们主要记住常用的API,最主要是有印象,并且会去查文档。

事件函数

文档里,Manual——Scripting——Execution Order Of Event Functions就有得查。

Time类

在API里输入Time就能查询;

Time.deltaTime;//每一帧为60分之1秒,主要用于移动。
Time.realtimeSinceStartup;//游戏开始就进行计时,暂行也没用。

创建游戏物体的方法

GameObject one = new GameObject("");
GameObject.Instantiate(prefab);
GameObject.CreatePrimitive(PrimitiveType.prefab);//只能用于加基本物体。
GameObject.AddComponent<prefab>();//添加组件
GameObject.SetActive();
gameobject.enable=true or false;
GameObject.activeInHierarchy();//判断是否激活。
Object.Destroy();//可以销毁物体,也可以销毁组件,也可以设置销毁时间。
Object.DontDestroyOnLoad(transform.gameobject);//场景跳转保留该物体。
Object.FindObjectOfType<prefab>();//查找有此组件的物体,只找第一个找到的。
Object.FindObjectsOfType<prefab>();//查找有此组件的物体,找到所有的。
Object.Instantiate();//设置物体的位置。
GameObject.name==Component.name;//成立

因为GameObject,Component 他们俩各自继承了Object类。

//GameObject独有的静态方法
GameObject.Find(); //很耗性能。
GameObject.FindGameObjectsWithTag();  //耗性能小。
//广播
GameObject.BroadcastMessage("方法名",参数,是否接收);//广播当前物体和所有孩子,减少耦合性
GameObject.SendMessage();//当前物体
GameObject.SendMessageUpwards();//当前物体和所有父亲

MonoBehaviour

脚本创建的时候默认继承的类。其间接地继承了Component

Invoke("函数名",int time);//几秒后调用函数
IsInvoking("函数名");//判断该函数是否在Invoke队列里。
InvokeRepeating("函数名",a,b);//函数在a秒后执行,并且之后每b秒执行一次。
CancelInvoke("函数名");//取消执行某函数

协程的解释和执行

协程方法不会阻塞其他方法的执行,并且能够暂停。

Manual——Scripting——Coroutines 就能够查到用法。

就是一组代码里面,每行代码要一行行运行,但是携程可以边运行边执行下面的其他代码。

//两个要素,IEnumerator 和 yield return null/0
IEnumerator ChangeColor()//创建携程
{
    yield return new WaitForSeconds(3);//暂停的方法
    ...;
    yield return null;
}
//一般是要创个IEnumerator 的量来实例化协程,再用如下的方法,停止协程才能正常进行。
StartCoroutine(ChangeColor()); //调用协程,里面可以用("函数名")的方式用。
StopCoroutine(ChangeColor());  //停止协程
StopAllCoroutine();//停止全部协程

鼠标相关事件函数OnMouseXXX

这类的函数要有识别,物体上必须有Collider,而且这个Collider可以是trigger触发器并且设置里要有勾个选项。这类方法和colliderenter等类似,是满足条件就触发。

void OnMouseDown(){}//按下
void OnMouseUp(){}//抬起
void OnMouseDray(){}//按住拖动
//Over在物体上,Enter进入物体,Exit移除物体

Mathf类的使用

这个类比C#的math类更好用一些chen

Mathf.Deg2Rad;//角乘这个数就会面为弧度
Mathf.Rad2Deg;//和上面相反
Mathf.Epsilon;//无穷小,接近0但是不是0
Mathf.Infinity;//无穷大
Mathf.PI;//就是字面意思
Mathf.NegativeInfinit;//无穷小的数
//方法
Abs();//取绝对值
Ceil();//向上取整,返回float
CeilToInt();//向上取整,int
Clamp(a,b,c);//把a的值限制在b到c之间
ClosestPowerOfTwo();//得得离2的n次方最近得数
DeltaAngle(a,b);//a和b之间的最小夹角
Floor();//向下取整
Max();//取最大值
Min();//取最小值
Sqrt();//取平方根
Pow(a,b);//a的b次方
//匀速运动,x代表的是每帧运行的距离
MoveTowards(a,b,x);//从a移动到b,x是速度,-就是往反向移动。一般是Time.deltaTime*Speed
//插值运算,一般把t设置为Time.deltaTime*Speed
Lerp(a,b,t);  //t代表比例,取值为0到1之间,按比例取a到b之间得值。
//来回运动,总之就是在一个范围来回运动,可以用Time.deltaTime*Speed代表t。
PingPong(t,length);//if(0<t<length),返回值就是t,if(length<t<2length),返回2length-t

Input类

//GetKeyXXX系列
GetKey();//持续判断一直按下
GetKeyDown();//按下执行一次
GetKeyUp();//抬起执行一次
//能接收的键盘类型为KeyCode类和字符串类型
//鼠标按键事件监测,0:左键,1:右键,2:中间滚轮
GetMouseButton();
GetMouseButtonDown();
GetMouseButtonUp();
//GetButtonXXX系列
//这个系列是判定虚拟按键的,虚拟按键在软件里的Input Setting里设置。
//好处:一个button name可以对应多个按键
//GetAxis系列,与上面的区别在于
//其他的返回值是bool类型,而这个系列返回的是数值。
GetAxis();//0到1的渐变
GetAxisRaw();//0直接到1
Input.anyKeyDown;//持续判断,鼠标是否按下
Input.mousePosition;//持续判断,以像素为单位,鼠标在屏幕上的位置
​

Vector系列

Vector系列是结构体。

//Vextor2系列
//变量
up,down,left,right,one,zero;
normalized;//长度变为1,取得单位化的值
magnitude;//求长度
sqrMagnitude;//这个是还没开根号的,更节约性能,用于比较长度
//方法
Equals();//比较相等
Normalized();//把自身单位化
Set();//用于设置值
Abgke();//夹角
ClampMagnitude();//限制长度
Distance();//向量距离
Dot();//点乘
Lerp();//插值运算
LerpUnclamped();//不限制大小的插值。
//Vector3系列,左手坐标系
up,down,left,right,one,zero,forward,back;

Random系列

Random.Range(a,b);//a到b之间的随机数。
Random.InitState();//选择随机数的算法种子,当如
Random.value;//随机0到1的值,包含0,1
Random.insideUnitCircle//圆面随机
Random.insideUnitSphere//球面随机

Quaternion系列

cube.eulerAngle = new Vector3(45,45,45);
cube.rotation = Quaternion.Euler(new Vector3(45,45,45));
Quaternion.LookRotation(vector3 dir);//转向
Quaternion.Lerp();//插值,以直线为准
Quaternion.Slerp();//插值,以曲线为准

Rigidbody刚体

Rigidbody.position;//用这个设置移动会更快。如果持续移动最好用MovePsition()
Rigidbody.MovePsition();//移动到一个位置,并且更加平滑。
Rigidbody.rotation;//适合用于一次的转动
Rigidbody.MoveRotation();//适合用于持续的转动
Rigidbody.AddForce();//对物体施加力

Application类

主要用作与一些运行方面的操作

dataPath;//工程路径
StreamingAssetsPath;//找到一个叫Streaming Assets的文件夹,它用于直接保留文件。
persistentDataPath;//待查
temporaryCachePath;//临时缓冲数据
OpenURL();//打开网页链接
Quit();//退出游戏
//场景加载
Application.Loadlevel(a);//加载第a+1个场景。这个方法已经不怎么用了

SceneManager

using UnityEngine.SceneManagement;
SceneManager.LoadScene();//可通过标号或者名字添加,后面有LoadSceneMode参数
//两种方式 Single(销毁前一个)和Additive(保留前一个)
SceneManager.LoadSceneAsync();//异步方式添加场景,用于展示进度条。
SceneManager.GetActiveScene().name;//获取当前场景
SceneManager.GetSceneAt();//获取其他场景的信息
SceneManager.activeSceneChanged += hanshu;//场景转换执行
SceneManager.sceneLoaded += hanshu;//场景加载执行

射线系列

Ray ray =  new Ray();
RaycastHit hit;
Physics.Raycast();//用于检测碰撞和设定射线的检测范围
Physics2D.Raycast();

UGUI的事件

三种方法:

  1. 通过拖拽的方式监听UGUI的事件

  1. 通过代码添加:

public GameObject button1;
button1.GetComponent<Button>().onClick.AddListener(this.方法名);
//滑块要输入float参数的,所以给slider的函数得要有(float value)参数
slider1.GetComponent<Slider>().onValueChanged.AddListener(this.方法名);
//下拉块,要(Int32 value)的参数接收
dropDown1.GetComponent<Dropdown>().onvalueChanged.AddListener(this.方法名);
//Toggle这种选项块,理所当然地要有(bool value)参数
  1. 通过实现接口:查询Supported Events

要先确定UI的Raycast Target是勾选的

  • 1 IPointerDownHandler:按下触发

  • 2 IPointerClickHandler:按下弹起触发

  • 3 IPointerUpHandler:弹起触发

  • 4 IPointerEnterHandler:进范围触发

  • 5 IPointerExitHandler:出范围触发

这个脚本放在哪里就只能控制哪个

using UnityEngine.UI;
using UnityEngine.EventSystems;
public class UIName:MonoBehaviour,IPointerDownHandler //通过继承与实现接口

www类

目前www类是被淘汰了

Touches触摸事件

主要是用于手机的,也就是多个手指的触发。

其实可以使用插件easytouch。

Camera

  1. Near与Far:能在相机里显示的范围

  2. Field of view:视野的范围。

Ray ray = Camera.ScreenPointToRay(Input.mousePosition);
ray.origin;//射线起点
ray.direction;//射线方向

CharacterController类

CharacterController.SimpleMove(f*v);
CharacterController.isGrounded;
CharacterController.Move(f*v*Time.deltaTime);
private void OnControllerColliderHit(ControllerColliderHit hit){}//碰撞触发事件

Mesh与Material

mesh就是网格,Material就是材质

一些注意的地方

SceneManagement 代替 Application

[展开全文]

1.位置的变化一般使用Lerp,线性插值

2.方向的变化推荐使用slerp,球形插值

球形插值与线性插值(也称为“lerp”)的区别在于, 向量被视为方向而不是空间中的点。

[展开全文]

Vector2.Normalize单位化,会对向量产生影响

Vector2.normalized 对向量不产生影响,有返回值,返回单位向量。

[展开全文]

?结构体不是不能单独赋值吗?为什么pos可以单独赋值

Vector3  是结构体。

对象中的属性可以直接进行修改,但结构体是值类型,要把它当做整体来进行修改。

将一个结构变量赋值给另一个,或者将结构实例传递到程序变量时,所有变量成员的值会复制到新的结构中。

将一个对象变量赋值给另一个,或者将对象变量传递给程序时,则只是复制指针。

 

[展开全文]

Time.delataTime 当前帧运行占用时间

        realtimeSinceStartup  从游戏开始到现在的总时间

        smoothDeltaTime

        fixefTime

         timeScale

 

GameObject游戏物体

      activeSelf

      activeInHierarchy

       tag

构造方法

Instantiate

CreatePrimitive

AddComponent    添加组件

Tranform

Object  Destroy

[展开全文]

一个游戏由多个场景组成。

一个场景由多个游戏物体组成。

一个游戏物体由多个组件组成。

 

组件:Transform、Rigidboy

 

 

[展开全文]

void Update () {
        Ray ray = new Ray(transform.position+transform.forward , transform.forward);
        //bool isu = Physics.Raycast(ray) ;
        //bool isu = Physics.Raycast(ray, 1);
        RaycastHit hit;
        bool isu = Physics.Raycast(ray ,out hit);
        Debug.Log(isu);
        Debug.Log(hit.collider);
        Debug.Log(hit.point);
 

[展开全文]