13_unity common api

Name
object.Destroy(建议用这个,不会被立刻回收,放在垃圾池里,再同意销毁)
Object.DestroyImmediate(立刻销毁,可能会导致控制帧)

destroy(**,5),可以设定销毁时间

DontDestroyOnLoad, 在场景切换的时候,这个游戏物体,始终存在(可以用来设置共享物体)

FindObjectOfType
根据组件类型,查找组件,在全局里进行搜索,只找第一个就返回,不会去找多个

  1. FindObjectsOfType
    可以查找场景里所有的组件,然后返回数组,不查找未激活组件
  2. 以上都是静态方法
  3. 静态方法就是通过类名来调用

Gameobject.Find(性能耗费特别高,不要用在update里)
Gameobject.FindGameObjectsWithTag(查找所有有这个标签的物体,性能耗费低一些)
Gameobject.FindWithTag(查找第一个有这个标签的物体,性能耗费低一些)

  1. gameobject和component的禁用方法不一样,
    gameobject, 用SetActive(false)
    component,用enabled.
  2. unityexception(没有设置标签)
  3. nullexception(标签没有查找到)
  4. BroadcastMessage,广播后,所有的孩子都可以接收到这个消息,但是他本身不需要知道接受者是谁(只要看孩子的身上是不是有方法名),可以降低耦合性。
  5. 没有接受者,就无法接收,
    target.BroadcastMessage("Attack", null, SendMessageOptions.DontRequireReceiver);//不一定需要接受者,这样就不会报错了
    14.直接在物体上,挂一个同名方法就好,这样就能直接叫到,避免多重耦合的情况。(孩子都会被调用)
  6. sendMessage(只会针对物体一个,不会去叫他的孩子)
  7. sendMessageUpwards(和BroadcastMessage相反,用孩子去叫祖先)
  8. [ExecuteInEditMode],在编辑模式下,也能运行(加在特定的类上就行)
  9. Invoke(), 就是调用方法
  10. Coroutine,携程部分
  11. InvokeRepeating(),对某个方法进行间隔调用
  12. Invoke,不会影响别的脚本
  13. 没有update(),就不会被禁用
  14. Invoke,会将方法添加在队列里面然后等待着,IsInvoking会去队列里面寻找,是不是被调用着。调用了以后,就会从队列里移除。

协程:如果调用的是一个协程方法,那么调用完协程方法后,不会等这个方法执行完,就继续向下执行了。
普通:如果执行的是一个普通方法,那么会等这个普通方法执行完,然后继续向下执行

协程不会阻塞程序的执行,同时,可以在执行过程中进行暂停。

...
cube.GetComponent<MeshRenderer>().material.color
...
把组件里面的meshrender拿出来

...
Coroutines
1. 返回值是IEnumerator
2. 返回参数的时候是使用yield return null/0;
3. 调用方式:StartCoroutine(Method()); 再封装一次,开启协程,不确定谁会先运行
...

  1. 协程的关闭方式,两者开启和关闭的方式需要意思一样的

...
private IEnumerator ie;

if (Input.GetKeyDown(KeyCode.Space))
{
ie = Fade();
StartCoroutine(ie);
}
if (Input.GetKeyDown(KeyCode.S))
{
StopCoroutine(ie);
}
...

默认时候,OnMouseUp这些都能做检测,都能检验出来
但如果有了trigger,就一定要保证project setting里的physcis->queries hit triggers为true

  1. enter, over, exit与鼠标按不按下无关,down,drag, up这些是有关的

  2. OnMouseAsButton,必须要保证,按下和抬起是同一个物体才会触发

  3. Epsilon, Infinity

  4. leap能做速度有变化的动画(先快后慢),看起来有幻影,每次移动都是恒定比例,不是恒定数值

  5. mathf.lerp(x,10, Time.deltaTime):按照真的时间去控制运行

  6. mathf.LerpAngle

  7. mathf.MoveToWards,匀速运动

  8. Mathf.PingPong

  9. input和mathf一样,都是静态方法

  10. Input.imeselected,和输入法有关

  11. GetKey,会一直监听。GetKeyUp/Down都只会触发一次
    40.Conventional Game Input(名字列表),Input.GetKey("直接输入名字")


    Conventional Game Input
  12. GetKey 和 GetMouseButton都是实打实的按键,GetButton是指虚拟按键(我们自己定义的按键),alt就表示备用的键,虚拟按键的好处就是,1)一个button键,可以对应多个按键 2)名字任意命名,所以比较形象


    自定义按键
  13. Input.GetButtonDown("Horizontal"),对轴的话,一般不会去监测按下和抬起

  14. GetAxis,直接拿渐变的值,可以模拟加速运动,cube.Translate(Vector3.right * Time.deltaTime*Input.GetAxis("Horizontal"));

  15. GetTouch,多指触摸,可以直接用esayTouch,更快

  16. acceleration,这个可以用来检测重力,检测陀螺仪,检测手机倾斜角度
    46.anykey(鼠标+键盘)都可以识别和触发

  17. mousePositon,像素位置

  18. Camera.main.ScreenPointToRay(); 鼠标射线,这样可以去检测是否点到了游戏物体

  19. vector2, 可以表示二维向量,也可以表示二维坐标(下,-y, 上 y;左,-x,右 x)

  20. sqrMagnitude,还未开根号之前,这样出来的计算量小一些(性能优化)
    ...
    void Start () {
    print(Vector2.down);
    print(Vector2.up);
    print(Vector2.left);
    print(Vector2.right);
    print(Vector2.one);
    print(Vector2.zero);

    Vector2 a = new Vector2(2, 2);
    Vector2 b = new Vector2(3, 4);
    print(a.magnitude);
    print(a.sqrMagnitude);
    print(b.magnitude);
    print(b.sqrMagnitude);
    
    print(a.normalized);//不会对a有影响,只是返回了一个单位值
    print(b.normalized);
    
    print(a.x + "," + a.y);
    print(a[0] + "," + a[1]);
    

    }
    ...

  21. vector2/3,他们俩都是结构体,不是类,结构体就相当于把一堆变量做封装

  22. a=Vector2.MoveTowards(a, target, Time.deltaTime);

