2012-07-02 4 views
2

Ok, je suis nouveau sur javascript et Unity, donc c'est une question débutant. Fondamentalement, j'ai créé un script que je place sur mon appareil photo. Puis, quand je sélectionne un modèle dans le jeu, il devient la cible du script de la caméra et j'essaie de faire tourner la caméra en douceur. ci-dessous est ce que j'essaieRotation de caméra en douceur

dans la fonction de mise à jour j'utilise raycast pour attraper une unité sur le clic de la souris. ceci devient la variable cible dans le script. il définit un bool à true puis à suivre la cible dans la fonction moveto. mais il semble seulement déplacer l'appareil photo si je garde le bouton gauche de la souris enfoncé sur l'appareil. En essayant de sélectionner une unité, laissez l'appareil tourner doucement vers l'unité. Des idées sur cette erreur de débutant?

#pragma strict 
var speed = 5.0; 
var freeMovementTurnSpeed = 10.0; 
var freeMovementForwardSpeed = 10.0; 
var freeMovementVerticalSpeed = 10.0; 
var maxHeight = 30; 
var minHeight = 2; 

var target : Transform; 

var distance = 10.0; 

var maxDistance = 50; 
var minDistance = 10; 

var xSpeed = 250.0; 
var ySpeed = 120.0; 

var yMinLimit = -20; 
var yMaxLimit = 80; 

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

// The distance in the x-z plane to the target 
var followDistance = 30.0; 
var maxDistanceDelta = 0.2; 
var damping = 3.0; 
var followTarget = false; 
var smoothRotation ; 
function Start() { 
    var angles = transform.eulerAngles; 
    x = angles.y; 
    y = angles.x; 

    if(target){ 
     transform.LookAt(target); 
    } 
    // Make the rigid body not change rotation 
    if (rigidbody) 
     rigidbody.freezeRotation = true; 
} 

function LateUpdate() { 
    if(target){ 
     if(followTarget){ 
      moveTo(); 
     } 
     else{ 
      targetSelectedMovement(); 
     } 
    } 
    else { 
     freeMovement(); 
    } 


} 

function moveTo(){ 

    //transform.LookAt (target); 

    var currentDistance = Vector3.Distance(transform.position,target.position); 

    //if (currentDistance<40){ 
     //followTarget = false; 
    //} 
    //else{ 

     smoothRotation = Quaternion.LookRotation(target.position - transform.position); 
     transform.rotation = Quaternion.Slerp(transform.rotation, smoothRotation, Time.deltaTime * damping); 
     print(target); 
     //transform.position = Vector3.MoveTowards(transform.position,target.position,maxDistanceDelta); 
    //} 

} 

function freeMovement(){ 
    var zPos = Input.GetAxis("Vertical") * Time.deltaTime * freeMovementForwardSpeed; 
    var xPos = Input.GetAxis("Horizontal") * Time.deltaTime * freeMovementTurnSpeed; 
    var strafePos = Input.GetAxis("Strafe")* Time.deltaTime * freeMovementForwardSpeed; 
    var vertPos = Input.GetAxis("GainVertical")* Time.deltaTime * freeMovementVerticalSpeed; 

    if (Input.GetButton("Fire2")) { 
     x += Input.GetAxis("Mouse X") * xSpeed * 0.02; 
     y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02; 

     y = ClampAngle(y, yMinLimit, yMaxLimit); 

     var rotation2 = Quaternion.Euler(y, x, 0); 
     transform.rotation = rotation2; 
    } 
    else { 
     transform.Rotate(0, Input.GetAxis("Horizontal")*freeMovementTurnSpeed*Time.deltaTime, 0,Space.World); 
    } 
    if (vertPos > 0 && transform.position.y > maxHeight){ 
     vertPos = 0; 
    } 
    else if(vertPos < 0 && transform.position.y < minHeight){ 
     vertPos = 0; 
    } 

    print(transform.position.y); 
    transform.Translate(strafePos,vertPos,zPos); 

} 
function targetSelectedMovement() { 
    if(Input.GetKey("a") || Input.GetKey("d")){ 

     x += (-Input.GetAxis("Horizontal")) * xSpeed * 0.02; 
     var rotation = Quaternion.Euler(y, x, 0); 
     var currentDistance = Vector3.Distance(transform.position,target.position); 

     var position = rotation * Vector3(0.0, 0.0, -currentDistance) + target.position; 

     transform.rotation = rotation; 
     transform.position = position; 
    } 

    var zPos = Input.GetAxis("Vertical") * Time.deltaTime * speed; 
    currentDistance = Vector3.Distance(transform.position,target.position); 
    if(currentDistance < maxDistance && zPos < 0){ 
     transform.Translate(0, 0, zPos); 
    } 
    else if(currentDistance > minDistance && zPos > 0){ 
     transform.Translate(0, 0, zPos); 
    } 
    if (Input.GetButton("Fire2")) { 
     x += Input.GetAxis("Mouse X") * xSpeed * 0.02; 
     y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02; 

     y = ClampAngle(y, yMinLimit, yMaxLimit); 

     var rotation2 = Quaternion.Euler(y, x, 0); 
     var currentDistance2 = Vector3.Distance(transform.position,target.position); 

     var position2 = rotation2 * Vector3(0.0, 0.0, -currentDistance2) + target.position; 

     transform.rotation = rotation2; 
     transform.position = position2; 
    } 
} 

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

function Update() { 

    var hit : RaycastHit; 

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

     var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
     // Cast a ray forward from our position for the specified distance 
     if (Physics.Raycast(ray, hit)) 
     { 
      // Add a specified force to the Rigidbody component to the other GameObject 
      if(hit.collider.tag == "Unit"){ 
       print("Selected " + hit.collider.gameObject.name); 
       target = hit.collider.gameObject.transform; 
       //transform.LookAt(target); 
       followTarget = true; 
      } 
      else { 
       target = null; 
      } 

     } 

    } 

} 
+0

Est-il possible de voir l'ensemble du script? Le vôtre semble bien et je l'ai testé, fonctionne comme annoncé. – Jerdak

+0

yup je viens de relier le script complet. si cela aide me faire savoir coz im perdu – glogic

+0

Je vais devoir regarder quand je deviens mon dev. mais en attendant, essayez de remplacer Input.GetButton ("Fire1") avec Input.GetButtonDown ("Fire1"). Juste comme un test, car en regardant votre code, rien ne me saute aux yeux. GetButton est vrai tant que le bouton est maintenu, dans le passé, j'ai eu des problèmes avec le déclenchement incorrect juste comme la souris déplacé d'un objet. – Jerdak

Répondre

2

:)

Réponse tirée de mes commentaires ci-dessus:

« Je vais devoir regarder quand je reçois sur mon dev machine, mais dans le même temps essayer de remplacer Input.GetButton (. "Fire1") avec Input.GetButtonDown ("Fire1"). Juste comme un test, parce qu'en regardant votre code rien ne me saute dessus GetButton est vrai tant que le bouton est maintenu, dans le passé j'ai eu des problèmes avec lui déclenchement incorrect juste comme la souris s'est déplacée d'un objet. "

Questions connexes