编辑代码

vs快捷键
布尔运算符
gotO 
enum 
unity 的scene窗口渲染模式

shading mode 网格Mesh显示模式

Editor 自定义editor工具

旋转 Quaternion  欧拉角 四元数

  Canvas  的Render Mode:
Canvas Scaler的UI Scale Model:

RawImage 与Image

设值view的层级 把imge拉倒最上层

属性的各种用法
 常用数学方法
 触摸touch
 素材格式
 组件的操作
 button
修改图片sprite 
 打开一个网页
 Toggle 开关
  滑动条 slider
    mask 遮盖
    Text截取
    自己创建dll类库
    pc平台,调用c/c++代码
    安卓平台调用c/c++  
    unity的特殊文件夹:
    
编译器扩展方法
Input使用

 Texture 组件
 屏幕特效实现原理
  导入unity 内置的屏幕特效
数组转List
 List转数组
 ------------
      buildSetting 中的第一个场景,就是启动场景
      float 32为浮点数
 fixed 定点浮点数,计算更准
  half 减半的浮点数
----------------------------


------------------------------------------------
不支持围绕一个物体旋转,每次旋转都是围绕视野中心旋转,如果需要绕物体旋转,先选中物体,然后按F建,会让物体放入视野中心点

添加物体默认会放入视野的中心点

DX中默认顺时针为正向 OPenGL 默认逆时针是正向
EventSystem.current.IsPointerOverGameObject();鼠标点击在UI上返回true

   鼠标原点 在左下角,x向右为正,y向上为正

  UGUI坐标: 原点在控件的不定位置,有pivot锚点决定,x向右为正,y向上为正

    屏幕坐标和UGUI坐标的转换
    RectTransformUtility.ScreenPointToLOcalPointInRectangle

    拖拽的实现
协议 IDrawHandle 实现方法 OnDraw(PointerEventData eventData)

eventdata.position 是鼠标坐标(Input.MosePosition)
 
 RectTransformUtility.ScreenPointToLOcalPointInRectangle屏幕上的鼠标坐标转化为ui的本地坐标
 返回值为bool表示坐标是否在UI上
  recttransform.anchoredPosition 是设置UI的xY值
拖拽抖动,是因为渲染的速度与拖拽不一致导致,解决办法,拖拽的坐标转化放到canvas上。因为画布大小不会变

如果要每次鼠标按下的位置都是物体的中心点,就需要把位置跟第一次按下的位置进行相减,这样才不会出现,拖拽时猛地跑到其他地方的现象

地形 Terrain:用图来表示地点的高度,动态的根据需要生成地表
粒子系统Particle System

LOD :Level of  detial  远处的物体使用小的少的像素来渲染
 实现技术:不同距离放置不同的物体
 2D Sprite(2d精灵图片)
 Occlusion  Culling遮挡剔除 基于camera的视椎体(Clipping Planes)而定,
 2d游戏 camera 必须设置为orthographic正交相机
------------------------------------------------

Resharper 代码补全插件

Home  定位到本行代码的最前方 
end   位到本行代码的最后方
PageUP  定位到本页代码的最上方
pageDown 定位到本页代码的最下方
 shift  位置1  shift 位置2 选中位置1 到位置2 的代码
Delete :删除后面的字符
BackSoace 删除前面的字符
 Insert 插入模式 与覆盖模式
 ---------------

 布尔运算符 ! &  ^  |   &&
 gotO  代码标签 任何之后都可以直接跳转到标签处


------------------------------------------------
enum testType {
    kk,// 默认取值从0开始
    ff,
    gg

    // 接收用户输入的一行文本
    string str=  Console.ReadLine();
    // 类型转化
     int v = Convert.ToInt32(str);
     //打印
     Console.WriteLine(“  {0}   {1}”,str,v);
     //程序暂停
     Console.ReadKey();
     //求平方根
     Math.Sqrt(i);
      
      //随机数
       Random random = new Random;
        int a = randoem.next(1,8);// 包前不包后


4.unity 的scene窗口渲染模式:

