Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 jacoblindgren · Nov 25, 2015 at 09:11 PM · camerarotationthird person controller

Having a camera follow a player and viewing direction (JS)

I have a sphere in my game that is the (third person) player. The sphere moves (rolls around), and I would like the camera to follow the sphere and look towards the direction the sphere is moving, and rotate according to the player's movements.

I've managed to get the camera to follow the sphere's location, with an offset I've specified, but I can't figure out how to get it to mimic the spheres rotations as well. I've tried parenting the camera to the player, but that didn't work as the camera ends up rotating the full 360 degrees around the player, which is really nauseating.

How can I have the camera follow the player and react to its movements but only horizontally, and not vertically? In other words, the sphere rolls around a lot, but I only want the camera to move along a horizontal axis when it rotates with the player, not spin wildly.

Any help (preferably in Javascript) is appreciated. Thanks.

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 ___... · Nov 26, 2015 at 09:36 AM

If what you want is just to keep the camera facing always the direction of movement, you must calculate its direction based on the last position. To avoid inaccuracies produced by very small displacements, you can set a minimum distance to refresh the view direction (adjust the distance variable in the Inspector if needed):

using UnityEngine; using System.Collections;

public class CameraScript : MonoBehaviour { public Transform ballObject;
public float distance = 0.1f; // min distance to refresh view direction

   Vector3 lastPos;
   Vector3 viewDir;
   
   void Start(){
       // ensure forward direction at start
       lastPos = ballObject.transform.position - transform.forward * distance; 
   }        
   
   void Update() 
   {
       Vector3 ballPos = ballObject.transform.position;
       Vector3 newDir = ballPos - lastPos;  // direction from last position
       newDir.y = 0;    // keep the camera on horizontal plane
       if (newDir.magnitude>distance){  // only recalculate after min distance
           viewDir = newDir;
           lastPos = ballPos;
       }
       transform.position = ballPos;
       transform.forward = Vector3.Slerp(transform.forward, viewDir.normalized, Time.deltaTime);
   }
 }
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

43 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

Related Questions

How to bring UI element infront of other objects? 0 Answers

Transform.Rotate x and y rotate z, where z is 0 0 Answers

Camera X Rotation Problems 0 Answers

Rotate Camera only Horizontal? 1 Answer

Problems with rotating the player on the Y axis C# 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