两个以上gameobject同时调用同一函数时候transform代码中改变但是实际效果并不改变的诡异问题...

本文介绍了一个Unity游戏开发中UI面板动画显示与隐藏的Bug,并详细记录了从发现到解决的过程。通过调整GameObject的激活状态,最终解决了面板位置更新后视窗中未显示移动效果的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击按钮触发面板弹出动画:

void MainPanelBtnClick(string btnName)
    {
        switch (btnName)
        {
        case "0":
            if(currentBtn != MainPanelBtn.BETTLE)
            {
                _GUI_BG.active = false;
                currentBtn = MainPanelBtn.BETTLE;
            }
            break;
        case "1":
            if(currentBtn == MainPanelBtn.BETTLE)
            {
                _GUI_BG.active = true;
            }
            currentBtn = MainPanelBtn.HERO;
            if(!is2)
            {
                is2 = true;
                iTween.Stop();
                if(ModelData.shareData.panelGroupDic.ContainsKey("ContentPanel"))
                {
                    PanelFunc.PanelOn(ModelData.shareData.panelGroupDic["ContentPanel"]);
                }
                if(ModelData.shareData.panelGroupDic.ContainsKey("TitleBar"))
                {
                    PanelFunc.PanelOn(ModelData.shareData.panelGroupDic["TitleBar"]);
                }
                if(ModelData.shareData.panelGroupDic.ContainsKey("ActNotify"))
                {
                    PanelFunc.PanelOn(ModelData.shareData.panelGroupDic["ActNotify"]);
                }
            }
            else
            {
                is2 = false;
                iTween.Stop();
                if(ModelData.shareData.panelGroupDic.ContainsKey("ContentPanel"))
                {
                    PanelFunc.PanelOff(ModelData.shareData.panelGroupDic["ContentPanel"]);
                }
                if(ModelData.shareData.panelGroupDic.ContainsKey("TitleBar"))
                {
                    PanelFunc.PanelOff(ModelData.shareData.panelGroupDic["TitleBar"],"OnMove2Complete",gameObject);
                }
                if(ModelData.shareData.panelGroupDic.ContainsKey("ActNotify"))
                {
                    PanelFunc.PanelOff(ModelData.shareData.panelGroupDic["ActNotify"],"OnMove2Complete",gameObject);
                }
            }
            
            break;
        case "2":
            
            break;
        case "3":
        
            break;
        case "4":
        
            break;
        case "5":
        
            break;
        default:
            break;
        }
    }

 

先执行面板出现动画   3个面板同时出现

public static void PanelOn( PanelPos _panelPos)
    {
        _panelPos.g.getChild(0).transform.gameObject.SetActiveRecursively(true);
        if(_panelPos.middlePos!=_panelPos.oriPos)
            iTween.MoveTo(_panelPos.g, iTween.Hash( "position", _panelPos.middlePos, iT.MoveTo.islocal, true, "easetype", "easeOutBack", "loopType", "none",  "delay", .1,"time",.5));
    }

 

上面动画未结束就迅速执行面板隐藏函数

    public static void PanelOff(PanelPos _panelPos)
    {
        _panelPos.g.transform.getChild(0).gameObject.SetActiveRecursively(false);
        _panelPos.g.transform.localPosition = _panelPos.oriPos;
            Debug.Log(_panelPos.g.name+"    "+_panelPos.g.transform.localPosition);
    }

则有一个面板(绿色部分)的上面红色部分不执行,其实是执行了的

ContentPanel    (0.0, -820.0, 0.0)

TitleBar    (-660.0, 300.0, 0.0)

ActNotify    (470.0, 300.0, 0.0)

 

程序中检测位置是移动了,但是实际视窗中并没移动

TitleBar    (-300.0, 300.0, 0.0)

 

 

 

后来多次查找原因未果,后将

 _panelPos.g.transform.getChild(0).gameObject.SetActiveRecursively(false);

改为

 _panelPos.g.transform.gameObject.SetActiveRecursively(false);

则bug消除,不解!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值