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 emir3100 · Aug 15, 2016 at 06:03 PM · camerajavascriptcamera rotatethird-person-cameramouse orbit

How to make third person camera were the player walks in the direction in which the camera is directed

When i start the game the camera is facing the player but then when I press the W key my player walks backwards and same goes for A,S,D they do the opposite. Don't know what I did wrong with the scripts.

Script 1/ MouseOrbit.js:

 var xSpeed = 250.0;
 var ySpeed = 120.0;
 
 var yMinLimit = -20;
 var yMaxLimit = 80;
 
 private var x = 0.0;
 private var y = 0.0;
 
 
 @script AddComponentMenu("Camera-Control/Mouse Orbit")
 
 function Start () {
     var angles = transform.eulerAngles;
     x = angles.y;
     y = angles.x;

 // Make the rigid body not change rotation
    if (GetComponent.<Rigidbody>())
     GetComponent.<Rigidbody>().freezeRotation = true;
 }

 function Update () {
 distance = Raycast3.distance3;

 if(distance > 2){
 distance = 0.8;




 if(( Input.GetKey(KeyCode.A)) || ( Input.GetKey(KeyCode.LeftArrow))) {
 x -= 3; //The higher the number the faster the camera rotation
 }
 if(( Input.GetKey(KeyCode.D)) || ( Input.GetKey(KeyCode.RightArrow))) {
 x += 3; 
 }

 }

 }
 
 
 
 function LateUpdate () {
     if (target) {
         x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
         y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
          
          y = ClampAngle(y, yMinLimit, yMaxLimit);
                 
         var rotation = Quaternion.Euler(y, x, 0);
         var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
         
         transform.rotation = rotation;
         transform.position = position;
     }
 }
 
 
 static function ClampAngle (angle : float, min : float, max : float) {
     if (angle < -360)
         angle += 360;
     if (angle > 360)
         angle -= 360;
     return Mathf.Clamp (angle, min, max);
 }

Script 2/ Raycast3.js:

 static var distance3 : float = 5;
 
 
 function Update () {
 
 
 var hit: RaycastHit;
 if( Physics.Raycast(transform.position,transform.TransformDirection(Vector3.forward),hit)){
 distance3 = hit.distance;
 
 }
 }
 
 
 Script 3/ Lookatcamera.js:
 
 var target : Transform; 
 
 function Update() {
 transform.LookAt(target);
 }

I watched this tutorial: https://www.youtube.com/watch?v=iEm88-SkyUM

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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by shadowpuppet · Aug 15, 2016 at 06:35 PM

