using System.Collections.Generic
using UnityEngine
using UnityEngine.UI
public class DropDownQ : MonoBehaviour {
Dropdown Dd
List<string> options = new List<string>()
// Use this for initialization
void Start () {
Dd = GetComponent<Dropdown>()
Dd.ClearOptions() //清除当前默认选项
///新加几个选项
options.Add("1")
options.Add("2")
options.Add("3")
Dd.AddOptions(options)
}
// Update is called once per frame
void Update () {
}
}
建个DropDown 把这个脚本贴上去看一下就明白了
不多说,先看看效果把!在iview中Table表格中有一个列描述数据对象(render),render是 columns 中的一项,自定义渲染列,使用 Vue 的 Render 函数。传入两个参数,第一个是 h,第二个为对象,包含 row、column 和 index,分别指当前行数据,当前列数据,当前行索引。
当然官网提供一个简单的使用方法: iView - A high quality UI Toolkit based on Vue.js
现在我们来实现,添加一个Dropdown 下拉菜单:
这里要注意下我描述的,1,2,3,4点,先不急,咱们先看下官网这个Dropdown组件
不难看出,讲一个组件写成render其实很简单,只需要写成这样
最后就是要注意下,绑定事件了,这里的on要写成nativeOn,才可以出发事件。
不知道 小伙伴看懂了原理吗?不明白就留言,我会及时回复你的。
在基于 Unity 的数字孪生应用开发中,经常有按下鼠标拖拽以旋转视野的需求,有时候我们发现在拖拽 Slider、Dropdown ,ScrollRect 时,UI下的视野也在旋转。
于是,在鼠标按下时判定是否是 UI 的需求便提上日程:按下时发现是 UI 就不旋转视野呗!
那么,如何判断鼠标按下时光标下面是 UI 呢,为什么说网络上流传的 EventSystem.current.IsPointerOverGameObject() 它就不香呢,笔者又有什么好的方式方法呢?
为什么说网络上流传的 EventSystem.current.IsPointerOverGameObject() 它不香?
答: 因为这个 API 获得的是最后一次 Raycaster 打到的 “EventSystem object” ,所以不能保证射线打到的是 UI 组件!
不是 UI 组件,那又会是什么组件?
答: 是能被 BaseRaycaster 打中的所有组件,亦即是能被 GraphicRaycaster、 PhysicsRaycaster 打中的组件,是 Unity 口中的 “EventSystem object”。
结论:
PhysicsRaycaster 是与场景中 3d 物体交互的,继而可得: IsPointerOverGameObject 方法打中的不一定是UI。
于是,场景中的对象如继承了形如: IPointerXXXHandler 类似的接口,鼠标按在了这类物体上,程序就会误以为是 UI,那视野旋转逻辑是不是就紊乱了?
在鼠标按下时,通过 EventSystem.RaycastAll 捕捉全部 "EventSystem object",然后判断列表第一个 data.module 类型, 如果是 GraphicRaycaster , 打中的是UI。
Talk is cheap, Show me the code!
使用实例见仓库: Github托管
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)