UGUI使用遇到问题总结
admin
2023-03-15 07:41:19
0

Image组件:动态改变Source Image.
1.gameObject.GetComponent().p_w_picpath.sprite = YourSprite;   (YourSPrite的获取方法有我是在前面定义Spites数组,拉图片入去的.有更好的方法请告诉我..)
2.gameObject.GetComponent.().sprite= Resources.Load("img/test/short/short_run_right",typeof(Sprite));
Resources.Load是读取Resources文件夹里的文件
真心好麻烦,求unity出方便点的方法....

我相信刚开始大家都会遇到这个[color=rgb(85, 85, 85) !important]问题....

任务系统点击Button按钮,角色执行了移动命令.解决方法如下
if (EventSystem.current.IsPointerOverGameObject())
        Debug.Log("当前触摸在UI上");                        
else Debug.Log("当前没有触摸在UI上");
安卓手机以上方法无效,详细方法
http://forum.[color=rgb(85, 85, 85) !important]unity3d.com/threads/ispointerovereventsystemobject-always-returns-false-on-mobile.265372/

我复制了过来:

void Update ()
{
               if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) {
                        if (IsPointerOverGameObject (Input.GetTouch (0).fingerId)) {
                                Debug.Log("Hit UI, Ignore Touch");
                        } else {
                                Debug.Log("Handle Touch");
                        }
               }        
}

bool IsPointerOverGameObject( int fingerId )
{
    EventSystem eventSystem = EventSystem.current;
    return ( eventSystem.IsPointerOverGameObject( fingerId )
        && eventSystem.currentSelectedGameObject != null );
}



Event Trigger处理各种点击拖拽事件
Canvas处理层级
Graphic Raycaster处理事件响应先后,2个canvas组件时候必须要用,否则一个canvas不响应鼠标事件

渲染层级顺序:
Camera
softing Layer
softing order


ugui背包系统
射线检测:物品本身需要添加的组件:Graphic Raycaster  ,  Canvas Group,  Canvas  ,移动物品的代码

Graphic Raycaster用来检测鼠标射线,判断是否点击了物品
Canvas Group  在移动物品的代码中设置其中参数Blocks Raycasts的值.让event trigger忽略自身,这样才可以让event trigger检测到它下面一层的对象,如包裹或物品格子
Canvas 你不加这个用不了Canvas Group
public void OnBeginDrag(PointerEventData eventData)   eventData即为射线检测碰到的东西
layermask使只有某层能接收.


在两个图之间插一个图
GameObject button =         GameObject.Instantiate(Resources.Load("button"))as GameObject;
button.transform.parent = transform;
button.transform.localPosition = Vector3.zero;
button.transform.localScale = Vector3.one;
GameObject AObj = transform.Find("A").gameObject;
GameObject BObj = transform.Find("B").gameObject;
button.transform.SetSiblingIndex(AObj.transform.GetSiblingIndex());


间接实现双击使用物品     
      前面2个方法是必须使用的,否则第3个方法无法正常使用.OnPointerEnter是在鼠标进入一瞬间执行代码,这得什么手速啊..设置blocksRaycasts变为false的时候鼠标射线穿透,再变了true即为鼠标射线再次碰到物品,此时再点击一下物品即可.

    public void OnPointerDown(PointerEventData eventData)       
    {
        canvasGroup.blocksRaycasts = false;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        canvasGroup.blocksRaycasts = true;
    }

        public void OnPointerEnter(PointerEventData eventData){
         if (Input.GetMouseButtonDown(1))
        {
            使用的代码
        }
}

当然,这个方法有点奇怪,我也是偶然发现的..还是自己乖乖写一个吧.提供下思路,用bool判断是否点击第1次,弄一个delay参数作为第1次点击到第2次点击的间隔.

滑动框
1.建一个Image命名Mask,在Mask里添加ScrollRect和Mask这2个组件.
2.在Mask里创建一个空的GameObject命名ScrollContent,拉进ScrollRect的Content中.添加控件Vertical Layout Group(垂直分布,自动处理).但ScrollContent并不会自动扩大.在代码中调用GetComponent().sizeDelta即可动态改变其宽高.
3.创建一个Prefab通过代码动态添加进ScrollDetails中.


p_w_picpath中的九宫格sliced边框在原图SpriteEditor中设置.


相关内容

热门资讯

ICC逮捕令致内塔尼亚胡出行受... 【环球网报道】据以色列《新消息报》网站26日报道,由于国际刑事法院(ICC)2024年就以色列在巴勒...
“罗永浩怒斥电视机厂商”戳中了... 7月25日晚,罗永浩发文怒斥当下电视机的产品设计。据都市快报报道,罗永浩表示,他为家中老人换了两次电...
各地各部门坚持人民至上筑牢防汛... 新华社北京7月25日电 题:风雨同舟映初心——各地各部门坚持人民至上筑牢防汛抗洪坚实堤坝新华社记者当...
法院回应LV起诉地产开发商 7月26日,厦门市湖里区人民法院发布情况通报,网传案情“路易威登公司起诉地产开发商,因楼盘外立面四叶...
携程的问题不仅在于垄断,更在于... 国内平台科技企业一般都是通过向B端收费、抽佣获利,尽量给消费者创造一个比较清爽的使用环境。携程算是最...
海信电视用遥控器关闭后打不开 原因可能是遥控器的电池没有装好或者是没电了,需要重新安装一下电池或者更换新的电池试一试;原因可能是电...
电视机突然没电源打不开了 有可能是电视开关的电源线断了;可能是电视在使用时短路;可能是电源插头插座松动;可能是电视内部零件接触...
电热水器下面那个小龙头漏水是怎... 电热水器下面那个小龙头漏水是怎么回事?1、因为安全阀发生了故障或者是已经被损坏了,就会有漏水的现象;...
回答下电脑桌面一片空白怎么恢复 电脑桌面上如果是一片空白,那说明您的电脑图标被隐藏了,想要恢复就要按照如下的三个步骤去操作才行。 第...
澳总理要找特朗普“理论”关税:... 当地时间7月26日,澳大利亚总理阿尔巴尼斯表示,他将直接向美国总统特朗普提出抗议,反对美国新近宣布的...