      Render path 用颜色代码渲染的路径  绿色代表颜值光照, 红色正向渲染 红色顶点光照
      overDraw:透明物体简影来渲染物体
      Mipmaps:使用颜色代码显示理想的纹理尺寸。红色 纹理大于所需尺寸 蓝色;表示纹理可以再大一些 与分辨率等有关,只能做参考使用

shading mode 网格Mesh显示模式:
   shaded着色模式 wirefirame相框模式,仅显示网格 shaded wireframe


-----------------------------------

6. Editor 自定义editor工具
 GUID:表示一个资源的唯一标识符,可以通过guid来查找存在自然文件
     Selection:unity中用于操作和管理编辑器中的选择对象,
     selection.assetGUIDS: 获取当前选择的资源的GUID数组

     AssetDataBase.GUIDToAssetPath:通过guid获取资源文件夹路径
     DirectoryInfo(resPath)根据资源文件路径获取文件夹信息
------------------

旋转 Quaternion  欧拉角 四元数
    欧拉角: 0 ~360 在gameobject的详情版面上就是欧拉角 使用vector3表示
     四元数:比欧拉角精确
      
      创建一个欧拉角
        Vector3 rotate= new Vector3(0,30,0) 表示只在y旋转30度

      创建四元数 Quaternion
        Queternion quaternion = Queternio.identity ;//无旋转的四元素
         queternion = Queternion.Euler(rotate);//通过欧拉角创建四元数

         // 看向一个物体。物体自然会发生旋转
         queternion = Queternion.lookRotation(new Vector3(0,0,0));

         四元数转化为欧拉角
          rotate= queternion.eulerAngles;

Quaternion:用于3D旋转表示的函数,通过四元数表示,表示了3D空间的旋转角度和方法,也可以解决万向锁的问题
    ---------------------------------------------------------------------------- 
  
  Canvas  的Render Mode: 
            1 screen Space -overlay:UI在所有场景gameobject的最前面   此时sort order决定了多个canvas的顺序,sort order值大的在前
 
             2 screen space-camera:  指定一个canmera。可以设置距离摄像机的距离,场景的gameobject可以跑到canvas之前 

Canvas Scaler的UI Scale Model:
               1.constant piexl size 无论屏幕如何变化.UI元素不会变化
                 2. Scale With Screen  根据制定的分辨率的,跟屏幕的大小进行等比例缩放

 


   
  设值view的层级 把imge拉倒最上层
  RectTransform rft = image.rectTransform;
  rft.setAsLastSibling();//把imge拉倒最上层


------------------------------------------------------------------------------

属性的各种用法

1、给属性添加标签
[Header("模型")]
public int name;
 在inspector面板上就会在属性name前多一行模型,就想给属性添加了注释的感觉

 2.给属性添加提示信息
 [Tooltip("名字")]
 public string name;  
 在Inspector面板上name属性长时间鼠标停留会出现提示问题名字

 3.添加空行
 [Space]

 4.规定返回range

 [Range(0,100)]
 public float value;
 Inspector面板上会在value上一行出现一个1.100的进度条,可以直接给value赋值

 -----------
 常用数学方法
 Mathf.Pow(a,2); a的2次方
 Mathf.Sqrt(b); b 被开平方
 14.mathf.Round  mathf.cLamp  mathf.Lerp

mathf.Round 四舍五入
 mathf.Lerp 插值
 mathf.Clamp 把值限制都某个范围之类,简称限值
 -----------
 

5. 

6.触摸touch
Input.touchCount 获取触摸的手指数量
Input.GetTouch(0)获取第一个手指的触摸信息
Input.GetTouch(0).phase获取第一个手指的触摸阶段。分为Began 开始, Moved 移动  Ended 结束  Canceled取消
-----------------------------------------------------------------------------------
素材格式----------------

常用音频格式:MP3 wav ogg等
常用视频格式 MP4 mov  wmv等
常用图片格式 jpg png bmp tif tga psd等
字体格式 otf ttf

素材管理:
 一般按游戏模块来进行存放,在模块文件夹中按资源类型存放

---------------------------


