场景模型的获取与播放模型动画

来源:互联网 发布:种植牙失败知乎 编辑:程序博客网 时间:2024/05/29 12:27

在场景中的获取模型,并根据服务器推送的消息,播放模型上挂载的动画      

       从工作到现在,第一次这么正式的写个人博客,有些小激动吧以前,更多的是去阅读别人的博客,然后获取自己最需要的某个知识点。思考许久,决定把我在项目中学会的一些关于Unity的东西,记录下来。我相信,几年后,我再回过头来看现在的这些博客的时候,会有不一样的感触。

       昨天,刚把手上的“案子”提交到公司的SVN上,总算是对自己有一个交代吧。这次的“案子”,主要是让我衔接一个“帮会”活动结束后,获取场景的boss模型,然后在客户端执行boss喝酒动画的播放。最后,接收到服务器推送的消息,客户端执行播放boss离开场景的动画。其实,整个过程和逻辑的组织,还是还比较清晰而简单的。难点在于,一开始,我没有考虑玩家突然下线又突然上线后,应该要看到怎样的场景。还有,玩家在场景里,跑到一个相对较远的地方,然后再往回跑,要看到怎样的场景。这些都是我必须考虑的情况。由于场景中,既要获取boss模型和酒坛模型,而且它们都是由服务器生成的,我客户端这边通过CGameObject.cs这个类去获取场景里的模型后,必须将模型父节点置为null,不然,服务器就会把模型全部删除。之前是用GameObjcet.Instantiate()的方法,实例化一份模型。这样做,会有资源的消耗。在删除模型的方法上,用了项目封装好的CacheObjects.DestroyPoolObject()方法,然后再将对象置为null。在条件判断方面,第一次使用activeInHierarchy这个属性,起到了很大的作用。


这个方法就是获取服务器创建的boss,保存在客户端。

 public static void CreatePigFBX(CGameObject cGameObj)
    {
        if (cGameObj == null || cGameObj.mFBX == null || cGameObj.mFBX.activeInHierarchy == false) return;

        mPigFbx = cGameObj.mFBX;
        cGameObj.mFBX = null;
        mPigFbx.transform.parent = null;
        mPigFbx.transform.position = cGameObj.mVisualTrans.position;

        //播放离开动画
        PlayPigImmortalRunAway();
    }



这个方法是客户端播放boss出现的动画。其中,使用了项目封装好的动作代理类AnimationProxy.cs。

 public static void PlayPigImmortalAppearAction()
    {
        if (pigImmortalNpcObj != null && pigImmortalNpcObj.mFBX != null && mWineFbx != null && mWineFbx.activeInHierarchy == true)
        {
            AnimationProxy aniProxy = pigImmortalNpcObj.mFBX.GetComponent<AnimationProxy>();
            if (aniProxy != null)
            {
                Instance.Get<ActionControl>().DoAction(aniProxy, ActionName.PigAppear);
            }

            TimerManager.AddTimer("OnPlaySeriesAction", 0.01f, PlayFogEffect);
        }
    }


这个是控制酒坛运动的方法,主要使用了iTween插件。

 public static void ChangeWineJarPosition()
    {
        if (pigImmortalNpcObj != null && pigImmortalNpcObj.mFBX != null && mWineFbx != null)
        {
            AssemblerControl.RemoveAttackPointChild(pigImmortalNpcObj.mFBX);
            mWineFbx.SetActive(true);
            mWineFbx.transform.localScale = new Vector3(7f, 7f, 7f);

            Vector3 v3 = Vector3.zero;
            v3.x = -12.3f;
            v3.y = 121.9f;
            v3.z = 34.4f;

            Hashtable ht = new Hashtable();
            ht.Add("islocal", true);
            ht.Add("easeType", iTween.EaseType.linear);
            ht.Add("speed", 50.0f);
            ht.Add("time", 1.5f);
            ht.Add("position", v3);

            iTween.MoveTo(mWineFbx, ht);

            TimerManager.AddTimer("OnTriggerWineJarCrack", 0.15f, TriggerWineJarCrack);
        }
    }


       目前,在考虑用iTween插件让酒坛做抛物线运动。这样出来的效果会更形象一些喏。还有,由于加载模型的动画资源还是比较耗时间,所有在考虑用异步的方式加载动画资源。


               继续前行,去探索更多未知的Unity世界。



0 0
原创粉丝点击