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

本文探讨如何通过按钮触发面板弹出动画,并详细解析了面板出现与消失的动画实现过程,涉及游戏开发中面板管理的关键技巧。文章还揭示了一个在动画执行过程中遇到的bug及其解决方案,提供了解决复杂动画问题的思路。

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

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消除,不解!!!

转载于:https://www.cnblogs.com/pengyingh/archive/2012/10/11/2720576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值