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
2
Question by arcadia · Aug 28, 2012 at 03:20 PM · c#camerasmooth follow

smooth follow C#

Hi there! I'd like to have a SmoothFollow script for first-person camera written on C# and I've found the original Js script there, but I don't know how to rewrite it on C#. Help, please!

Comment
Add comment · Show 1
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
avatar image AlucardJay · Aug 28, 2012 at 05:43 PM 0
Share

Here's some links I found useful in converting between C# and JS :

http://answers.unity3d.com/questions/12911/what-are-the-syntax-differences-in-c-and-javascrip.html

http://www.unifycommunity.com/wiki/index.php?title=Which_$$anonymous$$ind_Of_Array_Or_Collection_Should_I_Use?

Also check out : http://wiki.unity3d.com/index.php/Scripts/Controllers

2 Replies

· Add your reply
  • Sort: 
avatar image
19

Answer by Leocesar · Jan 20, 2013 at 01:22 AM

Converted to C# and working!

 // Converted from UnityScript to C# at http://www.M2H.nl/files/js_to_c.php - by Mike Hergaarden
   
 using UnityEngine;
 using System.Collections;
 
 // Place the script in the Camera-Control group in the component menu
 [AddComponentMenu("Camera-Control/Smooth Follow CSharp")]
 
 public class SmoothFollowCSharp : MonoBehaviour
 {
     /*
     This camera smoothes out rotation around the y-axis and height.
     Horizontal Distance to the target is always fixed.
     
     There are many different ways to smooth the rotation but doing it this way gives you a lot of control over how the camera behaves.
     
     For every of those smoothed values we calculate the wanted value and the current value.
     Then we smooth it using the Lerp function.
     Then we apply the smoothed values to the transform's position.
     */
 
     // The target we are following
     public Transform target;
     // The distance in the x-z plane to the target
     public float distance = 10.0f;
     // the height we want the camera to be above the target
     public float height = 5.0f;
     // How much we 
     public float heightDamping = 2.0f;
     public float rotationDamping = 3.0f;
 
     void  LateUpdate ()
     {
         // Early out if we don't have a target
         if (!target)
             return;
     
         // Calculate the current rotation angles
         float wantedRotationAngle = target.eulerAngles.y;
         float wantedHeight = target.position.y + height;
         float currentRotationAngle = transform.eulerAngles.y;
         float currentHeight = transform.position.y;
     
         // Damp the rotation around the y-axis
         currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
 
         // Damp the height
         currentHeight = Mathf.Lerp (currentHeight, wantedHeight, heightDamping * Time.deltaTime);
 
         // Convert the angle into a rotation
         Quaternion currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);
     
         // Set the position of the camera on the x-z plane to:
         // distance meters behind the target
         transform.position = target.position;
         transform.position -= currentRotation * Vector3.forward * distance;
 
         // Set the height of the camera
         transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
     
         // Always look at the target
         transform.LookAt (target);
     }
 }
Comment
Add comment · Show 3 · 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
avatar image keinji · Aug 22, 2015 at 04:47 PM 0
Share

thanks a lot, your answer helps me a lot.

avatar image BryanFahrenheit · Sep 24, 2019 at 09:52 PM 0
Share

This script works great but I personally am not in love with the way the camera is directly focused on the car. Is there a way to offset the transform.LookAt(target); so the camera aims more toward the horizon than the car itself.

$$anonymous$$y plan is to use this script to make different fixed camera angles that the player can choose from. I got inspired by the smooth transitions! Great work!

avatar image Hellium BryanFahrenheit · Sep 25, 2019 at 07:40 AM 0
Share

transform.LookAt has an overload for Vector3, so imply call

 transform.LookAt(target.position + offset);
avatar image
2

Answer by teonicel · Nov 02, 2012 at 01:01 PM

 using UnityEngine;
 using System.Collections;
 
 [AddComponentMenu("Camera/3RDPerson Camera")]
 public class PlayerCamera : MonoBehaviour {
     
     public Transform target;
     // The distance in the x-z plane to the target
     public float distance = 15;
     // the height we want the camera to be above the target
     public float height = 5;
     // How much we 
     public float heightDamping = 3;
     public float rotationDamping = 3;
 
     // Use this for initialization
     void Start () {
     
     }
     
     // Update is called once per frame
     void Update () {
         if (target){
             // Calculate the current rotation angles
             float wantedRotationAngle = target.eulerAngles.y;
             float wantedHeight = target.position.y + height;
                 
             float currentRotationAngle = transform.eulerAngles.y;
             float currentHeight = transform.position.y;
             
             // Damp the rotation around the y-axis
             currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
         
             // Damp the height
             currentHeight = Mathf.Lerp (currentHeight, wantedHeight, heightDamping * Time.deltaTime);
         
             // Convert the angle into a rotation
             Quaternion currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);
             
             // Set the position of the camera on the x-z plane to:
             // distance meters behind the target
             
             Vector3 pos = target.position;
             pos -= currentRotation * Vector3.forward * distance;
             pos.y = currentHeight;
             transform.position = pos;
             
             
             // Always look at the target
             transform.LookAt (target);
         }
     }
     
     
 }
Comment
Add comment · Show 1 · 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
avatar image HamFar · Dec 03, 2016 at 09:54 AM 0
Share

@teonicel Why is this one in Update ins$$anonymous$$d of LateUpdate?

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

15 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

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

How to rotate camera diagonally over players shoulder while still facing towards players direction 0 Answers

Orbit Camera around object 2 Answers

Full screen camera missing? 3 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