void CreateMeshObj(XWeaponTrail owner, Material material)
        {
            GameObject obj = new GameObject("_XWeaponTrailMesh:" + "|material:" + material.name);

            obj.layer = owner.gameObject.layer;
            obj.AddComponent <MeshFilter>();
            obj.AddComponent <MeshRenderer>();

            obj.transform.position = Vector3.zero;
            obj.transform.rotation = Quaternion.identity;


            MeshRenderer Meshrenderer;

            _meshFilter  = (MeshFilter)obj.GetComponent(typeof(MeshFilter));
            Meshrenderer = (MeshRenderer)obj.GetComponent(typeof(MeshRenderer));
#if UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_4_8
            Meshrenderer.castShadows = false;
#else
            Meshrenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
#endif
            Meshrenderer.receiveShadows = false;
            Meshrenderer.GetComponent <Renderer>().sharedMaterial = material;
            Meshrenderer.sortingLayerName = _owner.SortingLayerName;
            Meshrenderer.sortingOrder     = _owner.SortingOrder;
            _meshFilter.sharedMesh        = new Mesh();
        }
示例#2
0
        //note this function also modified MeshList.
        MeshFilter CreateMeshObj(Material mat)
        {
            GameObject obj = new GameObject("xftmesh " + mat.name);

            obj.layer = gameObject.layer;
            MeshList.Add(obj);
            obj.AddComponent <MeshFilter>();
            obj.AddComponent <MeshRenderer>();
            SetActive(obj, true);

#if UNITY_EDITOR
            if (!EditorApplication.isPlaying)
            {
                XffectComponent.SetActive(obj, true);
            }
#endif

            MeshFilter   Meshfilter;
            MeshRenderer Meshrenderer;
            Meshfilter                  = (MeshFilter)obj.GetComponent(typeof(MeshFilter));
            Meshrenderer                = (MeshRenderer)obj.GetComponent(typeof(MeshRenderer));
            Meshrenderer.castShadows    = false;
            Meshrenderer.receiveShadows = false;
            Meshrenderer.GetComponent <Renderer>().sharedMaterial = mat;
            Meshfilter.sharedMesh = new Mesh();
            return(Meshfilter);
        }
示例#3
0
        //note this function also modified MeshList.
        MeshFilter CreateMeshObj(Material mat)
        {
            GameObject obj = new GameObject("xftmesh " + mat.name);

            obj.layer = gameObject.layer;
            MeshList.Add(obj);
            obj.AddComponent <MeshFilter>();
            obj.AddComponent <MeshRenderer>();
            SetActive(obj, true);



#if UNITY_EDITOR
            if (!EditorApplication.isPlaying)
            {
                XffectComponent.SetActive(obj, true);
                //obj.hideFlags = HideFlags.HideAndDontSave;
                EditorUtility.SetSelectedWireframeHidden(obj.GetComponent <Renderer>(), true);
            }
#endif

            MeshFilter   Meshfilter;
            MeshRenderer Meshrenderer;
            Meshfilter                  = (MeshFilter)obj.GetComponent(typeof(MeshFilter));
            Meshrenderer                = (MeshRenderer)obj.GetComponent(typeof(MeshRenderer));
            Meshrenderer.castShadows    = false;
            Meshrenderer.receiveShadows = false;
            Meshrenderer.GetComponent <Renderer>().sharedMaterial = mat;

            if (UseWith2DSprite)
            {
                Meshrenderer.sortingLayerName = SortingLayerName;
                Meshrenderer.sortingOrder     = SortingOrder;
            }

            Meshfilter.sharedMesh = new Mesh();
            return(Meshfilter);
        }
