Search Unity

Object rotate to other object direction ?

Discussion in 'Scripting' started by Quast, Nov 19, 2017.

  1. Quast

    Quast

    Joined:
    Jul 5, 2015
    Posts:
    560
    Hi
    My problem that object not follow other object direction. It keeps shaking even if target facing object "gun" !!. if angle over 20 degree , object "gun" follows the main body "vehicle", but it doesn't. How to solve this ?

    Code (CSharp):
    1.     public float z_angle,min_z,max_z;
    2.     public float y_angle,min_y,max_y;
    3.     public float x_angle,min_x,max_x;
    4.     public float speed;
    5.     public Transform target;
    6.     public Transform main_part;
    7.  
    8.     private Quaternion rots;
    9.     public float target_compass;
    10.  
    11.     // Update is called once per frame
    12.     void Update () {
    13.  
    14.         target_compass = Vector3.Angle(target.transform.position - transform.position, transform.forward);
    15.  
    16.         Vector3 charAngle = gameObject.transform.eulerAngles;
    17.         charAngle.z = (charAngle.z > 180) ? charAngle.z-360 : charAngle.z;
    18.         charAngle.z = Mathf.Clamp(charAngle.z, -min_z, max_z);
    19.         z_angle = charAngle.z;
    20.         gameObject.transform.rotation = Quaternion.Euler(charAngle);
    21.  
    22.         Vector3 charAnglex = gameObject.transform.eulerAngles;
    23.         charAnglex.x = (charAnglex.x > 180) ? charAnglex.x-360 : charAnglex.x;
    24.         charAnglex.x = Mathf.Clamp(charAnglex.x, -min_x, max_x);
    25.         x_angle = charAnglex.x;
    26.         gameObject.transform.rotation = Quaternion.Euler(charAnglex);
    27.  
    28.         Vector3 charAngley = gameObject.transform.eulerAngles;
    29.         charAngley.y = (charAngley.y > 180) ? charAngley.y-360 : charAngley.y;
    30.         charAngley.y = Mathf.Clamp(charAngley.y, -min_y, max_y);
    31.         y_angle = charAngley.y;
    32.         gameObject.transform.rotation = Quaternion.Euler(charAngley);
    33.  
    34.         if (target_compass < 20 ) {
    35.         var rotation = Quaternion.LookRotation(target.position - transform.position);
    36.         transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * speed);
    37.         }
    38.         else {
    39.             transform.rotation = Quaternion.LookRotation(main_part.transform.forward);
    40.  
    41.         }