• 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
Question by Latimeria · Jun 23, 2017 at 03:17 PM · c#cameramovement3dsphere

camera movement on a sphere

Hi All,

I would like to have some second pair of eyes on my script (below). First I'm very new to game dev and unity as well so forgive me my mistakes :). Straight to the piont ... what I want to achieve in this script is that that camera will move over the sphere surface directet to 'some object' when right button of the mouse is pressed (and mouse moved (x,y)). My problem here is that that behaviour of y coordinate is not what I would expect (x is very fine) ... for example camera will 'shift object' view ... please test this sript on an object and let me know what I'm missing.

Thank you

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class cameraMovement : MonoBehaviour {

 /*!!!!this script should take a knonw coordinates x,y,z for camera direction as point 0,0,0 - so camera should be always directed to point 0,0,0 (rotation target object)!!!!!/?*/

 private GameObject mainCamera;
 private Vector3 startPos;
 private float r;
 private float tetha;
 private float phi;
 private float x, y, z;
 public Transform target;

 // Use this for initialization
 void Start () {
     
     //getting camera object
     mainCamera = GameObject.Find("Camera");
     startPos = mainCamera.transform.position;

     //calcutation of start position variablas - radius and 2 angels tetha and phi - sphere coordinate system 
     r = Mathf.Sqrt(startPos.x * startPos.x + startPos.y * startPos.y + startPos.z * startPos.z);
     //as c# documentation says an angles are measured in radians (do not cofuse with degrees).
     tetha = Mathf.Acos(startPos.y / r);
     phi = Mathf.Atan(startPos.x / startPos.z);

     // checking if angles are in right place (check on wiki sphere coordinate system)
     tetha = TethaRangeCheck(tetha);
     phi = P$$anonymous$$RangeCheck(phi);

     //calculating point on sphere - camera position
     coordinationCalculation(phi, tetha);

     //some debbuging parameters 
     Debug.Log("Camera starting variablas x,y,z" + startPos.x + "  " + "  " + startPos.y + "  " + startPos.z);
     Debug.Log("Camera starting variablas r,tetha,phi"+r+"  " + "  " + tetha + "  " + phi);
     Debug.Log("Calculated coordinates x,y,z " + x + "  " + "  " + y + "  " + z);
    
 }
 
 // Update is called once per frame
 void Update () {

     //when right mouse button is pressed and hold
     if (Input.GetMouseButton(1))
     {
         //mouse movement to camera movemnt 
         if (Input.GetAxis("Mouse X") < 0)
         {
             
             phi = phi + 0.1F;
             phi = P$$anonymous$$RangeCheck(phi);

             coordinationCalculation(phi, tetha);

         }

         if (Input.GetAxis("Mouse X") > 0)
         {
            
             phi = phi - 0.1F;
             phi = P$$anonymous$$RangeCheck(phi);

             coordinationCalculation(phi, tetha);

         } 

         if (Input.GetAxis("Mouse Y") < 0)
         {
             tetha = tetha - 0.1F;
             tetha = TethaRangeCheck(tetha);

             coordinationCalculation(phi, tetha);

         }

         if (Input.GetAxis("Mouse Y") > 0)
         {
             tetha = tetha + 0.1F;
             tetha = TethaRangeCheck(tetha);

             coordinationCalculation(phi, tetha);

         }
         //debbuging parameters
         Debug.Log("Current calculated coordinates x,y,z " + x + "  " + "  " + y + "  " + z);
     }

     
     //passing position
     ChangePosition(x, y, z);

     //make camera look (rotate) at targer object (cameraFocus)
     mainCamera.transform.LookAt(target);
 }

 private void ChangePosition(float xX, float yY, float zZ)
 {

     mainCamera.transform.position = new Vector3(xX, yY, zZ); 

 }

 //sphere coordinate(x,y,z) calculation
 private void coordinationCalculation(float pi, float teth)
 {
     x = r * Mathf.Sin(teth) * Mathf.Cos(pi);
     z = r * Mathf.Sin(teth) * Mathf.Sin(pi);
     y = r * Mathf.Cos(teth);
 }

 //making sure that angle is in right place
 public float TethaRangeCheck(float number)
 {
     if (number > 3.2F)
     {
         number = 0F;
     }

     if (number < 0F)
     {
         number = 3.2F;
     }

     return number;
 }
 //making sure that angle is in right place
 public float P$$anonymous$$RangeCheck(float number)
 {
     if (number >= 6.2F)
     {
         number = 0F;
     }

     if (number < 0F)
     {
         number = 6.2F;
     }

     return number ;
 }

}

Comment

People who like this

0 Show 0
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

0 Replies

· Add your reply
  • Sort: 

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

392 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 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 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 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 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 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 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 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 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 avatar image avatar image avatar image avatar image avatar image

Related Questions

Issue with getting the mouse position in 3D and moving a gameobject on the y & z axis 0 Answers

Need Help Fixing Camera 0 Answers

How to have a child object camera with gaze move its parent object 0 Answers

How to have your player controls change while your camera rotates? 0 Answers

Jump is higher then normal 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