 音频主要用于背景音乐 角色配音 特效音
 视频主要用于新手教程 技能介绍

音频播放: Audio Source
 主要参数: AUdioClip播放的音频
           play on awake是否自动播放
           loop是否循环播放
           spatial Blend 接近gameobject则声音大,远离则声音小。调整这个参数

摄像机等添加Audio listen 音频监听器

---------------------
视频 Video player  
-----------------------

组件的操作

继承与MonoBehaviour之后的脚步可作为组件挂载到物体上

脚本添加组件 gameobject.AddComponent<组件类型>()

脚本查找组件: (查找多个同类型组件是类似的api 如gameobject.GetComponents等,返回一个组件数组)
    1.在gameobject自身上查找  gameobject.GetComponent<组件类型>()
    2.在gameobject自身及子类上查找gameobject.GetComponentInChildren<组件类型>(),先在自身查找
    3.在gameobject自身及父类上查找gameobject.GetComponentInParent<组件类型>(),先在自身查找
脚本查找多个同类型组件

 脚本激活或者关闭组件 设置组件的enabled属性,true激活, false关闭 

 删除组件 Destory(组件对象)
------------------------------------------------------

button:
 button组件Transition 可以选择Sprite Swap 在不同的点击状态时设置不同的图片
   Button 添加事件 button.onClick.AddListenner(functionName) 注意这种方法要求无参数无返回
    
       有参数的方法通过委托delegate进行添加

        button.onClick.AddListenner(delegate{b(index);});
         void b(int index){}
--------------------
修改图片sprite 
public sprite testBg;
 getComponent<Imgee>.sprite = testBg;
------------------
 打开一个网页
 Application.OpenURL("https://www.baidu.com");
-------------------------
Toggle 开关
 isOn == true 显示的是CheckMark的图片。 否则选择BackGround的图片

 开关组就是给toggle设置一个group,这个group是任意一个有Toggle Group 组件的空物体
 设置了group的toggle选中其中一个isOn == true ,其他的isOn就会==false

-----------------------
 滑动条 slider 
 获取值.value  手动添加事件.onValueChange.additive(someFunction);
----------------
 
-------------------------
  mask 遮盖 父物体添加mask组件则子物体超出父物体的部分就不会显示


Sprite图片 填充效果 一张底图Image 一张子Image、
子Image设置Sprite图片,再选择Image Type 为filled Full Method 选择自己需要的,比如Vertical。
然后修改FillAmount的值就可以填充图片,达到填充的效果
-----------------------

Text截取
 属性Horizontal OverFlow设置为overflow超出显示范围的不会别截取
 属性Vertical OverFlow设置为overflow超出显示范围的不会别截取

 
-------------------------------


自己创建dll类库

1.visual studio   文件--》 新建--》 项目---》 类库.Net Framework
2. 视图 ---》 解决方案管理器---》 引用---》添加引用 -》 浏览(选择到unity安装目录下--》 Editor--》 Data --》Managed) 选择需要的已有dll

3. 在项目中编写自己的方法,记住用public 修饰
4.生成解决方案: 解决方案管理器窗口,右键“生成解决方案”
 生成的dll文件路径:项目文件夹下--》 obj--》Debug  ---》 项目名.DoneDestoryOnLoad(oldObj);

 使用自己创建的dll
 1.将生成的dll 直接拖入需要的项目文件夹

 2.using dll的项目名

3.new一个dll中的类,然后直接调用方法即可
-------------------------------------------------------



--------------------------
pc平台,调用c/c++代码

unity的Plugins  下建立 x86 x86_64 放pc的代码,要用c来写。在unity的cs中使用时用DllImport来声明

安卓平台调用c/c++  
 用c写放入 Plugins /Android/libs 建立文件夹x86 armeabi armeabi-v7a 在unity的cs中使用时用DllImport来声明

