Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 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 GameCherry · Mar 03, 2011 at 06:35 AM · camerajavascriptmovementcamera-movement

Camera Script Amalgamation == Camera Script Abomination, Im In Over My Head

This is the camera script that Im currently using & trying to refine. I merged a smooth follow camera js with a mouse orbit js & removed anything that "broke" it. I added a mouse lock & an "aim" trigger. Instantly upon looking this you will notice that I really do not know what I'm doing. I've been at this Unity thing for about 4 weeks and am trying to learn as quickly as possible, but trying to control the camera is frustrating me to no end and I need some help. I left in all the authors comments and added my own where I added and/or changed things(MH). Please, have a look and leave any helpful comments you can. Thank you for your time. >

//MH This script is to be attached to main camera

//MH This entire script is a "smooth follow" camera.js and an "orbit mouse" camera.js merged together.

//MH this script allows the player to be followed by the camera in free form manner: reverting to "behind the player" only when chasing up

//MH you can "orbit" around the player at will but when moving mouse left/right while moving player via WASD causes player direction to follow mouse---I MUST FIX THIS

//MH Holding down "fire2" to aim causes a flicker effect(maybe the camera is bouncing between both original position & aim position due to a coding conflict?)

//MH There is no "smoothness" between aim and original position - the cameras instantly switch between each other---I MUST FIX THIS

//MH Out of fear of breaking this script further Ive left in all variables from both scripts---I MUST FIX THIS

enum Axes {MouseXandY, MouseX, MouseY} var Axis : Axes = Axes.MouseXandY;

var sensitivityX = 15.0; var sensitivityY = 15.0;

var minimumX = -360.0; var maximumX = 360.0;

var minimumY = -60.0; var maximumY = 60.0;

var rotationX = 0.0; var rotationY = 0.0;

var lookSpeed = 2.0;

var cameraReference : Camera;

// The target we are following

var target : Transform;

// The distance in the x-z plane to the target

var distance = 3;

// the height we want the camera to be above the target

var height = 0.5; var heightDamping = 2.0; var rotationDamping = 3.0;

function Update () { //MH this locks the cursor in the middle of the screen & hides it

  Screen.lockCursor = true;

//MH reveals & releases the cursor

if (Input.GetKeyDown ("escape")) Screen.lockCursor = false;

  if (Axis == Axes.MouseXandY)
  {
     // Read the mouse input axis

     rotationX += Input.GetAxis("Mouse X") * sensitivityX;
     rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

// Call our Adjust to 360 degrees and clamp function

     Adjust360andClamp();

// Most likely you wouldn't do this here unless you're controlling an object's rotation.

// Call our look left and right function.

     KeyLookAround();

// Call our look up and down function.

     KeyLookUp();
 }
 else if (Axis == Axes.MouseX)
 {

// Read the mouse input axis

     rotationX += Input.GetAxis("Mouse X") * sensitivityX;

// Call our Adjust to 360 degrees and clamp function

     Adjust360andClamp();

// if you're doing a standard X on object Y on camera control, you'll probably want to

// delete the key control in MouseX. Also, take the transform out of the if statement.

// Call our look left and right function.

     KeyLookAround();

// Call our look up and down function.

     KeyLookUp();
 }
 else
 {

// Read the mouse input axis

     rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

// Call our Adjust to 360 degrees and clamp function

     Adjust360andClamp();

// Call our look left and right function.

     KeyLookAround();

// Call our look up and down function.

     KeyLookUp();
 }

}

function KeyLookAround () { //If you're not using it, you can delete this whole function.

//Just be sure to delete where it's called in Update.

 // Call our Adjust to 360 degrees and clamp function

 Adjust360andClamp();

 // Transform our X angle

 transform.localRotation = Quaternion.AngleAxis (rotationX, Vector3.up);

}

function KeyLookUp () { // Adjust for 360 degrees and clamp

 Adjust360andClamp();

 // Transform our Y angle, multiply so we don't loose our X transform

 transform.localRotation *= Quaternion.AngleAxis (rotationY, Vector3.left);

}

function Adjust360andClamp () { // This prevents your rotation angle from going beyond 360 degrees and also

// clamps the angle to the min and max values set in the Inspector.

 // During in-editor play, the Inspector won't show your angle properly due to

// dealing with floating points.

//Uncomment this Debug line to see the angle in the console.

 // Debug.Log (rotationX);

 // Don't let our X go beyond 360 degrees + or -

 if (rotationX < -360)
 {
     rotationX += 360;
 }
 else if (rotationX > 360)
 {
     rotationX -= 360;
 }   

 // Don't let our Y go beyond 360 degrees + or -

 if (rotationY < -360)
 {
     rotationY += 360;
 }
 else if (rotationY > 360)
 {
     rotationY -= 360;
 }

 // Clamp our angles to the min and max set in the Inspector

 rotationX = Mathf.Clamp (rotationX, minimumX, maximumX);
 rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

}

function Start () { // Make the rigid body not change rotation

 if (rigidbody)
 {
     rigidbody.freezeRotation = true;
 }

}

function LateUpdate () {

// Early out if we don't have a target

//MH I nixed the GetButtonDown so I can have a constantly repeating button

if (Input.GetButton ("Fire2")) {

//MH I want the player to be able to aim all over the screen so, we:

//MH tell the code to find player01 object

//MH I got "moveDirection" from the ThirdPersonController.js which controls player01

//MH transform the camera view to behind player01 & rotate with it

//MH This chunk of code kind of works but seems to cause "flicker" - FIND A BETTER WAY!

player01 = GameObject.Find("player01"); moveDirection = transform.TransformDirection(Vector3.forward); player01.transform.rotation = Quaternion.LookRotation(moveDirection);

//MH this code draws a line from player01 to wherever player01 is aiming

var ray = Camera.main.ScreenPointToRay (Input.mousePosition); var hit : RaycastHit; if (Physics.Raycast (ray, hit, 100)) { // Get your player object's position

var player01T = GameObject.Find("player01").transform;

// Now you have where your player is and a 3D point the mouse is over

Debug.DrawLine(player01T.position, hit.point); } }

if (!target) return;

// Calculate the current rotation angles

wantedRotationAngle = target.eulerAngles.y; wantedHeight = target.position.y + height;

currentRotationAngle = transform.eulerAngles.y; currentHeight = transform.position.y;

// Convert the angle into a rotation

// The quaternion interface uses radians not degrees //so we need to convert from degrees to radians

currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);

// Damp the rotation around the y-axis

currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);

currentHeight = Mathf.Lerp (currentHeight, wantedHeight, heightDamping * Time.deltaTime);

// 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.y = currentHeight;

}

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

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.

Follow this Question

Answers Answers and Comments

No one has followed this question yet.

Related Questions

Jittery Movement - specific mechanics in mind 0 Answers

Regarding transform.position in the roll a ball tutorial 1 Answer

rotate Y axis to face mouse 1 Answer

Camera Movement 0 Answers

Set Max Rotation On Weapon Sway 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