示例#4
0
    //in editor mode, Awake() method called twice, why?.
    public void Initialize()
    {
        if (EflList.Count > 0)
        {//already inited.
            return;
        }
        //fixed : 2012.5.25. can't add child game object during foreach..
        //ArrayList tobeAdded = new ArrayList();

        foreach (Transform child in transform)
        {
            EffectLayer el = (EffectLayer)child.GetComponent(typeof(EffectLayer));
            if (el == null)
            {
                continue;
            }

            if (el.Material == null)
            {
                Debug.LogWarning("effect layer: " + el.gameObject.name + " has no material, please assign a material first!");
                continue;
            }

            SetActive(el.gameObject, true);

            Material mat = el.Material;
            //ver 1.2.1
            mat.renderQueue  = mat.shader.renderQueue;
            mat.renderQueue += el.Depth;
            EflList.Add(el);
            MeshFilter   Meshfilter;
            MeshRenderer Meshrenderer;

            Transform oldMesh = transform.Find("xftmesh " + mat.name);
            if (oldMesh != null)
            {//already instaniate by object cache.just recreate vertex pool.\
                Meshfilter            = (MeshFilter)oldMesh.GetComponent(typeof(MeshFilter));
                Meshrenderer          = (MeshRenderer)oldMesh.GetComponent(typeof(MeshRenderer));
                Meshfilter.sharedMesh = new Mesh();
                Meshfilter.sharedMesh.Clear();
                MatDic[mat.name] = new VertexPool(Meshfilter.sharedMesh, mat);
                //fixed 2012.7.20 if already exist, Add to MeshList too.
                if (!MeshList.Contains(oldMesh.gameObject))
                {
                    MeshList.Add(oldMesh.gameObject);
                }
            }
            if (!MatDic.ContainsKey(mat.name))
            {
                GameObject obj = new GameObject("xftmesh " + mat.name);
                obj.layer = gameObject.layer;
                //obj.transform.parent = this.transform;
                //tobeAdded.Add(obj);
                MeshList.Add(obj);
                obj.AddComponent <MeshFilter>();
                obj.AddComponent <MeshRenderer>();
                SetActive(obj, IsActive(gameObject));

#if UNITY_EDITOR
                if (!EditorApplication.isPlaying)
                {
                    XffectComponent.SetActive(obj, true);
                }
#endif


                Meshfilter                  = (MeshFilter)obj.GetComponent(typeof(MeshFilter));
                Meshrenderer                = (MeshRenderer)obj.GetComponent(typeof(MeshRenderer));
                Meshrenderer.castShadows    = false;
                Meshrenderer.receiveShadows = false;
                Meshrenderer.GetComponent <Renderer>().sharedMaterial = mat;
                Meshfilter.sharedMesh = new Mesh();
                MatDic[mat.name]      = new VertexPool(Meshfilter.sharedMesh, mat);
            }
        }

        //now set each gameobject's parent.
        foreach (GameObject obj in MeshList)
        {
            obj.transform.parent = this.transform;

            //fixed 2012.6.25,
            obj.transform.position = Vector3.zero;
            obj.transform.rotation = Quaternion.identity;

            //fixed 2012.7.11, avoid the lossy scale influence the mesh object.
            Vector3 realLocalScale = Vector3.zero;
            realLocalScale.x = 1 / obj.transform.parent.lossyScale.x;
            realLocalScale.y = 1 / obj.transform.parent.lossyScale.y;
            realLocalScale.z = 1 / obj.transform.parent.lossyScale.z;

            obj.transform.localScale = realLocalScale * Scale;
        }


        //start each effect layer.
        foreach (EffectLayer efl in EflList)
        {
            efl.Vertexpool = MatDic[efl.Material.name];
        }
        //this.transform.position = Vector3.zero;
        //this.transform.rotation = Quaternion.identity;
        this.transform.localScale = Vector3.one;

        foreach (EffectLayer el in EflList)
        {
            el.StartCustom();
        }

        //add events
        EventList.Clear();
        foreach (Transform child in transform)
        {
            XftEventComponent xftevent = child.GetComponent <XftEventComponent>();
            if (xftevent == null)
            {
                continue;
            }
            EventList.Add(xftevent);
            xftevent.Initialize();
        }
        Initialized = true;
    }