     unity的特殊文件夹:
              Hidden Foildrts 隐藏文件夹
                Standard Assets 第一批加载的文件
                Editor 文件夹,只在编辑器模式下有效。不会打入最后的运行包中
                Plugins  与其他平台的交互
                Resources  会打入运行包中,可以动态访问
                Editor Default Resources  只提供给编辑器内部使用,
                Gizmos 编译器的一些东西,用于自动以gizmos
                streamingAssets 会打入运行包中,包含的是unity不能原生识别的资源,必然自己的json等,会映射到移动平台安装包的某一个可读文件夹
---------------------------------

编译器扩展方法
 方法1:EditorWindow
 方法2:CustomEditors

-----------------------------------
Input使用
鼠标键盘
Input.GetKey(KeyCode.A) // 任何状态的只有跟a有关都会调
Input.getKeyDown(KeyCode.A) // 第一次按下
Input.getKeyUp(KeyCode.A)// 松开,再次按下会得到getkeyDown
同理 Input.GetMouse

触摸:用于移动设备,
touches[] touches =  InPut.touches;  
包含每一个手指的fingerId,deltaposition(与上次触摸的间隔位置) deltaTime(与上次触摸的间隔时间),phase,positon


屏幕键盘   TouchScreenKeyBoard t=   TouchScreenKeyBoard.open("默认文字“,keyBoardType.Default)
 获取屏幕键盘用户的输入 t.Text


 Texture 组件: 贴图,物体表面的材质对光的反射程度
   1.2d贴图,(sprite(2D and UI))
   2.天空盒子(Normal map)
   3.3d贴图
  TextureType: Advanced 
  Non Power of 2: 贴图的边长不是2的n次幂的处理方式,建议边长是2的ni次幂
     1.在安卓或者pc 边长不是2的n次幂。会自动修改 必然 255 * 512 会改成 256 * 512   257 *512 会改成512 * 512 

    2.在ios平台 256 * 512 会转成512 * 512  意思就是要求贴图必须是方形的
  Read/Write enabled 需要动态修改时必须勾选,勾选后内存会加倍
Import Type:默认是defalut normal 是法向贴图 light 是光照贴图
 Generate Mip Maps:是否产生minmap 。意思是贴图远是会产生小图,同理内存会大
 Wrap mode: clamp 采集到边缘-1从另一次再次采集 repeat则是一直采集边缘的值
 Filter Mode: bilinear 小图到大图。point 找最近的点 bilinear 就是线性插值一个接近的点
 Aniso level 一般设置为1,个样异性。必然远程的房子可以清晰,路就会模糊,那方式的aniso level值就是比较高的
 Format 压缩格式 
   pc 建议用RGBA  compressed DXT5 1:8
   安卓 RGBcompressed ETC 4 1:8 无alpha通道
   ios: RGB Compressed PVRTC 2 1:8
       ----------------------------------------------------

 屏幕特效实现原理:
    把当前渲染的一帧图像,先渲染到纹理,形成一张图片,然后对图片进行特效处理,最后把处理后的图片显示到屏幕上

 
 导入unity 内置的屏幕特效
屏幕特效 :对场景在像素方面的处理 
 包:export - custom export -effect 挂载到camera上
 image effect  
    比如Anitialiasing 反走样,。边缘锯齿,边缘模糊
     bloom 物体边缘反射的光。像霓虹灯 名称叫灰光
     blur 镜头模拟。高斯模拟
      motion blur  物体模糊,就想人走路有残影
      DOF 景深。焦点位置清晰,其他部分模糊,就想相机的聚焦,或者说人像模式
      Global Fog 全局雾。效果不明显
      Screen Space Anibient  Occlusion 模拟物体的子遮挡。墙角的阴影

CubeMap 用于表达一个高光物体,光滑物体,比如赛车中的车,会有周围物体的倒影,对周围物体的反光
。对呀shader所在位置skybox -》 cubemap  需要的贴图是6张连着的图



------------------------------------------------------------





-----------------------------
数组转List
 int[] g
 List<int> listG = new :List<int>(g)


 List转数组
   List<int> listG = new :List<int>()
   inT[] G = listG.ToArray();


------------------------------------------------