Exemple #1
0
    void Setup()
    {
        //this would be the Start method, but I need the portal's Start() method to run first
        shortS = shortTunnelSouthPortal.Find("cameraContainer").Find("camera").GetComponent <portalCamMovement>();
        shortN = shortTunnelNorthPortal.Find("cameraContainer").Find("camera").GetComponent <portalCamMovement>();
        longS  = longTunnelSouthPortal.Find("cameraContainer").Find("camera").GetComponent <portalCamMovement>();
        longN  = longTunnelNorthPortal.Find("cameraContainer").Find("camera").GetComponent <portalCamMovement>();

        RecalculateOffset(!playerBeginsOutsideLongTunnel);
        setupComplete = true;

        //subscription to public event
        portalEvents.teleport += somethingTeleported;
    }
Exemple #2
0
    void Start()
    {
        //if not provided, use default values
        if (playerCamera == null)
        {
            playerCamera = Camera.main.transform;
        }
        if (groupId == "")
        {
            groupId = transform.name;
        }

        //reference to each portal of this set
        portalA = transform.GetChild(0);
        portalB = transform.GetChild(1);

        //I generate containers for cameras (for pivot points)
        GameObject containerCamA = new GameObject("cameraContainer");
        GameObject containerCamB = new GameObject("cameraContainer");

        //and put them inside each portal
        containerCamA.transform.SetParent(portalA, true);
        containerCamB.transform.SetParent(portalB, true);

        //I generate the empty objects for the cameras
        GameObject objCamA = new GameObject("camera");
        GameObject objCamB = new GameObject("camera");

        //and put them inside the containers.
        objCamA.transform.SetParent(containerCamA.transform, true);
        objCamB.transform.SetParent(containerCamB.transform, true);
        // (now we have portal>container>empty-obj-camera)

        //add camera components to the cameras
        cameraA = objCamA.AddComponent <Camera>();
        cameraB = objCamB.AddComponent <Camera>();

        //and its scripts
        portalCamMovement scriptCamA = cameraA.gameObject.AddComponent <portalCamMovement>();
        portalCamMovement scriptCamB = cameraB.gameObject.AddComponent <portalCamMovement>();

        //I give this new cameras same setup than main camera
        Camera cameraComp = playerCamera.GetComponent <Camera>();

        cameraA.CopyFrom(cameraComp);
        cameraB.CopyFrom(cameraComp);


        //I setup both camera's scripts
        scriptCamA.playerCamera   = playerCamera;
        scriptCamA.thisPortal     = portalA;
        scriptCamA.otherPortal    = portalB;
        scriptCamA.clippingOffset = advanced.clippingOffset;
        scriptCamA.cameraId       = groupId + ".a";

        scriptCamB.playerCamera   = playerCamera;
        scriptCamB.thisPortal     = portalB;
        scriptCamB.otherPortal    = portalA;
        scriptCamB.clippingOffset = advanced.clippingOffset;
        scriptCamB.cameraId       = groupId + ".b";

        //and setup both portal's script
        teleport scriptPortalA = portalA.Find("plane").GetComponent <teleport>();
        teleport scriptPortalB = portalB.Find("plane").GetComponent <teleport>();

        scriptPortalA.setup        = this;
        scriptPortalA.cameraScript = scriptCamA;
        scriptPortalA.otherScript  = scriptPortalB;

        scriptPortalB.setup        = this;
        scriptPortalB.cameraScript = scriptCamB;
        scriptPortalB.otherScript  = scriptPortalA;

        //I create materials with the shader
        //and asign those materials to the planes (here is where they cross)
        Resize(false);

        setupComplete = true;
        portalEvents.setupComplete?.Invoke(groupId, transform);
    }