Unity 3D : Player Movement Script

Unity 3D : Player Movement Script

kali ini saya akan share tentang script yang saya buat untuk Unity 3D. Script ini berisikan algoritma dalam pergerakan object player. Dalam script ini, Object player menerima inputan berupa tombol dari keyboard yang dikonversikan menjadi gerakan dalam game,
inti dari script ini adalah mengubah input dari keyboard menjadi perubahan koordinat terhadap object player, sehingga object player seakan-akan bergerak didalam game


script player movement ini di attach kedalam object player yg dalam gambar diatas masih berupa kapsul. dalam script ini juga terdapat beberapa settingan tentang pergerakan, seperti :


  • Walk Acceleration yang berfungsi untuk mengatur kecepatan dari pergerakan
  • Walk Deacceleration yang berfungsi untuk mengatur perubahan kecepatan seperti rem
  • Max Speed yang berfungsi untuk mengatur batas kecepatan
  • Jump Velocity yang befungsi untuk mengatur kecepatan dari loncatan yang terintegrasi dengan physic  ( seperti gravitasi, gerak melingkar beraturan, dll. )
  • Max Sloope berfungsi untuk mengatur kelicinan pada kecepatan ( terpleset :p)
fitur-fitur diatas dapat dikonfigur sesuai selera masing-masing.

check the script out yo ~
var walkAcceleration : float = 5;
var walkDeacceleration : float = 5;
var cameraObject : GameObject;
var maxSpeed : float = 20;

@HideInInspector
var walkDeaccelerationVolx : float ;
@HideInInspector
var walkDeaccelerationVolz : float ;

@HideInInspector
var horizontalMovement : Vector2;
var jumpVelocity : float = 20;
@HideInInspector
var grounded :boolean = false;
var maxSlope : float = 60;


function Update () {
    horizontalMovement = Vector2(rigidbody.velocity.x,rigidbody.velocity.z);
  
    if(horizontalMovement.magnitude > maxSpeed){
    horizontalMovement = horizontalMovement.normalize;
    horizontalMovement *= maxSpeed;
    }
    rigidbody.velocity.x = horizontalMovement.x;
    rigidbody.velocity.z = horizontalMovement.y;
  
    if(Input.GetAxis("Horizontal") == 0 && Input.GetAxis("Vertical") == 0 && grounded){
        rigidbody.velocity.x = Mathf.SmoothDamp(rigidbody.velocity.x, 0, walkDeaccelerationVolx, walkDeacceleration);
        rigidbody.velocity.z = Mathf.SmoothDamp(rigidbody.velocity.Z, 0, walkDeaccelerationVolz, walkDeacceleration);
        }
  
    transform.rotation = Quaternion.Euler(0, cameraObject.GetComponent(MouseLookScript).currentYRotation,0);
    rigidbody.AddRelativeForce(Input.GetAxis("Horizontal")* walkAcceleration * Time.deltaTime, 0,Input.GetAxis("Vertical")* walkAcceleration * Time.deltaTime );
  
    if (Input.GetButton("Jump")&& grounded)
    rigidbody.AddForce(0,jumpVelocity,0);
}  

function OnCollisionStay(Collision:Collision)
{
    for(var contact : ContactPoint in Collision.contacts){
        if(Vector3.Angle(contact.normal, Vector3.up)< maxSlope)
        grounded = true;
        }
}

function OnCollisionExit(){
    grounded = false;
}

No comments:

Post a Comment