Search Unity

CharacterContoller Speed Problem

Discussion in 'Scripting' started by aanimation, Nov 27, 2014.

  1. aanimation

    aanimation

    Joined:
    Oct 23, 2012
    Posts:
    49
    Hi All,

    im using charactercontroller for movement character system and using rightclick ground method to move as walk/run
    but i have problem about speed.
    while im click in ground/terrain near myChar, then myChar will walk/run normally with normal speed.
    but
    while im click far from myChar, movement start with high Speed and then Lerp to Slow based distance click posistion between myChar.

    i need to myChar do movement as normal speed or constant speed.

    please HELP me..what wrong with cc?
    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3.  
    4. public class photonPlayer : Photon.MonoBehaviour
    5. {
    6.     public Object markToWay;
    7.     public Transform hitTarget;
    8.  
    9.     CharacterController charControl;
    10.     Vector3 localClickValue = Vector3.zero;
    11.     Vector3 startPos, correctPos, receiveClick, actualClick, movement;;
    12.     Quaternion correctRot = Quaternion.identity;
    13.     bool appliedInitUpdate = false;
    14.     float gravity = 20.0F;
    15.    
    16.     void Start ()
    17.     {
    18.         correctPos = transform.position;receiveClick = transform.position;actualClick = transform.position;
    19.  
    20.         charControl = GetComponent<CharacterController>();
    21.  
    22.         if(photonView.isMine)
    23.         {
    24.             startPos = transform.position; actualClick = startPos;
    25.         }
    26.     }
    27.    
    28.     void OnPhotonSerializeView (PhotonStream stream, PhotonMessageInfo info)
    29.     {
    30.         if(stream.isWriting)
    31.         {
    32.             Vector3 pos = transform.position;
    33.             Quaternion rot = transform.rotation;
    34.             Vector3 mineClick = actualClick;
    35.             stream.SendNext(pos);stream.SendNext(rot);stream.SendNext(mineClick);
    36.         }
    37.         else
    38.         {
    39.             correctPos = (Vector3)stream.ReceiveNext();
    40.             correctRot = (Quaternion)stream.ReceiveNext();
    41.             receiveClick = (Vector3)stream.ReceiveNext();
    42.  
    43.             if(!appliedInitUpdate)
    44.             {
    45.                 appliedInitUpdate = true;
    46.                 transform.position = correctPos;
    47.                 transform.rotation = correctRot;
    48.             }
    49.         }
    50.     }
    51.    
    52.     void Update ()
    53.     {
    54.         if (Input.GetButtonDown ("LetsMove"))
    55.         {
    56.             Vector2 point = Input.mousePosition;
    57.             RaycastHit hit = new RaycastHit ();
    58.             Vector3 click = actualClick;
    59.            
    60.             if (Physics.Raycast (Camera.main.ScreenPointToRay (point), out hit, 100.0f))
    61.             {
    62.                 if (hit.collider.name == "Terrain")
    63.                 {
    64.                     click = hit.point;
    65.                     Instantiate(markToWay, hit.point, Quaternion.identity);
    66.                 }
    67.             }
    68.            
    69.             if (actualClick != click)
    70.                 actualClick = click;
    71.         }
    72.        
    73.         if(photonView.isMine)
    74.         {
    75.             transform.position = Vector3.Lerp(transform.position, actualClick, Time.deltaTime * 0.1f);
    76.             Quaternion rotation = Quaternion.identity;
    77.             Vector3 relativePos = actualClick - transform.position;
    78.             if(relativePos != Vector3.zero)
    79.             {
    80.                 rotation = Quaternion.LookRotation(relativePos);rotation.x = 0; rotation.z = 0;
    81.             }
    82.             transform.rotation =  Quaternion.Slerp(transform.rotation, rotation, Time.smoothDeltaTime * 5.0f);
    83.             localClickValue = actualClick;
    84.         }
    85.         else
    86.         {  
    87.             transform.position = Vector3.Slerp(transform.position, correctPos, Time.deltaTime * 5.0f);
    88.             transform.rotation = Quaternion.Slerp(transform.rotation, correctRot, Time.smoothDeltaTime * 15.0f);
    89.             localClickValue = receiveClick;
    90.         }
    91.        
    92.         float dist = Vector3.Distance (transform.position, localClickValue);
    93.         if (localClickValue != Vector3.zero && dist > .5f)
    94.             movement = transform.TransformDirection (Vector3.forward) * 3 - Vector3.up * 10;
    95.         else
    96.             movement = Vector3.zero - Vector3.up * 10;
    97.  
    98.        
    99.         //movement
    100.         movement.y -= gravity * Time.deltaTime;
    101.         charControl.Move(movement * Time.deltaTime);
    102.  
    103.     }
    104. }