Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by IceMachineMG · Jun 03, 2017 at 11:34 AM · camera-movementcamera rotatecamera-lookfunctions

Trying to Make a Smooth Camera Zoom While Changing Targets

Hey,

I cannot get my camera to smoothly switch targets while zooming in or out simultaneously. The camera always zooms a set amount. Though that distance/time is constant, my change target code distance/time is variable because it rotates the camera between an idle object and my player. When my player is a certain distance away, all goes well, but when he moves further or closer, it doesn't look so great. Is there some sort of ratio I can use to always make my two functions run for the same exact amount of time/frames/whatever? (I.E. the camera reaches the new zoom location and the new target at the same exact time every time the function is called?).

     private void ChangeTarget(Transform tgt)
 {
     changingTarget = true;
     activeTarget = tgt;
     Vector3 dir = new Vector3(0.0f, 0.0f, -dist);
     Quaternion rotation = Quaternion.Euler(currentX, currentY, 0.0f);
     float distToTarget = Vector3.Distance(activeTarget.position + rotation * dir, camTransform.position);
     Debug.Log(distToTarget);
     camTransform.position = Vector3.MoveTowards(camTransform.position, activeTarget.position + rotation * dir, 20.0f * Time.deltaTime);

     if (camTransform.position == activeTarget.position + rotation * dir)
     {
         camTransform.LookAt(activeTarget.position);
         changingTarget = false;
     }
 }

 //Zoom the camera in
 private void ZoomIn()
 {
     //activeTarget = target2;
     if (!zoomingOut)
     {
         float targetZoom;

         if (cam.orthographicSize > 8.0f)
         {
             targetZoom = 8.0f;
         }

         else
         {
             targetZoom = 4.0f;
         }

         if (cam.orthographicSize > targetZoom)
         {
             zoomingIn = true;
             cam.orthographicSize -= 20.0f * Time.deltaTime;

             if (targetZoom == 4.0f)
             {
                 ChangeTarget(playerTransform);
             }

             StartCoroutine(ZoomPause(0.0f));
         }

         if (cam.orthographicSize <= targetZoom)
         {
             zoomingIn = false;
             cam.orthographicSize = targetZoom;
         }
     }
 }

 //Zoom the camera out
 private void ZoomOut()
 {
     float targetZoom;

     if (cam.orthographicSize < 8.0f)
     {
         targetZoom = 8.0f;
     }

     else
     {
         targetZoom = 12.0f;
     }

     if (!zoomingIn)
     {
         if (cam.orthographicSize < targetZoom)
         {
             zoomingOut = true;
             cam.orthographicSize += 20.0f * Time.deltaTime;

             if(targetZoom == 8.0f)
             {
                 ChangeTarget(targetTransform);
             }

             StartCoroutine(ZoomPause(0.0f));
         }

         if (cam.orthographicSize >= targetZoom)
         {
             zoomingOut = false;
             cam.orthographicSize = targetZoom;
         }
     }
 }

 IEnumerator ZoomPause(float pauseTime)
 {
     float p = pauseTime;
     yield return new WaitForSeconds(p);

     if (zoomingIn)
     {
         ZoomIn();
     }
     
     else if(zoomingOut)
     {
         ZoomOut();
     }
 }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by IceMachineMG · Jun 06, 2017 at 10:03 PM

Nevermind. I figured it out with a distance ratio, which speeds up or slows down the target change based on player distance to the original camera target.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

108 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Why doesn't my camera work?,Why does my mouse keep going up? 2 Answers

viewing on the Mouse Y axis not working. 0 Answers

getting Jittery movement on camera when player rotating and moving in same time 0 Answers

CineMachine Camera Movement is inverse 1 Answer

(Solveed) How to make object face same direction as its parent? 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges