• 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 /
avatar image
0
Question by Schlissel · Sep 24, 2020 at 11:51 PM · offsetcamera follow

Camera controller: follow behind main character + offset

I use the attached c# script to control the camera.

Mouse scroll (pulley/roller/wheel): Zooming in and out of the main character
Up Arrow (or W key) and Down Arrow (or X key): Raise and Lower the camera
Right arrow (or D key) and Left arrow (or A key): Rotate the camera around the main character

I try to get the camera to follow the back of the main character, and add it the offset that player defined by using mouse and arrows.

This line correctly moves the camera according to the input from the mouse and arrows:

 transform.position = target.position + offset * currentZoom; 


This line correctly moves the camera so that it will follow the back of the main character:

 transform.position = target.position - target.forward + Vector3.up;


But each of them works correctly only if the other is canceled. If I try to merge them into one line, like:

 transform.position = target.position - target.forward + Vector3.up + offset * currentZoom;


then the camera doesn't move properly:

  1. Using the left and right arrows moves the camera around the main character in ellipse/oval shape instead of in a circle

  2. When the character moves, the offsset set by the right and left arrows isn't saved but the camera returns to being exactly behind the back of the main character

What do I need to do to combine the two lines so that camera does move properly?

 using UnityEngine;
 
 public class CameraController : MonoBehaviour
 {
     public Transform target;
     public Vector3 offset = new Vector3(10f, 6f, 0f); 
     public float RotationX = .5f;
     public float rightLeftSpeed = 5f;
 
     public float currentZoom = .13f;
     public float minZoom = .1f;
     public float maxZoom = 1f;
     public float speedZoom = .1f;
 
     public float currentHeight = 6f;
     public float minHeight = 0f;
     public float maxHeight = 10f;
     public float speedHeight = 1f;
 
     void Update()
     {
         currentZoom -= Input.GetAxis("Mouse ScrollWheel") * speedZoom;
         currentZoom = Mathf.Clamp(currentZoom, minZoom, maxZoom);
 
         currentHeight += Input.GetAxis("Vertical") * speedHeight * Time.deltaTime;
         currentHeight = Mathf.Clamp(currentHeight, minHeight, maxHeight);
         offset.y = currentHeight;
 
         offset = Quaternion.AngleAxis(-Input.GetAxis("Horizontal") * rightLeftSpeed, Vector3.up) * offset;
     }
 
     void LateUpdate()
     {
 
         transform.position = target.position + offset * currentZoom;
         transform.position = target.position - target.forward + Vector3.up;
         transform.LookAt(target.position + Vector3.up * RotationX);
     }
 }
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

Answer by Chrissyeah_ · Sep 25, 2020 at 12:26 AM

I would seperate the axis's. I would make the camera a child of an empty and have the camera's transform do the zoom. If you use vector3.forward in local space will keep it moving forward and back on the same axis. Then have the empty parents transform orient around the player. When you isolate the child objects world space to inherit the parents rotation, it will correctly orient around the player and zoom in and out.

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

137 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 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

Camera won't follow character 2 Answers

Infinite jumping problem: Jump function (kinda) stops calling when camera follow script applied 0 Answers

Does anyone know why this simple player camera lock script is not working? 0 Answers

How to make the camera follow player forward but not backwards? 1 Answer

Camera following Rigidbody jitter every few seconds with background 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