コード例 #1
0
ファイル: Teleportable.cs プロジェクト: chaosrx/Portals
        //Add a child object to the doppleganger
        public void AddChild(GameObject gameObject)
        {
            GameObject newObject = new GameObject("NewDopplegangerPart");

            newObject.transform.parent = PortalUtils.FindAnalogousTransform(gameObject.transform.parent, root, doppleganger.transform, true);
            CloneNonVisuals(newObject, gameObject, newObject.transform.parent);
        }
コード例 #2
0
ファイル: TeleportableScript.cs プロジェクト: chaosrx/Portals
        public void Initialize(Teleportable teleportable)
        {
            this.teleportable = teleportable;
            originalParent    = transform.parent;
            try {
                otherTransform       = PortalUtils.FindAnalogousTransform(transform, teleportable.root, teleportable.doppleganger.transform, true);
                otherTransformParent = otherTransform.parent;
            } catch (System.NullReferenceException e) {
                Debug.LogError("Teleportablescript on " + name + "had a problem:" + e.Message);
            }

            originalPosition = transform.localPosition;
            originalRotation = transform.localRotation;
            originalScale    = transform.localScale;
        }
コード例 #3
0
ファイル: Teleportable.cs プロジェクト: chaosrx/Portals
        // IEnumerator
        void SpawnDoppleganger()
        {
            //Wait for any initializing behaviors
            //yield return new WaitForSeconds(2);
            //Spawns the doppleganger game object
            doppleganger = new GameObject("doppleganger");
            //yield return new WaitForEndOfFrame();
            doppleganger = CloneNonVisuals(doppleganger, root.gameObject, null);
            //doppleganger.transform.parent = transform.parent;
            //yield return new WaitForEndOfFrame();
            //Transfers bone references to doppleganger bones
            if (dSkinnedRendList.Count > 0)
            {
                dSkinnedRenderers = (SkinnedMeshRenderer[])dSkinnedRendList.ToArray(typeof(SkinnedMeshRenderer));
                //Copies over correct bones and sets the root bone
                for (int i = 0; i < dSkinnedRenderers.Length; i++)
                {
                    SkinnedMeshRenderer rend      = dSkinnedRenderers[i];
                    Transform           oRootBone = rend.rootBone;
                    Transform           dRootBone = PortalUtils.FindAnalogousTransform(oRootBone, root, doppleganger.transform);
                    Transform[]         originalBones;
                    Transform[]         duplicateBones;

                    originalBones  = rend.bones;
                    duplicateBones = new Transform[rend.bones.Length];

                    for (int u = 0; u < rend.bones.Length; u++)
                    {
                        duplicateBones[u] = PortalUtils.FindAnalogousTransform(rend.bones[u], root, doppleganger.transform);
                    }

                    rend.rootBone = dRootBone;
                    rend.bones    = duplicateBones;
                }
            }

            originalTransforms  = (Transform[])oTransformList.ToArray(typeof(Transform));
            duplicateTransforms = (Transform[])dTransformList.ToArray(typeof(Transform));
            //Exchanges material for cullable
            oTeleportRends = (Renderer[])oRendererList.ToArray(typeof(Renderer));
            dTeleportRends = (Renderer[])dRendererList.ToArray(typeof(Renderer));
            if (replacementMaterial)
            {
                //yield return new WaitForEndOfFrame();
                foreach (Renderer renderer in oTeleportRends)
                {
                    if (renderer.GetType() == typeof(ParticleSystemRenderer))
                    {
                        continue;
                    }
                    Material[] newMats = new Material[renderer.materials.Length];
                    for (int i = 0; i < renderer.materials.Length; i++)
                    {
                        Material oNewMat = new Material(replacementMaterial);
                        Material m       = renderer.materials[i];
                        oNewMat.CopyPropertiesFromMaterial(m);
                        newMats[i] = oNewMat;
                    }
                    renderer.materials = newMats;
                }

                //yield return new WaitForEndOfFrame();

                foreach (Renderer renderer in dTeleportRends)
                {
                    Material[] newMats = new Material[renderer.materials.Length];
                    if (renderer.GetType() == typeof(ParticleSystemRenderer))
                    {
                        continue;
                    }
                    for (int i = 0; i < renderer.materials.Length; i++)
                    {
                        Material dNewMat = new Material(replacementMaterial);
                        Material m       = renderer.materials[i];
                        dNewMat.CopyPropertiesFromMaterial(m);
                        newMats[i] = dNewMat;
                    }
                    renderer.materials = newMats;
                }
            }


            //Saves teleportable scripts to array
            teleportableScripts = (TeleportableScript[])teleportableScriptList.ToArray(typeof(TeleportableScript));

            //Initializes teleportable scripts
            foreach (TeleportableScript t in teleportableScripts)
            {
                t.Initialize(this);
            }

            ResetDoppleganger();
            initialized       = true;
            doppleganger.name = doppleganger.name + " (Doppleganger)";
        }
コード例 #4
0
ファイル: Teleportable.cs プロジェクト: chaosrx/Portals
 public void RemoveChild(GameObject gameObject)
 {
     Destroy(PortalUtils.FindAnalogousTransform(gameObject.transform, root, doppleganger.transform, false).gameObject);
 }