二十三. Camera组件(类)


  1. 通过获取camera组件把场景中鼠标的位置(点)转化为射线
mainCamera=GameObject.Find(“MainCamera”).GetComponent<Camera>();
  1. 获取camera组件的另一种方法:通过main camera身上的标签进行查找
    当camera的标签为MainCamera时可以使用
mainCamera=Camera.main;
Void Update()
{Ray ray=mainCamera.ScreenPointToRay(Input.mousePosition);RaycastHit hit;Bool isCollider=Physics.Raycast(ray.out hit);If(isCollider){Debug.Log(hit.collider);}
}
  1. ScreenPointToRay:屏幕上的点转化为射线
Ray ray=mainCamera.ScreenPointToRay(new
Vector3(200,200,0));Debug.DrawRay(ray.origin,ray.direction*10,Color.yellow);//将固定点(200,200,0)转化为一条黄色的射线

(射线的起点在屏幕上而非摄像机,视野范围是摄像机的椎体范围)


二十四.Application类


  1. Streaming Assets文件夹下的资源不会特意“unity化”,而是保留原本的资源格式和路径以便下一次读取,而不会与Unity文件一起压缩处理。

  2. Application.datePath:存放数据(工程所需要的数据)
    Application.streamingAssetsPath:通过文件流来读取的一些数据
    Application.persistentDataPath:可以进行实例化的数据
    Application.temporaryCachePath:临时缓冲数据

  3. Application.companyName:公司名
    Application.productName:产品名
    Application.isMobileplatform:判断是否为移动平台
    Application.isPlaying:判断是否正在运行游戏
    Application.runInBackground:是否可以在后台运行
    Application.Quit():退出游戏
    Application.LoadLevel():加载场景(基本上已经被弃用淘汰了)
    Application.OpenURL(“网址”):打开某个网址
    Application.CaptureScreenshot(“保存的名字”):用来截图
    在编译器模式下停止运行游戏:

if(Input.GetKeyDown(KeyCode.Space))
{UnityEditor.EditorApplication.isPlaying=false;
}

二十五. 加载切换游戏场景


  1. using UnityEngine.SceneManagement;
    SceneManger.LoadScene()
    单独加载整个场景,destroy之前场景的所有物体

  2. 异步加载场景的方式:
    SceneManger.LoadSceneAsync
    优点:返回AsyncOperation对象,通过该值可以判断场景加载进度
    延伸:可以设置加载进度条

  3. SceneManger中的一些方法
    sceneCount:当前加载的场景数量
    sceneCountInBuildSettings:
    CreateScene:创建场景
    GetActiveScene:获取到当前运行的场景(及其中的一些相关信息)
    GetSceneAt:获取已经加载的场景中的其他场景的一些信息


二十六. 射线检测


 Ray ray=new Ray(transform.position,transform.forward, transform.forward);
bool isCollider=Physics.Raycast(ray);//射线无限长Debug.Log(isCollider);

缺点:无法得知与射线发生碰撞的是哪个物体

Ray ray=new Ray(transform.position+transform.forward,
transform.forward);
bool isCollider=Physics.Raycast(ray,1);
//可以设置射线的长度
Debug.Log(isCollider);
Ray ray=new Ray(transform.position+transform.forward,
transform.forward);
RaycastHit hit;
bool isCollider=Physics.Raycast(ray,out hit);
Debug.Log(isCollider);
Debug.Log(hit.collider)
//获取到碰撞到的物体的名字
Debug.Log(hit.point);
//射线碰撞到物体的点的坐标
  1. 一个关于层Layer的用法

指定不同的物体在不同的layer,射线检测可以指定射线只与某一层或者某几层的物体发生碰撞,可以有效规定出射线检测不到的物体

bool isCollider=Physics.Raycast(ray,Mathf.Infinity,LayerMask.GetMask(“Enemy1”, “Enemy2”));//只与在Enemy1和Enemy2两层上的物体发生碰撞

(需要专门指定,未指定的物体一般在floor层里)

  1. 2D射线检测Physics2D.Raycast()
    与3D检测使用方法相同

  2. Physics.RaycastAll()与Physics.Raycast ()的区别

射线检测默认返回检测到的第一个物体,而RaycastAll则是将所有检测到的物体形成数组返回


二十七. UGUI事件监听


1.直接拖拽

2.通过代码添加

例:

using UnityEngine.UI;public GameObject btnGameObject;btnGameObject.GetComponent<Button>().onClick.AddListener(this.
ButtonOnClick);Void ButtonOnClick()//监听Button事件

