// Use this for initialization void Start() { animController = GameObject.Find("Player").GetComponent <AnimController>(); player = GameObject.Find("Player"); cam = Camera.main; hspeed = 6; gravityDir = animController.getGravityDir(); vspeed = .3f * Physics.gravity.magnitude; gravAccel = .5f * -Physics.gravity.magnitude; camAngleX = cam.transform.eulerAngles.x; camAngleY = cam.transform.eulerAngles.y; camAngleZ = cam.transform.eulerAngles.z; /*camAngleX = player.transform.eulerAngles.x; * camAngleY = player.transform.eulerAngles.y; * camAngleZ = player.transform.eulerAngles.z;*/ transform.localEulerAngles = new Vector3(camAngleX, camAngleY, camAngleZ); if (gravityDir == AnimController.gravityDirection.DOWN) { transform.position = new Vector3(player.transform.position.x, player.transform.position.y + 1, player.transform.position.z); } else if (gravityDir == AnimController.gravityDirection.UP) { transform.position = new Vector3(player.transform.position.x, player.transform.position.y - 1, player.transform.position.z); } else if (gravityDir == AnimController.gravityDirection.LEFT) { transform.position = new Vector3(player.transform.position.x + 1, player.transform.position.y, player.transform.position.z); } else if (gravityDir == AnimController.gravityDirection.UP) { transform.position = new Vector3(player.transform.position.x - 1, player.transform.position.y, player.transform.position.z); } lifetime = 5.0f; StartCoroutine(Countdown()); }
// Update is called once per frame void LateUpdate() { if (animCtrl.getGravityDir() != gravityDir) { prevGravityDir = gravityDir; gravityDir = animCtrl.getGravityDir(); rotated = false; } if (gravityDir == AnimController.gravityDirection.UP) { yOffset = InvertedGravityOffset; if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, -30, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, 180, 3 * Time.deltaTime); //stop rotation when the character is upside down if (Mathf.Abs(-30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f && Mathf.Abs(zangle - 180) < .1f) { transform.eulerAngles = new Vector3(-30, 0, 180); rotated = true; rotating = false; } else { transform.eulerAngles = new Vector3(xangle, yangle, zangle); } } } else if (gravityDir == AnimController.gravityDirection.LEFT) { yOffset = leftGravityOffset; if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, -30, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, -90, 3 * Time.deltaTime); //stop rotation when the character is upside down if (Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(-30 - yangle) < .1f && Mathf.Abs(zangle - -90) < .1f) { transform.eulerAngles = new Vector3(0, -30, -90); rotated = true; rotating = false; } else { transform.eulerAngles = new Vector3(xangle, yangle, zangle); } } } else if (gravityDir == AnimController.gravityDirection.DOWN) { yOffset = normalGravityOffset; if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, 30, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, 0, 3 * Time.deltaTime); //stop rotation when the character is upside down if (Mathf.Abs(30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f && Mathf.Abs(zangle - 0) < .1f) { transform.eulerAngles = new Vector3(30, 0, 0); rotated = true; rotating = false; } else { transform.eulerAngles = new Vector3(xangle, yangle, zangle); } } } else if (gravityDir == AnimController.gravityDirection.RIGHT) { yOffset = rightGravityOffset; if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, 30, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, 90, 3 * Time.deltaTime); //stop rotation when the character is upside down if (Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(30 - yangle) < .1f && Mathf.Abs(zangle - 90) < .1f) { transform.eulerAngles = new Vector3(0, 30, 90); rotated = true; rotating = false; } else { transform.eulerAngles = new Vector3(xangle, yangle, zangle); } } } //transform.position = player.transform.position + offset + yOffset; Vector3 targetPos = player.transform.position + offset + yOffset; transform.position = Vector3.Lerp(transform.position, targetPos, 4 * Time.deltaTime); }
// Update is called once per frame void LateUpdate() { if (animCtrl.getGravityDir() != gravityDir) { prevGravityDir = gravityDir; gravityDir = animCtrl.getGravityDir(); rotated = false; } camDistance = distance; float lockY = -999.0f; float lockX = -999.0f; if (currY < 5.0f) { if (gravityDir == AnimController.gravityDirection.DOWN) { lockY = transform.position.y; lookAt.transform.position = new Vector3(player.transform.position.x, player.transform.position.y + -(currY - 5.0f) / 10, player.transform.position.z); } if (gravityDir == AnimController.gravityDirection.UP) { lockY = transform.position.y; lookAt.transform.position = new Vector3(player.transform.position.x, player.transform.position.y - -(currY - 5.0f) / 10, player.transform.position.z); } if (gravityDir == AnimController.gravityDirection.LEFT) { lockX = transform.position.x; lookAt.transform.position = new Vector3(player.transform.position.x + -(currY - 5.0f) / 10, player.transform.position.y, player.transform.position.z); } if (gravityDir == AnimController.gravityDirection.RIGHT) { lockX = transform.position.x; lookAt.transform.position = new Vector3(player.transform.position.x - -(currY - 5.0f) / 10, player.transform.position.y, player.transform.position.z); } //currY = 5.0f; } Vector3 dir = new Vector3(0, 0, -camDistance); Quaternion rotation = new Quaternion(); Quaternion rotation2 = Quaternion.Euler(0, 0, 0); if (gravityDir == AnimController.gravityDirection.DOWN) { rotation = Quaternion.Euler(currY, currX, 0); //change2 = new Vector3(currY, currX, 0); change2 = rotation * dir; //dir = new Vector3(0, 0, -distance); } else if (gravityDir == AnimController.gravityDirection.UP) { rotation = Quaternion.Euler(-currY, -currX, 0); //dir = new Vector3(0, 0, -distance); } else if (gravityDir == AnimController.gravityDirection.LEFT) { rotation = Quaternion.Euler(currY, currX, 0); rotation2 = Quaternion.Euler(0, 0, -90); //rotation = Quaternion.Euler(currX, -currY, 0); //change2 = new Vector3(currX, -currY, 0); change2 = rotation * dir; } else { rotation = Quaternion.Euler(currY, currX, 0); rotation2 = Quaternion.Euler(0, 0, 90); //dir = new Vector3(0, -distance, 0); } change = rotation.eulerAngles; camTransform.position = lookAt.position + rotation2 * (rotation * dir); mockCamera.transform.position = Vector3.zero + Quaternion.Euler(currY, currX, 0) * dir; if (lockY != -999.0f) { camTransform.position = new Vector3(lockX == -999.0f ? camTransform.position.x : Mathf.Clamp(camTransform.position.x, lockX, lockX), lockY == -999.0f ? camTransform.position.y : Mathf.Clamp(camTransform.position.y, lockY, lockY), camTransform.position.z); } if (gravityDir == AnimController.gravityDirection.UP) { if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, -30, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, 180, 3 * Time.deltaTime); //stop rotation when the character is upside down if (/*Mathf.Abs(-30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f &&*/ Mathf.Abs(zangle - 180) < .1f || Mathf.Abs(zangle - -180) < .1f) { //camTransform.eulerAngles = new Vector3(-30, 0, 180); zangle = 180; rotated = true; rotating = false; } else { //camTransform.eulerAngles = new Vector3(xangle, yangle, zangle); } } } else if (gravityDir == AnimController.gravityDirection.LEFT) { if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, -30, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, -90, 3 * Time.deltaTime); //stop rotation when the character is upside down if (/*Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(-30 - yangle) < .1f &&*/ (Mathf.Abs(zangle - -90) < .1f) || Mathf.Abs(zangle - 270) < .1f) { zangle = -90; rotated = true; rotating = false; } } } else if (gravityDir == AnimController.gravityDirection.DOWN) { if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, 30, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, 0, 3 * Time.deltaTime); //stop rotation when the character is upside down if (/*Mathf.Abs(30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f &&*/ (Mathf.Abs(zangle - 0) < .1f) || (Mathf.Abs(zangle - 360) < .1f)) { zangle = 0; rotated = true; rotating = false; } } } else if (gravityDir == AnimController.gravityDirection.RIGHT) { if (!rotated) { rotating = true; xangle = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime); yangle = Mathf.LerpAngle(yangle, 30, 3 * Time.deltaTime); zangle = Mathf.LerpAngle(zangle, 90, 3 * Time.deltaTime); //stop rotation when the character is upside down if (/*Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(30 - yangle) < .1f &&*/ Mathf.Abs(zangle - 90) < .1f || Mathf.Abs(zangle - -270) < .1f) { zangle = 90; rotated = true; rotating = false; } } } mockCamera.transform.LookAt(Vector3.zero); camEulerAngles = mockCamera.transform.eulerAngles; camTransform.LookAt(lookAt.position, new Vector3(-Mathf.Sin(zangle * Mathf.Deg2Rad), Mathf.Cos(zangle * Mathf.Deg2Rad), 0)); //camTransform.LookAt(lookAt.position, new Vector3(1, 0, 0)); //transform.position = player.transform.position + offset + yOffset; //Vector3 targetPos = player.transform.position + offset + yOffset; //transform.position = Vector3.Lerp(transform.position, targetPos, 4 * Time.deltaTime); }