Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 /
avatar image
0
Question by atomicvomit · Jan 26, 2012 at 02:56 AM · camerarotationthird-person

3rd Person Camera with fixed rotation

I've taken the camera script from 3d platformer tutorial and tried to make it work for what I need. As the code is right now the camera rotates with the rotation of the target, but I want it to keep looking in the same direction while keeping the target in the center of the view.

 public GameObject Target;
 public float Distance = 10.0f;
 public float Height = 10.0f;
 public float SmoothLag = 0.2f;
 public float MaxSpeed = 10.0f;
 
 private Vector3 headOffset = Vector3.zero;
 private Vector3 centerOffset = Vector3.zero;
 private ThirdPersonController controller;
 private Vector3 velocity = Vector3.zero;
 private float targetHeight = 100000.0f;
 
 void Awake()
 {
     CharacterController characterController = (CharacterController)Target.collider;
     if(characterController)
     {
         centerOffset = characterController.bounds.center - Target.transform.position;    
         headOffset = centerOffset;
         headOffset.y = characterController.bounds.max.y - Target.transform.position.y;
     }
     
     if(Target) 
     {
         controller = Target.GetComponent<ThirdPersonController>();
     }
     
     if(!controller)
     {
         Debug.Log("Please assign a target to the camera that has a Third Person Controller script component.");    
     }
 }
 
 // Use this for initialization
 void Start () 
 {
 
 }
 
 // Update is called once per frame
 void Update () 
 {
     
 }
 
 void LateUpdate()
 {
     //transform.position = Target.transform.position + Offset;
     
     
     Vector3 targetCenter = Target.transform.position;// + centerOffset;
     Vector3 targetHead = new Vector3(0,0,1);//Target.transform.position;// + headOffset;
     
     targetHeight = targetCenter.y + Height;
     
     ApplyPositionDamping(new Vector3(targetCenter.x, targetHeight, targetCenter.z));    
     
     SetUpRotation(targetCenter, targetHead);
     
 }

 void ApplyPositionDamping(Vector3 targetCenter)
 {
     Vector3 position = transform.position;
     Vector3 offset = position - targetCenter;
     offset.y = 0;
     Vector3 newTargetPos = offset.normalized * Distance + targetCenter;
     
     Vector3 newPosition;
     newPosition.x = Mathf.SmoothDamp(position.x, newTargetPos.x, ref velocity.x, SmoothLag, MaxSpeed);
     newPosition.z = Mathf.SmoothDamp(position.z, newTargetPos.z, ref velocity.z, SmoothLag, MaxSpeed);
     newPosition.y = Mathf.SmoothDamp(position.y, newTargetPos.y, ref velocity.y, SmoothLag, MaxSpeed);
     
     //newPosition = AdjustLineOfSight(newPosition, targetCenter);
     
     transform.position = newPosition;
 }
 
 void SetUpRotation(Vector3 centerPos, Vector3 headPos)
 {
     Vector3 cameraPos = transform.position;
     Vector3 offsetToCenter = centerPos - cameraPos;
     
     Quaternion yRotation = Quaternion.LookRotation(new Vector3(offsetToCenter.x, 0, offsetToCenter.z));
     //Quaternion yRotation = Quaternion.LookRotation(new Vector3(0, 0, 0));
     
     Vector3 relativeOffset = Vector3.forward * Distance + Vector3.down * Height;
     transform.rotation = yRotation * Quaternion.LookRotation(relativeOffset);
 }
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 syclamoth · Jan 26, 2012 at 03:14 AM

The simplest way to keep the target in the middle of the view of a camera while maintaining the same view direction is to set up something like this-

The camera must be the child of a 'camTarget' object, which you place in the same location as the character's starting position.

Then, put a simple position-copying script on the camTarget, and set the character to its 'target' value:

 public Transform target;
 void LateUpdate()
 {
     transform.position = target.position;
 }

Set up like this, the camera will always point at the character from the same direction and distance, no matter which way the character is facing!

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

3rd person camera view lock 2 Answers

3rd Person Camera Geometry Navigation 1 Answer

Turning a character to match camera rotation 0 Answers

How do I rotate a character with my mouse? 1 Answer

How to make an object face the mouse in a non-2D world 1 Answer


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