Vector3

  1. vector3.Slerp:在AB之间进行差值,ab是两个向量,不是位置,按照夹角、长度来进行差值(适合做转向,转得平滑)

Random

  1. random.range//生成范围,不包含最大值
  2. random,静态方法就直接通过类名来调用就好
  3. random.IniState, 初始化随机种子,unity会自动默认每次生成的数字都不一样,所以inistate可以爱写不写
  4. random.value//直接就是0-1,可以用来做颜色RGB生成
  5. Random.State;//只要是拿种子
  6. Random.Rotation;//用来控制四元数旋转,朝向
  7. Random.insideUnitCircle;//在长度为1的圆里,随机生成各种二维坐标

Quaternion

  1. x,z轴做自身绕轴旋转,y轴是绕着世界坐标做旋转
  2. 欧拉角(方便观察)+四元数(方便计算)
  3. print(cube.rotation);//这是四元数
  4. cube.rotation = Quaternion.Euler(new Vector3(45, 45, 45));
  5. Quaternion. LookRotation
  6. Quaternion.Slerp//跟角度的话,一般都推荐s打头

RigidBody

  1. RigidBody. centerOfMass
  2. RigidBody.Position,通过刚体组件来修改位置的话,transform会在下一步更新,性能更高,比transform.position更快
  3. 直接用move.position,还是这个比较好,会更平滑
    ...
    playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime;//简单的几次没有问题
    playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime*10);//如果是多次改变,就用这个
    ...
  4. 通过刚体直接来修改rotation,就会更加快,效果会更好,更节约性能
  5. MoveRotation, MovePosition

Camera

  1. Camera组件的获取方式
    ...
    public class API16Camera : MonoBehaviour {

    private Camera mainCamera;
    // Use this for initialization
    void Start () {
    mainCamera=GameObject.Find("MainCamera").GetComponent<Camera>();
    mainCamera = Camera.main;//直接用过tag来查找,但是这个就要保证tag不能变
    }

    // Update is called once per frame
    void Update () {

    }
    }
    ...

  2. 利用鼠标射线,探究鼠标与物体的碰撞方式
    ...
    void Update () {
    Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    bool isCollider= Physics.Raycast(ray, out hit);
    if (isCollider)
    {
    Debug.Log(hit.collider);
    }
    }
    ...

  3. 显示射线方向
    Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
    射线的起点在屏幕上

Application

  1. dataPath


    datapath
  2. Streaming Assets
    声音文件之类的,可以用datapath去查找


    Streaming Assets

    里面资源不会被打包,放的是什么路径,读取的时候就是什么路径,不会被做成unity的格式,资源不会被合并

  3. 各种目录
    ...
    void Start () {
    print(Application.dataPath);//返回工程所在目录
    print(Application.streamingAssetsPath);//文件流读取数据
    print(Application.persistentDataPath);//可以固有化数据
    print(Application.temporaryCachePath);//临时目录数据
    }
    ...


    image.png
  4. Application下常用变量(多静态)
    companyName
    identifier(用来表示包名)
    installName
    installMode
    isEditor
    isFocused
    isPlaying
    platform
    RuntimePlatform//判断当前的平台
    isPlaying
    Quit
    OpenURL
    79.Application,做各种自我判断
    ...
    void Start () {
    print(Application.identifier);
    print(Application.companyName);
    print(Application.productName);
    print(Application.installerName);
    print(Application.installMode);
    print(Application.isEditor);
    print(Application.isFocused);
    print(Application.isMobilePlatform);
    print(Application.isPlaying);
    print(Application.platform);
    print(Application.unityVersion);
    print(Application.version);
    print(Application.runInBackground);

    Application.Quit();//build出来之后使用的
    Application.OpenURL("www.sikiedu.com");
    ScreenCapture.CaptureScreenshot("游戏截图");
    

    }

    // Update is called once per frame
    void Update () {
    if (Input.GetKeyDown(KeyCode.Space))
    {
    UnityEditor.EditorApplication.isPlaying = false;//只能在编译器情况下使用
    }
    }
    ...


    自我判断

scene

  1. AsycOperation.progress


    AsycOperation
  2. SceneManager


    sceneManage
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容