- Home /
roll a ball with rotating camera script. when i go back the ball fly
when i use S key in my game ball start flying when i used a script that rotate camera around ball ( with mouse ) this happend ps: this script change WASD , so W always be forward of ball
so anyone can see what is the problem? this is my script:
Camera script
using UnityEngine;
using System.Collections;
public class Camera2 : MonoBehaviour
{
public Transform target;
// Exposed vars for the camera position from the target.
public float height = 20f;
public float distance = 20f;
// Camera limits.
public float min = 10f;
public float max = 60;
// Rotation.
public float rotateSpeed = 1f;
// Options.
public bool doRotate;
public bool doZoom;
// The movement amount when zooming.
public float zoomStep = 30f;
public float zoomSpeed = 5f;
private float heightWanted;
private float distanceWanted;
// Result vectors.
private Vector3 zoomResult;
private Quaternion rotationResult;
private Vector3 targetAdjustedPosition;
void Start()
{
// Initialise default zoom vals.
heightWanted = height;
distanceWanted = distance;
// Setup our default camera. We set the zoom result to be our default position.
zoomResult = new Vector3(0f, height, -distance);
}
void LateUpdate()
{
// Check target.
if (!target)
{
Debug.LogError("This camera has no target, you need to assign a target in the inspector.");
return;
}
if (doZoom)
{
// Record our mouse input. If we zoom add this to our height and distance.
float mouseInput = Input.GetAxis("Mouse ScrollWheel");
heightWanted -= zoomStep * mouseInput;
distanceWanted -= zoomStep * mouseInput;
// Make sure they meet our min/max values.
heightWanted = Mathf.Clamp(heightWanted, min, max);
distanceWanted = Mathf.Clamp(distanceWanted, min, max);
height = Mathf.Lerp(height, heightWanted, Time.deltaTime * zoomSpeed);
distance = Mathf.Lerp(distance, distanceWanted, Time.deltaTime * zoomSpeed);
// Post our result.
zoomResult = new Vector3(0f, height, -distance);
}
if (doRotate)
{
// Work out the current and wanted rots.
float currentRotationAngle = transform.eulerAngles.y;
float wantedRotationAngle = target.eulerAngles.y;
// Smooth the rotation.
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotateSpeed * Time.deltaTime);
// Convert the angle into a rotation.
rotationResult = Quaternion.Euler(0f, currentRotationAngle, 0f);
}
// Set the camera position reference.
targetAdjustedPosition = rotationResult * zoomResult;
transform.position = target.position + targetAdjustedPosition;
// Face the desired position.
transform.LookAt(target);
}
}
Player Control Script
using UnityEngine;
using System.Collections;
public class playercontroller2 : MonoBehaviour
{
public float speed;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
// Use this for initialization
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
movement = Camera.main.transform.TransformDirection(movement);
rb.AddForce(movement * speed * Time.deltaTime);
}
}
so to be clear, when i use this scripts, when i use back ( S or down arrow ), the ball start fly backward but i dont have this problem with other directions so anyone know the problem?
Your answer
Follow this Question
Related Questions
camera movments fixed.. character controller without using character controller -.-' 2 Answers
Confining Mouse Look on X axis 0 Answers
How to allow camera to complete an upside down rotation while using LookAt() 0 Answers
My camera keeps spinning when i move my mouse 1 Answer
Camera gets stuck when cursor is locked 0 Answers