Hello Unity Members. I found a free script online( i know its bad and might be illegal but thats the only thing i found online).Anyways, it's a camera script that rotates camera around player(target) when you click a mouse button. Left click rotates the camera without rotating the target and Right click rotates the camera and the player. That's my problem. I want the right click to be like left click. To not to change target's rotation. I edited the script but nothing seems to work. I might be very rookie with those camera things.
**Can someone help me ? Again, i want: when i right click to rotate the camera keep target's rotation the same and not rotate with the camera**.
var target:Transform; // Target to follow
var targetHeight = 1.7; // Vertical offset adjustment
var distance = 12.0; // Default Distance
var offsetFromWall = 0.1; // Bring camera away from any colliding objects
var maxDistance = 20; // Maximum zoom Distance
var minDistance = 0.6; // Minimum zoom Distance
var xSpeed = 200.0; // Orbit speed (Left/Right)
var ySpeed = 200.0; // Orbit speed (Up/Down)
var yMinLimit = -80; // Looking up limit
var yMaxLimit = 80; // Looking down limit
var zoomRate = 40; // Zoom Speed
var rotationDampening = 3.0; // Auto Rotation speed (higher = faster)
var zoomDampening = 5.0; // Auto Zoom speed (Higher = faster)
var collisionLayers:LayerMask = -1; // What the camera will collide with
var lockToRearOfTarget = false; // Lock camera to rear of target
var allowMouseInputX = true; // Allow player to control camera angle on the X axis (Left/Right)
var allowMouseInputY = true;
private var xDeg = 0.0;
private var yDeg = 0.0;
private var currentDistance;
private var desiredDistance;
private var correctedDistance;
private var rotateBehind = false;
@script AddComponentMenu("Camera-Control/Third Person Camera Orbit (MMORPG Like)")
function Start ()
{
var angles:Vector3 = transform.eulerAngles;
xDeg = angles.x;
yDeg = angles.y;
currentDistance = distance;
desiredDistance = distance;
correctedDistance = distance;
}
function LateUpdate ()
{
if (!target)
return;
var vTargetOffset:Vector3;
if (GUIUtility.hotControl == 0)
{
if (allowMouseInputX)
xDeg += Input.GetAxis ("Mouse X") * xSpeed * 0.02;
if (allowMouseInputY)
yDeg -= Input.GetAxis ("Mouse Y") * ySpeed * 0.02;
}
yDeg = ClampAngle (yDeg, yMinLimit, yMaxLimit);
var rotation:Quaternion = Quaternion.Euler (yDeg, xDeg, 0);
desiredDistance -= Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime * zoomRate * Mathf.Abs (desiredDistance);
desiredDistance = Mathf.Clamp (desiredDistance, minDistance, maxDistance);
correctedDistance = desiredDistance;
vTargetOffset = Vector3 (0, -targetHeight, 0);
var position:Vector3 = target.position - (rotation * Vector3.forward * desiredDistance + vTargetOffset);
var collisionHit:RaycastHit;
var trueTargetPosition:Vector3 = Vector3 (target.position.x, target.position.y + targetHeight, target.position.z);
var isCorrected = false;
if (Physics.Linecast (trueTargetPosition, position, collisionHit, collisionLayers))
{
correctedDistance = Vector3.Distance (trueTargetPosition, collisionHit.point) - offsetFromWall;
isCorrected = true;
}
currentDistance = !isCorrected || correctedDistance > currentDistance ? Mathf.Lerp (currentDistance, correctedDistance, Time.deltaTime * zoomDampening) : correctedDistance;
currentDistance = Mathf.Clamp (currentDistance, minDistance, maxDistance);
position = target.position - (rotation * Vector3.forward * currentDistance + vTargetOffset);
transform.rotation = rotation;
transform.position = position;
}
function RotateBehindTarget()
{
}
static function ClampAngle (angle : float, min : float, max : float)
{
if (angle < -360){
angle += 360;
Debug.Log(angle); }
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
Thanks alot!
↧