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 /
avatar image
0
Question by aweirdthing · Oct 01, 2011 at 02:44 PM · smoothmouselooklook

Smooth mouse look

Ok, in the Standard Assets, you can find a prefab - First Person Controller - This prefab has a standard script attached to it, called Mouse Look (Script). I am looking for some way to change it, or make a new one, where the camera will smoothly look around when the mouse is moved I am new with unity and scripting, so any advice will be helpful, and pls explain clearly thankyou in advance!

Comment
Add comment · Show 2
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 Martijn Hendriks · Oct 01, 2011 at 05:45 PM 0
Share

what do you mean by smooth and what are your exact goals/problems? You can for starters duplicate the original script, rename it and open it up in $$anonymous$$ono or a text editor to see what the script is doing.

avatar image aweirdthing · Oct 01, 2011 at 07:23 PM 0
Share

The original script is rigid, and follows the mouse exactly, i want a script, that will drag the camera , and "smoothen" its movements, to make it look more realistic. when i say smooth, i mean that if the mouse is moved, then the camera will begin to move slowly, gain speed, then slow down and stop The normal script simply makes the camera move at the same uniform speed as the mouse was moved.

4 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by aweirdthing · Oct 08, 2011 at 06:22 PM

hey, iv solved the problem: i attached this script to the character, and set the target to the head bone :

var target : Transform; var distance = -2.0;

var xSpeed = 750.0; var ySpeed = 120.0;

var yMinLimit = -40; var yMaxLimit = 80;

private var x = 0.0; private var y = 0.0;

var smoothTime = 0.3;

private var xSmooth = 0.0; private var ySmooth = 0.0; private var xVelocity = 0.0; private var yVelocity = 0.0;

private var posSmooth = Vector3.zero; private var posVelocity = Vector3.zero;

@script AddComponentMenu("Camera-Control/Mouse Orbit smoothed")

function Start () { var angles = transform.eulerAngles; x = angles.y; y = angles.x;

 // Make the rigid body not change rotation
 if (rigidbody)
     rigidbody.freezeRotation = true;

}

function LateUpdate () { if (target) { x += Input.GetAxis("Mouse X") xSpeed 0.02; y -= Input.GetAxis("Mouse Y") ySpeed 0.02;

     xSmooth = Mathf.SmoothDamp(xSmooth, x, xVelocity, smoothTime);
     ySmooth = Mathf.SmoothDamp(ySmooth, y, yVelocity, smoothTime);

     ySmooth = ClampAngle(ySmooth, yMinLimit, yMaxLimit);

     var rotation = Quaternion.Euler(ySmooth, xSmooth, 0);

    // posSmooth = Vector3.SmoothDamp(posSmooth,target.position,posVelocity,smoothTime);

     posSmooth = target.position; // no follow smoothing

     transform.rotation = rotation;
     transform.position = rotation * Vector3(0.0, 0.0, -distance) + posSmooth;
 }

}

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); }

Incase u are wondering, i got this script from this question:

http://answers.unity3d.com/questions/64873/smooth-mouse-orbit.html

All i did, was change the settings around, so that it could be used for a First Person Controller

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
1

Answer by Martijn Hendriks · Oct 01, 2011 at 08:00 PM

I haven't tested this myself, but you could try to adjust the angular drag of the Rigidbody attached to the CharacterController.

 controller.attachedRigidbody.angularDrag = 10;

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 aweirdthing · Oct 08, 2011 at 03:34 PM 0
Share

where should i put this? The character controller isnt a script

avatar image
0

Answer by aweirdthing · Oct 08, 2011 at 03:46 PM

Thankyou guys for the answers, but i do not know what to do with the scripts u have given me (like i said, i am a complete novicec at this) Right now i am using the simple MouseLook script, and i do not know how to incorporate the scripts you have given me. could u help? maybe give some script that i could just attach to the camera?

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 MountDoomTeam · Oct 15, 2012 at 11:42 AM 0
Share

aweirdthing, you put your comment as an answer.

avatar image
0

Answer by MountDoomTeam · Oct 15, 2012 at 11:41 AM

