Unity相关知识

- Event Trigger不能加在空物体上,即使这个物体有面积,也不会触发任何Event.


- transform.position是世界坐标。gameObject.getComponent<RectTransform>().anchoredPosition是Canvas上UGUI的像素值。UGUI的像素与世界坐标的单位,有换算。Camera.size就是其换算系数(size*2=屏幕高度,比如size=5,屏幕高度就是10单位,就相当于unity3D坐标中的10米。如果此时canvas高为720像素,就相当于720像素=10米,72像素=1米)。具体可查看Camera.size.

当物体有父级时,inspector面板中的position显示的是相对坐标,父节点是UGUI的显示的是像素,父节点是3D物体的显示的是3D坐标.

transform.position                                                         不论是UGUI物体还是3D物体,该属性都是3D坐标
GetComponent<RectTransform>().position                  不论是UGUI物体还是3D物体,该属性都是3D坐标
GetComponent<RectTransform>().localPosition           3D物体,该属性都是3D坐标;UGUI是像素值
GetComponent<RectTransform>().rect                         UGUI的属性,具体啥意思还在研究中
GetComponent<RectTransform>().anchoredPosition    UGUI的属性,相对锚点的像素值


- "Some objects were not cleaned up when closing the scene". 因为,在OnDestroy时,又创建了一些gameObject。比如,在OnDestroy方法里面,调用了DOTween的函数。


- Layer-Canvas组件,设置的sorting layer对子物体生效,即子物体默认和父物体的的sorting layer, order in layer是一致的。但子物体有自己的sorting layer时,就替换了父物体的摄像机渲染顺序,即使sorting layer的设置与父物体一样,也会遮住其兄弟节点!


- Graphic Raycaster组件,对子物体生效,前提是子物体与父物体属于同一层级sorting layer, order in layer. Graphic Raycaster一般挂在canvas上,是EventSystem的一部分。如果某UI物体挂了canvas脚本去设置其sortingLayer, 为了让它响应射线,要再加一个Graphic Raycaster脚本让它接受射线,不然不会响应EventSystem事件。PhsicRaycaster一般挂在Camera上。


- 关于相机,它是图形渲染的呈现。有http://www.manew.com/thread-47076-1-1.html详细介绍了相机的属性。在此提醒一点:当相机设置了Target Texture后,它就不再向屏幕去渲染了,它会输出到这个Target Texture上面,不论它的depth为多少都不会在屏幕上显示了。


- 如果某物体在ScrollView中,在其上添加EventTrigger组件,并挂载PointerDown,PointerUp监听。当在scroll view里拖动这个物体时,它只响应PointerDown和PointerUp事件,而不会在scroll view里移动。如果用脚本实现IPointerDownHandler, IPointerUpHandler接口,该物体既能被拖动,也能响应手指按住和抬起的事件。


- 还是UGUI的Event。拖动一个有OnDrop事件的物体A到另一个有OnDrop事件的物体B上面,当松手时,会根据渲染优先级去响应drop事件,即,如果B压在A上,会走B的OnDrop,没有问题,因为B确实是接收到了Drop事件;如果A压在B上,那么会走A的OnPointerClick事件,没错,是OnPointerClick,因为A接收到了事件,而且是A本身,与B无关。

综上,当A,B两个物体,OnPointerClick和OnDrop事件同时存在时,拖动A到B身上,会根据渲染优先级,响应优先级高的物体身上的事件,如果A响应了事件,那么会走A的OnPointerClick,如果B响应事件,会走B的OnDrop.

实现了IPointerDownHandler, IBeginDragHandler, IDragHandler, IPointerUpHandler, IPointerClickHandler, IDropHandler, IEndDragHandler接口的控件。事件执行顺序为PointerDown, BeginDrag, Drag, PointerUp, PointerClick, EndDrag.


- Image和Text控件,都有Raycast Target选项,来表明自己是否接受射线


- JavaScript以及Java对DateTime的使用与C#不同。JS中new Date(1970,0,1).getTime()之所以是-8小时,是因为,new Date(1970,0,1)方法是本地时间,本地时间的1970,0,1换算成0时区后,要减去8小时,换成0时区的毫秒数来表示,所以是-8的毫秒数。new Date(-28800000),因为毫秒数是0时区的毫秒数,再换算成本地时间后,就是1970年1月1日。所以,getTime的毫秒数,永远是0时区的毫秒数.

而C#中,new DateTime(1970, 1, 1, 0, 0, 0)这个是0时区的滴答数,不是本地时间的滴答数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值