Unity 知识总结

//单纯的日常总结, 会持续不断更新

UI部分

1.UI组件 ——InputField . onEndEdit.AddListener(事件)   当输入完成,摁下回车(Enter)键 也会触发事件响应

2. 设置当前选择的游戏物体: EventSystem.current.SetSelectedGameObject(gameObject);

  目的是为了在触发OnDeselect 之前 设置当前物体为选择状态;在激活UI面板的时候使用 (结合EventTrigger)

3.在加载图片时出现问号 ?  有可能是路径的问题(Window 路径 和Unity 路径是不同的  需要进行分隔符‘\’的转换);

4. 在使用Scrollbar时,这个组件只会根据其 Content(内容组件的长度)来改变自身的大小,而在控制Content随子物体进行改变时,需要添加一个重要的组件  Content Size Fitter

5. 控制背景图片随着文本的内容进行缩放处理:

  (1)在父物体背景图片上添加Horizontal Layout Group,以及Content Size Fitter 组件,控制本身使用子物体的长,宽,

  (2)在文本内容上添加Content Size Fitter 组件,是文本框随着文本内容的多少改变大小。

  (3)然后将本文框的锚点设置到左上角,是文本框向下进行延伸。

6.使用鼠标滚轮可以直接控制Scroll View的滑动,只不过  官方设置的默认值比较小: 只需增加 Scroll Sensitivity属性的数值。

7.在初始状态下需要UI组件默认处于激活/点击状态  ?  只需要调用 Select()方法即可。

8.在使用代码对Image的颜色进行赋值时:需要/255:     imageBg.color = new Color(2/255.0f, 193/255.0f, 226/255.0f);

  将颜色字符串格式转换为Color 时:API为:ColorUtility.TryParseHtmlString("#00A8C5", out color) ;

  将Color转换为颜色字符串时:API为:ColorUtility.ToHtmlStringRGB(Color.red);

9.再Scroll Bar组件的使用当中:有时需要取消拖拽(滑动效果),只再ScrollBar当中相应:只需要取消ScrollRect源码脚本当中 IBeginDragHandler, IEndDragHandler, IDragHandler,接口的调用,即可 。

 建议:最好重写这个脚本,特殊情况,特殊处理。

10,在动态修改ScrollBar  value值,因为需要记录当前阅读的位置,所以需要记录当前ScrollBar value的值,然后在下一次打开之后动态赋值,但是在实操过程中修改后没有起作用:

  解决办法:因为记录的当前Value值是float类型,在赋值过程中,出现了NaN的情况,所以不会有作用

       只需要将保存的值,转化为1~n个小数点的float值 就可以成功赋值,并且有了效果。

  如果仍然没有效果,可以尝试在打开后下一帧调用赋值方法。

11,在排序时,需要使用的Layout Group,如果需要子物体的排序根据生成顺序从下到上逆序的话,只需要勾选ReverseArrangement即可(新版本(2020之后的)才有这个参数)

 12. Slider组件,用AD键会改变值,  只需要将Slider组件  Navigation 属性 修改为None 即可

13.LineRenderer  再绘制的时候,需要的Points 坐标为世界坐标,需要将点进行转换

转换

1. float 转换为double 时,不会直接转换,而是转换为无限趋近的值,所以在转换的过程中,可以先将float转换为String,然后在转换为Double,进行过渡转换。

2. 动画控制 -CrossFade()   不需要在状态机添加任何的逻辑,只需要在CrossFade 当中设置指定的动画即可完成动画的切换。

 3.stirng.Trim(’*‘),  针对的只是 一个字符串  首尾 首位字符。如果首尾的首位字符不是需要删除的字符 则结束该方法;

4. 获取小数点后几位: Math.Round();

5.物体朝向目标位置

  Vector3 rotateVec = target.position - this.position;
  Quaternion newRotation = Quaternion.LookRotation(rotateVec);
  this.rotation = Quaternion.RotateTowards(this.rotation, newRotation, speed);

6.将物体朝向目标物体

 //在更新帧中调用

  Vector3 rotateVec = pointGam.transform.position - this.Transform.position;
  Vector3 newVec = new Vector3(rotateVec.x, 0, rotateVec.z);
  Quaternion newRotation = Quaternion.LookRotation(newVec);
  this.transform.rotation = Quaternion.RotateTowards(this.transform.rotation, newRotation, 100);

7. 将2*8 用其他形式进行表示

  2<<3    :意思是将2 左移三位,2  二进制数是00000010,左移三位就是00010000.转换为十进制就是1*2*2*2*2 =  16

      其实左移一位相当于乘2,

8.数字前后补零

  数字左补零:int.ToString().PadLeft(2,'0');

     数字右补零: int.ToString().PadRight(2,'0')

 

 

拓展

1.在方法的参数前+this   代表拓展 该类,也就是说 在当前类下新添加一个静态方法,

例子:  public static string HotFixTypeFullName(this string typeName)
     {
       return Utility.Text.Format("{0}.{1}", “当前的类型名称”, typeName);
     }

在其他方法当中调用:

     string str = "123";

     string newStr = str.HotFixTypeFullName;

展的类型时 类(class),在测试的时候 才发现 int 是结构体  尴尬!!!!!!!!!!

 

 

被自己忽略Unity API

1.transform.find("名称/名称");

  可以按照名称或者子物体嵌套子物体,查找到任意一个子物体

 2. protected void OnValidate(){}

  当脚本进行编译或者检视面板的值被修改是会被调用;(仅在编辑器中调用)

知识小结:

1.值类型是有无参构造函数的,而 引用类型 string 是没有无参构造函数的。 

 2.ref 关键字让形参成为实参的别名;

  In:过程不会改写In的内容 ,默认的传递方式,即向函数内部传送值。(在实参为引用类型时可以避免不修改)
  Out和out:传入的值不会被过程所读取,Out在传入的时候,参数的数值会清空,但过程可以写 。只出不进
  ref:可以把参数的数值传递进函数 ,过程会读,会写 。有进有出。

 

大家有发现的有趣的小问题,可以分享出来,一起进步

posted @ 2021-09-30 16:22  H❥嘉  阅读(315)  评论(0)    收藏  举报