try this maybe for an Orbit camera. I know it works so if you still have the same problem then check your input settings - maybe pos and neg are swapped or try changing the pos and negs in the script. I don't know, i didn't really look at your script. but maybe compare to the one below and maybe spot some differences. this came from a scripting pack that I don't use. I just use the FPS and TPS cameras

 using UnityEngine;
 using System.Collections;
 
 public class OrbitCamera : MonoBehaviour {
     /* These variables are what tell the camera how its going to function by
      * setting the viewing target, collision layers, and other properties
      * such as distance and viewing angles */
     public Transform viewTarget;
     public LayerMask collisionLayers;
     public float distance = 6.0f;
     public float distanceSpeed = 150.0f;
     public float collisionOffset = 0.3f;
     public float minDistance = 4.0f;
     public float maxDistance = 12.0f;
     public float height = 1.5f;
     public float horizontalRotationSpeed = 250.0f;
     public float verticalRotationSpeed = 150.0f;
     public float rotationDampening = 0.75f;
     public float minVerticalAngle = -60.0f;
     public float maxVerticalAngle = 60.0f;
     public bool useRMBToAim = false;
 
     /* These variables are meant to store values given by the script and
      * not the user */
     private float h, v, newDistance, smoothDistance;
     private Vector3 newPosition;
     private Quaternion newRotation, smoothRotation;
     private Transform cameraTransform;
 
     /* This is where we initialize our script */
     void Start () {
         Initialize ();
     }
 
     /* This is where we set our private variables, check for null errors,
      * and anything else that needs to be called once during startup */
     void Initialize () {
         h = this.transform.eulerAngles.x;
         v = this.transform.eulerAngles.y;
 
         cameraTransform = this.transform;
         smoothDistance = distance;
 
         NullErrorCheck ();
     }
 
     /* We check for null errors or warnings and notify the user to fix them */
     void NullErrorCheck () {
         if (!viewTarget) {
             Debug.LogError("Please make sure to assign a view target!");
             Debug.Break ();
         }
         if (collisionLayers == 0) {
             Debug.LogWarning("Make sure to set the collision layers to the layers the camera should collide with!");
         }
     }
 
     /* This is where we do all our camera updates. This is where the camera
      * gets all of its functionality. From setting the position and rotation,
      * to adjusting the camera to avoid geometry clipping */
     void LateUpdate () {
         if (!viewTarget)
             return;
 
         /* We check for right mouse button functionality, set the rotation
          * angles, and lock the mouse cursor */
         if (!useRMBToAim) {
             /* Check to make sure the game isn't paused and lock the mouse cursor*/
             if (Time.timeScale > 0.0f)
                 Screen.lockCursor = true;
             
             h += Input.GetAxis ("Mouse X") * horizontalRotationSpeed * Time.deltaTime;
             v -= Input.GetAxis ("Mouse Y") * verticalRotationSpeed * Time.deltaTime;
 
             h = ClampAngle (h, -360.0f, 360.0f);
             v = ClampAngle (v, minVerticalAngle, maxVerticalAngle);
 
             newRotation = Quaternion.Euler(v, h, 0.0f);
         } else {
             if(Input.GetMouseButton(1)) {
                 /* Check to make sure the game isn't paused and lock the mouse cursor */
                 if (Time.timeScale > 0.0f)
                     Screen.lockCursor = true;
 
                 h += Input.GetAxis ("Mouse X") * horizontalRotationSpeed * Time.deltaTime;
                 v -= Input.GetAxis ("Mouse Y") * verticalRotationSpeed * Time.deltaTime;
 
                 h = ClampAngle (h, -360.0f, 360.0f);
                 v = ClampAngle (v, minVerticalAngle, maxVerticalAngle);
 
                 newRotation = Quaternion.Euler(v, h, 0.0f);
             } else {
                 Screen.lockCursor = false;
             }
         }
 
         /* We set the distance by moving the mouse wheel and use a custom
          * growth function as the time value for linear interpolation */
         distance = Mathf.Clamp (distance - Input.GetAxis ("Mouse ScrollWheel") * 10, minDistance, maxDistance);
         smoothDistance = Mathf.Lerp (smoothDistance, distance, TimeSignature(distanceSpeed));
 
         /*We give the rotation some smoothing for a nicer effect */
         smoothRotation = Quaternion.Slerp (smoothRotation, newRotation, TimeSignature((1 / rotationDampening) * 100.0f));
 
         newPosition = viewTarget.position;
         newPosition += smoothRotation * new Vector3(0.0f, height, -smoothDistance);
 
         /* Calls the function to adjust the camera position to avoid clipping */
         CheckSphere ();
 
         smoothRotation.eulerAngles = new Vector3 (smoothRotation.eulerAngles.x, smoothRotation.eulerAngles.y, 0.0f);
 
         cameraTransform.position = newPosition;
         cameraTransform.rotation = smoothRotation;
     }
 
     /* This is where the camera checks for a collsion hit within a specified radius,
      * and then moves the camera above the location it hit with an offset value */
     void CheckSphere () {
         /* Add height to our spherecast origin */
         Vector3 tmpVect = viewTarget.position;
         tmpVect.y += height;
         
         RaycastHit hit;
 
         /* Get the direction from the camera position to the origin */
         Vector3 dir = (newPosition - tmpVect).normalized;
 
         /* Check a radius for collision hits and then set the new position for
          * the camera */
         if(Physics.SphereCast(tmpVect, 0.3f, dir, out hit, distance, collisionLayers)) {
             newPosition = hit.point + (hit.normal * collisionOffset);
         }
     }
 
     /* Keeps the angles values within their specificed minimum and maximum
      * inputs while at the same time putting the values back to 0 if they 
      * go outside of the 360 degree range */
     private float ClampAngle (float angle, float min, float max) {
         if(angle < -360)
             angle += 360;
         
         if(angle > 360) 
             angle -= 360;
         
         return Mathf.Clamp (angle, min, max);
     }
     
     /* This is our custom logistic growth time signature with speed as input */
     private float TimeSignature(float speed) {
         return 1.0f / (1.0f + 80.0f * Mathf.Exp(-speed * 0.02f));
     }
 }
 
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
avatar image
0

Answer by emir3100 · Aug 20, 2016 at 11:31 PM

@shadowpuppet I changed the settings in the input settings but then when I turn the camera at the other side then I get the same problem so I need somehow make that the character turns when the camera turns, I will look into the script and see if it solves the problem. thanks

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 shadowpuppet · Aug 21, 2016 at 04:25 PM 0
Share

sounds more like a TPS camera. I think the purpose of an orbit cam is to circle around the player. a TPS camera moves the player with the camera

avatar image emir3100 shadowpuppet · Aug 22, 2016 at 05:42 AM 0
Share

You're right

avatar image shadowpuppet · Aug 21, 2016 at 04:25 PM 0
Share

@ emir3100 sounds more like a TPS camera. I think the purpose of an orbit cam is to circle around the player. a TPS camera moves the player with the camera

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

mouse orbit 0 Answers

Why does my transform.lookat not work? 1 Answer

Fixed Camera rotate to follow player 2 Answers

Can't find second camera in Javascript 1 Answer

Third person look around camera, jagged results 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