3.建立鼠标相关事件的方法:

  using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
public class UIEventManager2:MonoBehaviour,IPointerDownHandler

(会有小灯泡提示自动生成接口方法的代码)

缺点:只能监听该放置脚本的控件的事件(Raycast Target必须要确保勾选)

一些常用的鼠标事件接口实现:

IPointerDownHandler(按下)

IPointerClickHandler(点击)

IPointerUpHandler(抬起)

IPointerEnterHandler(鼠标移到该控件上面)

IPointerExitHandler(鼠标移出)

一些常用的与拖拽有关的事件接口实现:

IBeginDragHandler(开始拖拽)

IDragHandler(拖拽中)

IEndDragHandler(拖拽结束)

IDropHandler(拖拽结束后鼠标仍停留在物体上 )


二十八. 角色控制器CharacterController


得到角色组件

 private CharacterController  cc;public float speed=3; 

在Start函数中进行获取

cc=GetComponent<CharacterController >();

控制移动

float h = Input.GetAxis(“Horizontal”);
float v = Input.GetAxis(“Vertical”);
cc.SimpleMove(new Vector3(h,0,v)*speed);

SimpleMove有自动模拟重力使物体掉落到地面上的功能
Move没有
且move使用时需要乘以Time.deltaTime

cc. Move(new Vector3(h,0,v)*speed*Time.deltaTime);

碰撞检测

private void OnControllerColliderHit(ControllerColliderHit hit)

二十九. Mesh的设置


Mesh Filter 控制网格Mesh Renderer  根据材质Element的设置决定物体的材质

如果游戏物体莫名变成紫色说明材质物体丢失


三十. 版本变更


对于一些因为版本变更而已经弃用的方法如audio.Play();

可以更改书写方法:

GetComponent<AudioSource>().Play();

但是更建议使用提前定义然后在Start中获取的方法,因为ComPonent的调用非常耗费性能

Public AudioSource au;
au = GetComponent<AudioSource>();

心得体会和学习总结:


经过这些天对于Unity API的系统性学习,我对于C#有了更多的了解。

之前在课堂上学习的时候虽然也做笔记,但总觉得一知半解,很多东西因为不知道为什么,所以总是记不住。

这次的学习在前期的时候让我感觉到了一种恍然大悟的感觉。就比如说前面的课程讲到Time类的时候讲到了deltaTime,我们之前做游戏的时候经常会用到,但是我一直不太清晰,所以听完了课程的讲解以后就印象深刻,还有Update和FixedUpdate的区别,实例化的方法等等,因为之前见过实例的缘故,记起来就特别容易。

中期的时候,老师把所有的Component、GameObject等等都串到了一起,我对于类、对于方法和属性、对于继承等等就清晰了起来,虽然有时还是会弄混,但是确实比之前有了很不一样的感觉。

再往后就发现,很多东西其实我们一开始就接触到了。就像后面第二次讲到Camera的时候,所用到的在屏幕上识取到鼠标的位置Input.MousePosition是之前讲Input类的时候讲到的,学到射线的时候也能发现其与Camera息息相关。

但是也有比较头疼的一面就是,干讲知识点实在是太枯燥了。如果说之前听课听到我用到学到过的方法有多欣喜多了然,那后边听到那些我没用到过甚至根本想不到有什么用的方法就有多无聊,硬着头皮好不容易听完,基本上也忘得差不多了,如果不是因为有写笔记,可能也就没有什么学习过的痕迹了。

所以还是说,学习要理论与实践相结合。至少对于我而言,我们或许记不住看起来没什么不同的知识点,但是游戏制作过程和实现的功能这种画面感较强的记忆会让我们对于运用更加得心应手。

不过其实也不是雁过无痕,下一次见到这些知识的时候,大概会觉得无比熟悉吧。说起来,到也确实是因为这些“硬着头皮”听下来的课,感觉脑子里的脉络在一点一点变得清晰。

总之也算是结束了这段学习。马上就要迎来新一轮的学习了,我也蛮期待看看自己在Unity的学习上有没有变得有些不一样。

期待下一次相遇~