if you look on Unity Wiki there is a SmoothMouseLook copy of the MouseLook.cs from unity.

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
  
 [AddComponentMenu("Camera-Control/Smooth Mouse Look")]
 public class SmoothMouseLook : MonoBehaviour {
  
     public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
     public RotationAxes axes = RotationAxes.MouseXAndY;
     public float sensitivityX = 15F;
     public float sensitivityY = 15F;
  
     public float minimumX = -360F;
     public float maximumX = 360F;
  
     public float minimumY = -60F;
     public float maximumY = 60F;
  
     float rotationX = 0F;
     float rotationY = 0F;
  
     private List<float> rotArrayX = new List<float>();
     float rotAverageX = 0F;    
  
     private List<float> rotArrayY = new List<float>();
     float rotAverageY = 0F;
  
     public float frameCounter = 20;
  
     Quaternion originalRotation;
  
     void Update ()
     {
         if (axes == RotationAxes.MouseXAndY)
         {            
             rotAverageY = 0f;
             rotAverageX = 0f;
  
             rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
             rotationX += Input.GetAxis("Mouse X") * sensitivityX;
  
             rotArrayY.Add(rotationY);
             rotArrayX.Add(rotationX);
  
             if (rotArrayY.Count >= frameCounter) {
                 rotArrayY.RemoveAt(0);
             }
             if (rotArrayX.Count >= frameCounter) {
                 rotArrayX.RemoveAt(0);
             }
  
             for(int j = 0; j < rotArrayY.Count; j++) {
                 rotAverageY += rotArrayY[j];
             }
             for(int i = 0; i < rotArrayX.Count; i++) {
                 rotAverageX += rotArrayX[i];
             }
  
             rotAverageY /= rotArrayY.Count;
             rotAverageX /= rotArrayX.Count;
  
             rotAverageY = ClampAngle (rotAverageY, minimumY, maximumY);
             rotAverageX = ClampAngle (rotAverageX, minimumX, maximumX);
  
             Quaternion yQuaternion = Quaternion.AngleAxis (rotAverageY, Vector3.left);
             Quaternion xQuaternion = Quaternion.AngleAxis (rotAverageX, Vector3.up);
  
             transform.localRotation = originalRotation * xQuaternion * yQuaternion;
         }
         else if (axes == RotationAxes.MouseX)
         {            
             rotAverageX = 0f;
  
             rotationX += Input.GetAxis("Mouse X") * sensitivityX;
  
             rotArrayX.Add(rotationX);
  
             if (rotArrayX.Count >= frameCounter) {
                 rotArrayX.RemoveAt(0);
             }
             for(int i = 0; i < rotArrayX.Count; i++) {
                 rotAverageX += rotArrayX[i];
             }
             rotAverageX /= rotArrayX.Count;
  
             rotAverageX = ClampAngle (rotAverageX, minimumX, maximumX);
  
             Quaternion xQuaternion = Quaternion.AngleAxis (rotAverageX, Vector3.up);
             transform.localRotation = originalRotation * xQuaternion;            
         }
         else
         {            
             rotAverageY = 0f;
  
             rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
  
             rotArrayY.Add(rotationY);
  
             if (rotArrayY.Count >= frameCounter) {
                 rotArrayY.RemoveAt(0);
             }
             for(int j = 0; j < rotArrayY.Count; j++) {
                 rotAverageY += rotArrayY[j];
             }
             rotAverageY /= rotArrayY.Count;
  
             rotAverageY = ClampAngle (rotAverageY, minimumY, maximumY);
  
             Quaternion yQuaternion = Quaternion.AngleAxis (rotAverageY, Vector3.left);
             transform.localRotation = originalRotation * yQuaternion;
         }
     }
  
     void Start ()
     {            
         if (rigidbody)
             rigidbody.freezeRotation = true;
         originalRotation = transform.localRotation;
     }
  
     public static float ClampAngle (float angle, float min, float max)
     {
         angle = angle % 360;
         if ((angle >= -360F) && (angle <= 360F)) {
             if (angle < -360F) {
                 angle += 360F;
             }
             if (angle > 360F) {
                 angle -= 360F;
             }            
         }
         return Mathf.Clamp (angle, min, max);
     }
 }
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 XMachinaX · Aug 06, 2015 at 11:49 AM 0
Share

That $$anonymous$$ouse Script sucks! The motion is extremely laggy and keeps moving even after you stopped moving the mouse, completely unusable.

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

6 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Disabling SmoothMouseLook on pause (NullReferenceException) 3 Answers

Where can i find the standard MouseLook.js 0 Answers

How to make it flicker when looking at enemy? 0 Answers

MouseLook restrictions not working 1 Answer

Create script " SmoothMouseLookClick" 1 Answer


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