예제 #1
0
    static int Instantiate(IntPtr L)
    {
        int count = LuaDLL.lua_gettop(L);

        if (count == 1)
        {
            Object arg0 = (Object)LuaScriptMgr.GetUnityObject(L, 1, typeof(Object));
            Object o    = CUnityUtil.Instantiate(arg0);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else if (count == 3)
        {
            Object     arg0 = (Object)LuaScriptMgr.GetUnityObject(L, 1, typeof(Object));
            Vector3    arg1 = LuaScriptMgr.GetVector3(L, 2);
            Quaternion arg2 = LuaScriptMgr.GetQuaternion(L, 3);
            Object     o    = CUnityUtil.Instantiate(arg0, arg1, arg2);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else
        {
            LuaDLL.luaL_error(L, "invalid arguments to method: Object.Instantiate");
        }

        return(0);
    }
예제 #2
0
    void OnPBLoaded(GameObject pb_cache, ref Transform _ground, GROUND_TYPE ground_type)
    {
        if (pb_cache != null)
        {
            //if (pb_cache == null)
            //{
            //    GameObject g_pb_new = obj as GameObject;
            //    pb_cache = g_pb_new;
            //}

            if (_ground == null)
            {
                if (_GroundT != null && pb_cache != null)
                {
                    GameObject g_g = CUnityUtil.Instantiate(pb_cache) as GameObject;
                    if (g_g != null)
                    {
                        _ground = g_g.transform;
                        _ground.SetParent(_GroundT, false);

                        g_g.name = ground_type.ToString();
                        //g_g.SetActive(GroundType == ground_type);
                    }
                }
            }
        }
    }
예제 #3
0
    protected virtual GListItem TryCreateItem()
    {
        if (CellTemplate == null)
        {
            return(null);
        }

        GListItem rv = null;

        rv = _CellPool.TakeOut();

        if (rv == null)
        {
            GameObject item    = CUnityUtil.Instantiate(CellTemplate.gameObject) as GameObject;
            GListItem  itemCon = GListItem.Get(item);
            itemCon.RectTrans.SetParent(_Content, false);

            rv = itemCon;

            if (HasChildButton && this.ClickItemButtonCallBack != null)
            {
                itemCon.OnItemClickButton = this.OnClickItemButton;
            }
        }

        GNewUITools.SetVisible(rv.RectTrans, true);

        return(rv);
    }
예제 #4
0
    public bool PlayWeatherMusic(string audioName, float fadeInTime)
    {
        string eventName   = string.Empty;
        string switchGroup = string.Empty;
        string switchState = string.Empty;

        if (CUnityUtil.IsWwiseAudioName(audioName))
        {
            CUnityUtil.GetWwiseAudioName(audioName, out eventName, out switchGroup, out switchState);
        }
        else
        {
            return(false);
        }

#if false //LOG_WWISE && UNITY_EDITOR
        Common.HobaDebuger.LogWarningFormat("[UnityAudio] Playing [Wwise] Event: {0} SwitchGroup: {1} SwitchState: {2}",
                                            eventName, switchGroup, switchState);
#endif

        if (_WeatherSoundEntry.IsEnabled)
        {
            CheckAudioListener();

            SafeInitGameObject(_WeatherSoundEntry, "weather");

            LoadAndPlayMusic(_WeatherSoundEntry, eventName, switchGroup, switchState);
        }
        return(true);
    }
예제 #5
0
    public bool IsConnected(Vector3 startPos, Vector3 endPos)
    {
        //float ratio0 = 0;
        float ratio1 = 0;
        bool  bHit0  = false;
        bool  bHit1  = false;

        RaycastHit hitInfo;
        Vector3    dir    = endPos - startPos;
        float      length = dir.magnitude;

        dir.Normalize();
        if (length > 0.1f && CUnityUtil.RayCastWithRadius(0, startPos, dir, out hitInfo, length, CUnityUtil.LayerMaskBlockable))
        {
            //ratio0 = hitInfo.distance / length;
            bHit0 = true;
        }

        if (NavMeshManager.Instance.IsInited && !NavMeshManager.Instance.IsConnected(startPos, endPos, ref ratio1))
        {
            bHit1 = true;
        }

        return(!bHit0 && !bHit1);
    }
예제 #6
0
    public void SetData(Vector3 targetPos, float speed, LuaFunction cb, int objID, float fOffset, bool autopathing)
    {
        if (_ObjectComponent == null)
        {
            _ObjectComponent = _Owner.GetComponent <ObjectBehaviour>();
        }

        _TargetPos = targetPos;

        #region 主角自动寻路判断逻辑
        if (_OwnerType == ObjectBehaviour.OBJ_TYPE.HOSTPLAYER)
        {
            if (fOffset > 0.0f && Util.DistanceH(_Owner.transform.position, targetPos) < fOffset)        //检查是否距离过近, 取消寻路,走直线逻辑
            {
                CHostPathFindingInfo.Instance.Clear();
            }
            else
            {
                CalcHostPathFindingInfo();
                SetCameraQuickFollow(autopathing);
            }
        }
        #endregion

        _MoveSpeed   = speed;
        _TargetPos.y = CUnityUtil.GetMapHeight(_TargetPos) + _ObjectComponent.OffsetY;  // 只需要在设置目标点时,计算一次高度
        _DestOffset  = fOffset;
        if (OnFinishCallbackRef != null)
        {
            OnFinishCallbackRef.Release();
        }
        OnFinishCallbackRef = cb;

        _BlockOccurCount = 0;
    }
예제 #7
0
    public void Show(TweenCallback cb)
    {
        if (_MaskGameObject == null)
        {
            Action <UnityEngine.Object> callback = (asset) =>
            {
                _MaskGameObject = CUnityUtil.Instantiate(asset) as GameObject;
                if (_MaskGameObject == null)
                {
                    return;
                }

                _MaskGameObject.transform.localScale = Vector3.one;
                _ImageComp = _MaskGameObject.transform.Find("Canvas/Image").GetComponent <Image>();
                _TextComp  = _MaskGameObject.transform.Find("Canvas/Text").GetComponent <Text>();

                if (_ImageComp != null)
                {
                    _ImageBenginAlpha = _ImageComp.color.a;
                    var tweener = _ImageComp.DOFade(1, 0.5F);
                    if (cb != null && tweener != null)
                    {
                        tweener.OnComplete <Tweener>(cb);
                    }
                }
                if (_TextComp != null)
                {
                    _TextBenginAlpha = _TextComp.color.a;
                    _TextComp.DOFade(1, 0.5F);
                }
            };

            CAssetBundleManager.AsyncLoadResource(CgMaskPath, callback, false);
        }
        else
        {
            _MaskGameObject.SetActive(true);
            _MaskGameObject.transform.localScale = Vector3.one;
            if (_ImageComp != null)
            {
                var c = _ImageComp.color;
                c.a = _ImageBenginAlpha;
                _ImageComp.color = c;
                var tweener = _ImageComp.DOFade(1, 0.5F);
                if (cb != null)
                {
                    tweener.OnComplete <Tweener>(cb);
                }
            }

            if (_TextComp != null)
            {
                var c = _TextComp.color;
                c.a             = _TextBenginAlpha;
                _TextComp.color = c;
                _TextComp.DOFade(1, 0.5F);
            }
        }
    }
예제 #8
0
    protected GListItem TryCreateItem()
    {
        GListItem rv = null;

#if IN_GAME
        rv = _Pool.TakeOut();
#endif

        if (rv == null)
        {
            RectTransform item = CUnityUtil.Instantiate(_CellRect) as RectTransform;
            item.SetParent(Trans, false);

            GListItem item_com = item.GetComponent <GListItem>();
            if (item_com == null)
            {
                item_com = item.gameObject.AddComponent <GListItem>();
            }

            //register events
            if (this.InitItemCallBack != null)
            {
                item_com.OnItemInit = this.OnShowItem;
            }

            if (this.ClickItemCallBack != null)
            {
                item_com.OnItemClick = this.OnClickItem;
            }

            //if (this.PressItemCallBack != null)
            //{
            //    item_com.OnItemPointerDown = this.OnPressItem;
            //}

            //if (this.ReleaseItemCallBack != null)
            //{
            //    item_com.OnItemPointerUp = this.OnReleaseItem;
            //}

            if (this.LongPressCallBack != null)
            {
                item_com.OnItemLongPress = this.OnLongPressItem;
            }

            if (HasChildButton && this.ClickItemButtonCallBack != null)
            {
                item_com.OnItemClickButton = this.OnClickItemButton;
            }

            rv = item_com;
        }

        GNewUITools.SetVisible(rv.RectTrans, true);

        return(rv);
    }
예제 #9
0
    public IEnumerable DoCheckCharacterCoroutine(string prefabName, GameObject char_go)
    {
        List <GameObject> rendererList = new List <GameObject>();

        CUnityUtil.FindChildLeaf(typeof(SkinnedMeshRenderer), typeof(MeshRenderer), char_go, rendererList);

        foreach (var go in rendererList)
        {
            Material[]          materials;
            SkinnedMeshRenderer renderer = go.GetComponent <SkinnedMeshRenderer>();
            if (renderer != null)
            {
                materials = renderer.sharedMaterials == null ? renderer.materials : renderer.sharedMaterials;
            }
            else
            {
                MeshRenderer meshRenderer = go.GetComponent <MeshRenderer>();
                materials = meshRenderer.sharedMaterials == null ? meshRenderer.materials : meshRenderer.sharedMaterials;
            }

            for (int i = 0; i < materials.Length; ++i)
            {
                Material mat = materials[i];

                if (IsPlayerPart(prefabName, go.name))
                {
                    continue;
                }

                if (mat == null)
                {
                    continue;
                }

                Shader shader = mat.shader;
                if (shader == null)
                {
                    continue;
                }

                AddCharacterShader(shader.name, mat.shaderKeywords);

                //
                CheckShader_Standard(shader.name, mat.name, go.name, prefabName);
                CheckShader_NoUsed_GrabPass(shader.name, mat.name, go.name, prefabName);
                CheckShader_KriptoFXParticle(shader.name, mat.name, go.name, prefabName, mat.shaderKeywords);
                CheckShader_Distortion(shader.name, mat.name, go.name, prefabName, false);
                CheckShader_DepthTexture(shader.name, mat.name, go.name, prefabName);
                CheckShader_CutoutBorder(shader.name, mat.name, go.name, prefabName);
                CheckShader_NoOutput(shader.name, mat.name, go.name, prefabName);
            }
        }

        yield return(null);
    }
예제 #10
0
    protected override void OnSafeInit()
    {
        base.OnSafeInit();
        ScrollRect scrollRect = GetComponent <ScrollRect>();

        for (int i = 0; i < 8; i++)
        {
            RectTransform item = CUnityUtil.Instantiate(CellTemplate) as RectTransform;
            item.SetParent(scrollRect.content, false);
        }
    }
예제 #11
0
    public string Play2DAudio(string audioName, int sortId = 0, bool isLoop = false)
    {
        if (CUnityUtil.IsWwiseAudioName(audioName))
        {
            return(string.Empty);
        }

        EffectAudioSourceItem item = _PlaySFX(audioName, AudioType.S2D, null, Vector3.zero, sortId, isLoop);

        return(item != null && item.audioSource != null ? item.audioSource.name : string.Empty);
    }
예제 #12
0
    //找到寻路点上第一个和目标点连通的点
    public bool FindFirstConnectedPoint(Vector3 startPos, Vector3 endPos, Vector3 polyPickExt, float stepSize, out Vector3 selectPoint)
    {
        selectPoint = endPos;

        if (IsConnected(startPos, endPos))
        {
            selectPoint = startPos;
            return(true);
        }

        if (!NavMeshManager.Instance.IsInited)
        {
            return(false);
        }

        float[] tempAllPoints = NavMeshManager.TempAllPoints;

        int     outVertNum = 0;
        Vector3 targetPos  = endPos;

        if (!NavMeshManager.Instance.GetWayPointsAtCurrentMap(startPos, targetPos, polyPickExt, stepSize, 0.1f, tempAllPoints, out outVertNum) || outVertNum <= 0)
        {
            return(false);
        }

        for (int i = 0; i < outVertNum; ++i)
        {
            var vec = new Vector3(tempAllPoints[i * 3], tempAllPoints[i * 3 + 1], tempAllPoints[i * 3 + 2]);
            vec.y = CUnityUtil.GetMapHeight(vec);

            //看是否被阻挡
            RaycastHit hitInfo;
            Vector3    dir    = endPos - startPos;
            float      length = dir.magnitude;
            if (length > 0.1f)
            {
                dir.Normalize();
                if (CUnityUtil.RayCastWithRadius(0, startPos, dir, out hitInfo, length, CUnityUtil.LayerMaskBlockable))
                {
                    break;
                }
            }

            if (NavMeshManager.Instance.IsInited && NavMeshManager.Instance.IsConnected(vec, endPos))
            {
                selectPoint = vec;
                return(true);
            }
        }

        return(false);
    }
예제 #13
0
    public void HandleClick(Vector2 scr_pos, bool can_touch_ground)
    {
        Camera main_camera = Main.Main3DCamera;

        if (main_camera != null)
        {
            Vector3    scr_pos3 = new Vector3(scr_pos.x, scr_pos.y);
            RaycastHit hit_info;
            Ray        ray = main_camera.ScreenPointToRay(scr_pos3);

            int ray_mask;
            if (can_touch_ground)
            {
                ray_mask = CUnityUtil.LayerMaskEntity | CUnityUtil.LayerMaskClickable | CUnityUtil.LayerMaskTerrainBuilding;
            }
            else
            {
                ray_mask = CUnityUtil.LayerMaskHostPlayer;
            }
            if (Physics.Raycast(ray, out hit_info, Mathf.Infinity, ray_mask))
            {
                Collider cd = hit_info.collider;
                if (cd == null)
                {
                    return;
                }

                if (cd.gameObject.layer == CUnityUtil.Layer_Terrain)
                {
                    Vector3 pos = hit_info.point;
                    LuaScriptMgr.Instance.CallLuaOnClickGroundFunc(pos);
                }
                else if (cd.gameObject.layer == CUnityUtil.Layer_Building)
                {
                    Vector3 pos = hit_info.point;
                    pos.y = CUnityUtil.GetMapHeight(pos);
                    LuaScriptMgr.Instance.CallLuaOnClickGroundFunc(pos);
                }
                else if (cd.gameObject.layer != CUnityUtil.Layer_Unblockable)
                {
                    ObjectBehaviour oc = cd.gameObject.GetComponentInParent <ObjectBehaviour>();
                    if (oc != null)
                    {
                        oc.OnClick();
                    }
                }
            }
        }
    }
예제 #14
0
    public static GameObject Clone(this GameObject prefab)
    {
        if (null == prefab)
        {
            return(null);
        }

        var cloned          = CUnityUtil.Instantiate(prefab) as GameObject;
        var prefabTransform = prefab.transform;

        cloned.transform.parent = prefabTransform.parent;
        // in NGUI, the localScale will be adjusted automatically according to the scale of camera. so restore it.
        cloned.transform.localScale = prefabTransform.localScale;
        return(cloned);
    }
예제 #15
0
    public Object Get()
    {
        Object element = null;

        if (_Stack.Count == 0)
        {
            element = CUnityUtil.Instantiate(_Prefab);
        }
        else
        {
            element = _Stack.Pop();
        }

        return(element);
    }
예제 #16
0
    private void CreateDefault()
    {
        var parentTrans = GetTransformParent();

        if (parentTrans == null)
        {
            return;
        }

        var prefab = CAssetBundleManager.SyncLoadAssetFromBundle <GameObject>(path);

        if (prefab == null)
        {
            return;
        }

        var go = CUnityUtil.Instantiate(prefab) as GameObject;

        if (go != null)
        {
            go.name = EntityId;
            var goT = go.transform;
            if (clientPath != string.Empty)
            {
                GameObject goParent = GameObject.Find(clientPath);
                if (goParent)
                {
                    goT.parent = goParent.transform;
                }
                goT.localPosition = position;
                goT.localRotation = Quaternion.Euler(rotation);
            }
            else
            {
                goT.parent   = parentTrans;
                goT.position = position;
                goT.rotation = Quaternion.Euler(rotation);
            }

            Util.SetLayerRecursively(go, LAYER_CG);
            SetTransform(goT);

            if (type == EntityType.Sfx)
            {
                go.SetActive(false);
            }
        }
    }
예제 #17
0
    private void PlayCommonCG()
    {
        Action <UnityEngine.Object> callback = (asset) =>
        {
            // 异步加载中 可能存在其他操作(比如cg结束 切换成功)
            if (asset == null || _CgXmlConfig.Path == null || !_CgXmlConfig.Path.Contains(asset.name))
            {
                return;
            }

            var cg = CUnityUtil.Instantiate(asset) as GameObject;
            if (cg == null)
            {
                return;
            }

            var cgg = cg.GetComponent <CGGlobal>();
            if (cgg == null)
            {
                Destroy(cg);
                return;
            }

            _CurCGGlobal = cgg;
            _CurCutscene = cg.GetComponentInChildren <Cutscene>();
            _CurCutscene.CutsceneStarted  += OnCutsceneStarted;
            _CurCutscene.CutsceneFinished += OnCutsceneFinished;

            if (_CgXmlConfig.StartCallback != null)
            {
                _CgXmlConfig.StartCallback();
                _CgXmlConfig.StartCallback = null;
            }

            if (_CgXmlConfig.IsMaskShown)
            {
                _CGMask.Hide();
            }

            if (_CurCutscene != null)
            {
                _CurCutscene.Optimize();
                _CurCutscene.Play();
            }
        };

        CAssetBundleManager.AsyncLoadResource(_CgXmlConfig.Path, callback, false);
    }
예제 #18
0
    public bool TickOtherEntity(float dt)
    {
        Vector3 pos = _Owner.position;

        //计算方向,移动
        _MoveDir   = _TargetPos - pos;
        _MoveDir.y = 0;

        float fDistLeft = 0;

        if (!Util.IsValidDir(ref _MoveDir, ref fDistLeft))
        {
            _MoveDir = _Owner.forward;
        }

        float fDeltaMove = _MoveSpeed * dt;
        float fMinDist   = Mathf.Max(fDeltaMove, NEAREST_DIST);

        //判断这次移动的距离是否超过剩余距离,停止
        if (fDistLeft <= fMinDist)
        {
            Vector3 vPos = _TargetPos;      //到达
            vPos.y          = CUnityUtil.GetMapHeight(vPos) + _ObjectComponent.OffsetY;
            _Owner.position = vPos;
            //到达
            RealOnFinish(BEHAVIOR_RETCODE.Success, _MoveDir);
            return(true);
        }

        pos = _Owner.position + fDeltaMove * _MoveDir;
        if (Util.IsNaN(pos))
        {
            return(false);
        }

        pos.y           = CUnityUtil.GetMapHeight(pos) + _ObjectComponent.OffsetY;
        _Owner.position = pos;

        if (!_ObjectComponent.HasTurnBehavior())              //如果同时有转向,则不设置方向
        {
            if (IsDirChanged)
            {
                TickAdjustDir(_MoveDir);
            }
        }

        return(false);
    }
예제 #19
0
    public bool IsCollideWithBlockable(Vector3 startPos, Vector3 endPos)
    {
        RaycastHit hitInfo;
        Vector3    dir    = endPos - startPos;
        float      length = dir.sqrMagnitude;

        if (length > 0.01f)
        {
            dir.Normalize();
            if (CUnityUtil.RayCastWithRadius(0, startPos, dir, out hitInfo, length, CUnityUtil.LayerMaskBlockable))
            {
                return(true);
            }
        }
        return(false);
    }
예제 #20
0
    //设置是否进入战斗锁定视角
    public void SetCamFightLockState(bool isLock, GameObject target = null)
    {
        if (isLock && target != null && _CamCtrlMode == CTRL_MODE.FOLLOW)
        {
            _IsChangeLockTarget = _FightLockTarget != target;

            //只有跟随模式才能进入锁定
            _FightLockTarget        = target;
            IsFightLock             = true;
            _LockTargetHeightOffset = CUnityUtil.GetModelHeight(_FightLockTarget, true) / 2;
        }
        else
        {
            QuitCamFightLock();
        }
    }
예제 #21
0
    protected GDragablePageItem CreateItem()
    {
        GDragablePageItem page_item = null;

        page_item = _Pool.TakeOut();

        if (page_item == null)
        {
            RectTransform item = CUnityUtil.Instantiate(_CellItem) as RectTransform;
            item.SetParent(Trans, false);
            Vector2 new_pos = GNewUITools.GetAlignedPivot(NewAlign.Left);
            if (IsVertical)
            {
                new_pos = GNewUITools.GetAlignedPivot(NewAlign.Top);
            }
            item.pivot     = new_pos;
            item.anchorMax = new_pos;
            item.anchorMin = new_pos;

            GDragablePageItem item_com = item.GetComponent <GDragablePageItem>();
            if (item_com == null)
            {
                item_com = item.gameObject.AddComponent <GDragablePageItem>();
            }

            if (this._PageItemInitCallBack != null)
            {
                item_com.OnItemInit = OnInitPageItem;
            }

            if (this._ClickPageItemCallBack != null)
            {
                item_com.OnItemClick = OnClickPageItem;
            }

            if (_HasChildButton && this._ClickPageItemButtonCallBack != null)
            {
                item_com.OnItemClickButton = this.OnClickPageItemButton;
            }

            page_item = item_com;
        }

        GNewUITools.SetVisible(page_item.RectTrans, true);

        return(page_item);
    }
예제 #22
0
    public void AdjustOffsetWithScale(GameObject effectiveModel, float fAddHeight, float fScale)
    {
        if (FollowTarget == null)
        {
            return;
        }

        if (effectiveModel == null)
        {
            effectiveModel = FollowTarget;
        }

        var height = CUnityUtil.GetModelHeight(effectiveModel, fScale, false);

        Offset.y  = height + .2f;
        Offset.y += fAddHeight;
    }
예제 #23
0
    public bool TickOtherEntity(float dt)
    {
        if (_TargetTrans == null)
        {
            RealOnFinish(BEHAVIOR_RETCODE.Failed, _Owner.forward);
            return(true);
        }

        Vector3 curPos      = _Owner.position;
        Vector3 targetPos   = _TargetTrans.position;
        float   distanceSqr = Util.SquareDistanceH(curPos, targetPos);

        //计算方向,移动
        Vector3 desired = targetPos - _Owner.position;

        desired.y = 0;

        if (!Util.IsValidDir(ref desired))
        {
            desired = _Owner.forward;
        }

        if (distanceSqr < _MaxDistanceSqr && distanceSqr > _MinDistanceSqr)
        {
            if (!_IsLoop)
            {
                RealOnFinish(BEHAVIOR_RETCODE.Success, desired);
                return(true);
            }
            else
            {
                return(false);
            }
        }

        Vector3 pos = _Owner.position + _MoveSpeed * dt * desired;

        if (!_ObjectComponent.HasTurnBehavior()) //如果同时有转向,则不设置方向
        {
            TickAdjustDir(desired);              // desired
        }

        pos.y           = CUnityUtil.GetMapHeight(pos) + _ObjectComponent.OffsetY;
        _Owner.position = pos;
        return(false);
    }
예제 #24
0
    private static int GetMapHeight(IntPtr L)
    {
        int       count = LuaDLL.lua_gettop(L);
        const int nRet  = 1;

        if ((count == 1 && LuaScriptMgr.CheckTypes(L, 1, typeof(LuaTable))))
        {
            Vector3 pos    = LuaScriptMgr.GetVector3(L, 1);
            float   heigth = CUnityUtil.GetMapHeight(pos);
            LuaScriptMgr.Push(L, heigth);
        }
        else
        {
            LogParamError("GetMapHeight", count);
            LuaScriptMgr.Push(L, 0);
        }
        return(CheckReturnNum(L, count, nRet));
    }
예제 #25
0
    public bool PlayBackgroundMusic(string bgmName, float fadeInTime)
    {
        if (CUnityUtil.IsWwiseAudioName(bgmName))
        {
            return(false);
        }

        if (_BgmSoundEntry.IsEnabled)
        {
            CheckAudioListener();

            SafeInitGameObject(_BgmSoundEntry, "background");

            LoadAndPlayMusic(_BgmSoundEntry, bgmName, fadeInTime);
        }

        return(true);
    }
예제 #26
0
    public bool PlayWeatherMusic(string envName, float fadeInTime)
    {
        if (CUnityUtil.IsWwiseAudioName(envName))
        {
            return(false);
        }

        if (_WeatherSoundEntry.IsEnabled)
        {
            CheckAudioListener();

            SafeInitGameObject(_WeatherSoundEntry, "weather");

            LoadAndPlayMusic(_WeatherSoundEntry, envName, fadeInTime);
        }

        return(true);
    }
예제 #27
0
    private void OnPrefabLoaded(UnityEngine.Object obj_pf)
    {
        if (obj_pf == null)
        {
            Debug.LogWarning("Resource not found: " + this.FxPath);
            return;
        }
        _IsLoading = false;
        PoolPrefabe(FxPath, obj_pf);

        //1.Am I Destroyed?
        if (_CachedTrans == null || gameObject == null || Target == null)
        {
            return;
        }

        //2.Inst
        _FxObject = CUnityUtil.Instantiate(obj_pf) as GameObject;
        Transform t_fx = _FxObject.transform;

        t_fx.SetParent(_CachedTrans, false);

        //3.Adjust Layer
        if (_FxObject.layer != Target.layer)
        {
            Util.SetLayerRecursively(_FxObject, Target.layer);
        }

        //4.Adjust sorting mode
        _IsUSortDirty = true;
        if (gameObject.activeInHierarchy)
        {
            AjustSorting();
        }
        //else if(_IsStarted)
        //{
        //    Debug.LogError("Playing fx on Inactive Node " + GNewUITools.PrintScenePath(_CachedTrans));
        //}

        //5

        //6
        StartPlay();
    }
예제 #28
0
 protected void UpdateArcNoise(int segmentIdx, bool reset)
 {
     for (int i = 0; i <= _SegmentNums[segmentIdx]; i++)
     {
         var factor = GetShiftCoef((float)i / _SegmentNums[segmentIdx]);
         if (reset)
         {
             _ArcTangentsShift[segmentIdx, i * 2]     = CUnityUtil.RandomXYQuaternion(30 * factor);
             _ArcTangentsShift[segmentIdx, i * 2 + 1] = CUnityUtil.RandomXYQuaternion(30 * factor);
             _ShiftVectors[segmentIdx, i]             = CUnityUtil.RandomVector3(0.3f * factor);
         }
         else
         {
             _ArcTangentsShift[segmentIdx, i * 2]     *= CUnityUtil.RandomXYQuaternion(10f * factor);
             _ArcTangentsShift[segmentIdx, i * 2 + 1] *= CUnityUtil.RandomXYQuaternion(10f * factor);
             _ShiftVectors[segmentIdx, i]             += CUnityUtil.RandomVector3(6 * Time.deltaTime) * factor;
         }
     }
 }
예제 #29
0
    IEnumerable DoCheckMeshRendererCoroutine(string prefabName, GameObject scenePrefab)
    {
        //string shortName = System.IO.Path.GetFileNameWithoutExtension(prefabName);

        List <GameObject> rendererList = new List <GameObject>();

        CUnityUtil.FindChildLeaf(typeof(MeshRenderer), scenePrefab, rendererList);

        foreach (var go in rendererList)
        {
            MeshRenderer renderer  = go.GetComponent <MeshRenderer>();
            Material[]   materials = renderer.sharedMaterials == null ? renderer.materials : renderer.sharedMaterials;

            //检查
            for (int i = 0; i < materials.Length; ++i)
            {
                Material mat = materials[i];
                if (mat == null)
                {
                    continue;
                }

                Shader shader = mat.shader;
                if (shader == null)
                {
                    continue;
                }

                AddSceneShader(shader.name, mat.shaderKeywords);

                //
                CheckShader_Standard(shader.name, mat.name, go.name, prefabName);
                CheckShader_NoUsed_GrabPass(shader.name, mat.name, go.name, prefabName);
                CheckShader_KriptoFXParticle(shader.name, mat.name, go.name, prefabName, mat.shaderKeywords);
                CheckShader_Distortion(shader.name, mat.name, go.name, prefabName, false);
                CheckShader_DepthTexture(shader.name, mat.name, go.name, prefabName);
                CheckShader_CutoutBorder(shader.name, mat.name, go.name, prefabName);
                CheckShader_NoOutput(shader.name, mat.name, go.name, prefabName);
            }
        }

        yield return(null);
    }
예제 #30
0
    private static int GetModelHeight(IntPtr L)
    {
        int       count = LuaDLL.lua_gettop(L);
        const int nRet  = 1;

        if ((count == 1 && LuaScriptMgr.CheckTypes(L, 1, typeof(GameObject))))
        {
            var m = LuaScriptMgr.GetUnityObject <GameObject>(L, 1);
            if (m != null)
            {
                float heigth = CUnityUtil.GetModelHeight(m);
                LuaScriptMgr.Push(L, heigth);
            }
            else
            {
                HobaDebuger.LogWarning("GetModelHeight param 1 is null");
                LuaScriptMgr.Push(L, 0);
            }
        }
        else if (count == 2 && LuaScriptMgr.CheckTypes(L, 1, typeof(GameObject), typeof(bool)))
        {
            var m = LuaScriptMgr.GetUnityObject <GameObject>(L, 1);
            if (m != null)
            {
                bool  inchild = LuaScriptMgr.GetBoolean(L, 2);
                float heigth  = CUnityUtil.GetModelHeight(m, inchild);
                LuaScriptMgr.Push(L, heigth);
            }
            else
            {
                HobaDebuger.LogWarning("GetModelHeight param 1 is null");
                LuaScriptMgr.Push(L, 0);
            }
        }
        else
        {
            LogParamError("GetModelHeight", count);
            LuaScriptMgr.Push(L, 0);
        }

        return(CheckReturnNum(L, count, nRet));
    }