小结:
关于Unity API的学习就暂且告一段落了。
以上列举出了一般情况下的常用方法和类,但是由于版本更新和个人理解有限,可能会出现一些偏差,所以具体情况具体分析。
大家也可以善用百度、谷歌等等搜索了解更多的信息。
还有就是这些知识可能过于“干”,大家在学习Unity的时候,建议结合实例进行针对性的学习和了解。
kk后续还会持续更新学习到的Unity和实际案例的学习和制作步骤,也欢迎大家关注。
一起来学习吧。
最后,学习愉快~o((≧▽≦o)

我的Unity学习笔记----------API常用方法和类详解(四)相关推荐

  1. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  2. 小猫爪:i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解

    i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解 1 前言 2 FlexCAN简介 2.1 MB(邮箱)系统 2.1.1 正常模式下 2.1.2 激活了CAN FD情况下 2. ...

  3. IP地址和子网划分学习笔记之《IP地址详解》

    在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. IP地址和子网划分学习笔记相关篇章: 1.I ...

  4. 我的学习笔记——CSS背景渐变(Gradients)详解

    我的学习笔记--CSS背景渐变(Gradients)详解 一.线性渐变(Linear Gradients) 1.语法 background-image: linear-gradient(directi ...

  5. IP地址和子网划分学习笔记之《子网划分详解》

    一,子网划分概述 IP地址和子网划分学习笔记相关篇章: 1.IP地址和子网划分学习笔记之<预备知识:进制计数> 2.IP地址和子网划分学习笔记之<IP地址详解> 3.IP地址和 ...

  6. mmdetection学习笔记(二)配置文件详解

    配置文件详解 四项基础配置 1. _base_/datasets 2. _base_/models 3. _base_/schedules 4. _base_/default_runtime.py 基 ...

  7. redis学习笔记(7)之redis哨兵详解

    redis哨兵详解 sentinel命令 客户端连接 素材代码 思路 实现过程 哨兵的切换实现原理 发布订阅基础 哨兵的实现原理 部署建议 需要关注的问题 代码流程 内容来源为六星教育,这里仅作为学习 ...

  8. MIT 6.824 学习笔记(一)--- RPC 详解

    从本文开始,将记录作者学习 MIT 6.824 分布式系统的学习笔记,如果有志同道合者,欢迎一起交流. RPC 的定义和结构 RPC 全称为 Remote Procedure Call,他表示一种远程 ...

  9. redis学习笔记(2)之redis主从详解

    redis主从详解 主从详解 主从配置 拓扑 原理 数据同步 概念 复制偏移量 复制积压缓冲区 主节点运行ID Psync命令 全量复制流程 部分复制流程 心跳 缓冲大小调节 读写分离 内容来源为六星 ...

最新文章

  1. micropython stm32f103_micropython
  2. 对话吴恩达:为什么说制造业会是首个聚焦AI转型的行业?
  3. Dynamic Web Module 3.0 requires Java 1.6 or newer
  4. 语音信号处理MATLAB实现
  5. MySQL用户管理和访问权限
  6. 30美元攻陷Intel SGX enclave,Intel 不打算修复
  7. (转) 穿越NAT总结
  8. nodejs mysql 执行多条sql语句
  9. python使用webdriver处理上传文件(使用AutoIt)
  10. Arcgis培训内容
  11. GB28181学习笔记2 SIP测试工具 Yate安装使用
  12. [励志英语片段]practicing deliberately
  13. GAMS系列分享20—GAMS电力系统—目标函数增量线性化
  14. 【强化学习】悬崖寻路:Sarsa和Q-Learning
  15. 计算机重启遇到你的账户已被停用,win10系统提示administrator您的账户已被停用的解决方法...
  16. 防止FPGA设计中综合后的信号被优化
  17. 笔记:蛋白质结构预测在线工具
  18. pdf怎样压缩文件大小?pdf大小怎么压缩?
  19. 设置Ajax为同步请求
  20. 网易云音乐插件现已登陆 Visual Studio Code

热门文章

  1. 综合练习4 厘米与英寸互转
  2. 在vs2010下学《directx9.0 3D 游戏开发编程基础》
  3. 5 面试官问你问题,该怎么回答,这里有总结的攻略--绝密,程序员大厂面试求职大揭秘!
  4. 香港和新加坡,谁是亚洲加密金融中心?
  5. 进程(六):进程池(Pool)
  6. 信用风险建模 in Python 系列 2 - 独立模型上
  7. c语言顿号怎么打用电脑,笔记本顿号怎么打 【操作办法】
  8. 伪装为 吃鸡账号获取器 的QQ木马分析
  9. 全网最全的SimpleDateFormat类日期表
  10. 二手air pods 入手须知