1
\$\begingroup\$

What I meant by slow parent is that I want the camera to not move immediately my third person controller moves so it won't look as though the earth is moving. The camera is the child of the player

\$\endgroup\$
  • 3
    \$\begingroup\$ I think you're looking to LERP the camera toward its desired position. \$\endgroup\$ – Almo Jan 12 '16 at 18:03
  • \$\begingroup\$ Is camera child of your player? \$\endgroup\$ – Hamza Hasan Jan 12 '16 at 18:07
  • 1
    \$\begingroup\$ Your question is unclear. Is the camera parented to the third person controller? Does it need to be (can it be a seperate Game Object that you can have it lag behind)? Which one is supposed to lag, the camera or the actual player controller? Please clarify. \$\endgroup\$ – Coburn Jan 12 '16 at 18:08
  • \$\begingroup\$ so you shouldnt make it as child of player character. just right some code that follow the character that with delay or any other behavior \$\endgroup\$ – virtouso Jan 12 '16 at 19:39
  • \$\begingroup\$ plase tell the story better. you mean you want to camera follow your player more realisticly instead of moving strictly after it? there is smooth follow script in standard assets. you can use it \$\endgroup\$ – virtouso Jan 12 '16 at 19:41
2
\$\begingroup\$

Well, CameraFollow or SmoothFollow script may help you in this issue. Here I'm pasting the SmoothFollow code.

  • Make a script named SmoothFollow.
  • Attach it to Camera
  • Give the target transform from inspector (your player in your case)
  • Play with other attributes to set your desired behaviour.

Code,

using UnityEngine;
using System.Collections;

public class SmoothFollow : MonoBehaviour
{
    public bool shouldRotate = true;

    // 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;
    float wantedRotationAngle;
    float wantedHeight;
    float currentRotationAngle;
    float currentHeight;
    Quaternion currentRotation;

    void LateUpdate ()
    {
       if (target){
           // Calculate the current rotation angles
           wantedRotationAngle = target.eulerAngles.y;
           wantedHeight = target.position.y + height;
           currentRotationAngle = transform.eulerAngles.y;
           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
           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
           if (shouldRotate)
               transform.LookAt (target);
       }

    }
}
\$\endgroup\$
2
\$\begingroup\$

Create a camera smooth follow script eg:

public class SmoothFollow : MonoBehaviour
{
    [SerializeField] //for explicity sake
    public GameObject player; //assign this in the editor or find it in the start function.

    private Vector3 _velocity = Vector3.zero;

    //private void Start(){
    //    
    //}

    private void Update () {
        this.gameObject.transform.position = Vector3.SmoothDamp(this.gameObject.transform.position, Camera.main.transform.position, ref _velocity, 0.5f); 
        //change the last value to the time you want to complete the movement.
    }
}

Now obviously this is a very simple example and may not compile (I'm 75% sure I didn't make any typos.)

Unity3D Vector3.SmoothDamp function

Cheers, Hope this helps.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.