1
votes

I've created a character in Unity. I prepare to walking, turning and running an animation. I created three scripts for this character.

I want to when I clicked, button my character have a movement with this animation. When I clicked up button character use walking animation going forward. My down, left and right button isn't working:

#pragma strict

internal var animator:Animator;

var v:float;
var h:float;
var sprint :float;

function Start ()
{

    animator=GetComponent(Animator);

}

function Update ()
{

    v=Input.GetAxis("Vertical");
    h=Input.GetAxis("Horizontal");
    //Sprinting();
}

function FixedUpdate()
{
    animator.SetFloat("walk",v);
    animator.SetFloat("Turn",h);
    animator.SetFloat("Sprint",sprint);
}

function Sprinting()
{
    if(Input.GetButton("Fire1"))
    {
        sprint=0.2;
    }
    else
    {
        sprint=0.0;
    }
}

function MoveUp() { v = 1.0; }
function MoveDown() { v = -1.0; }
function MoveLeft() { h = -1.0; }
function MoveRight() { h = 1.0; }

#pragma strict

//--- variables for button textures

var txLeftOff:Texture; 

var txLeftOn:Texture; 

var txRightOff:Texture; 

var txRightOn:Texture; 

var txUpOff:Texture;

var txUpOn:Texture;

var txDownOff:Texture;

var txDownOn:Texture;

var txCenter:Texture;

//--- variable for button skin & style

var mySkin:GUISkin; 

//--- variables to control main camera

var layermask:LayerMask;

var rotateSwipeSpeed:float = 4; 

var cameraHeight:float = 3;

var cameraDistance:float = 9;

static var cameraRoateSpeed:float = 4; // static for using at PlayerController.js script

//--- variable to get player object 

private var player:GameObject;

//--- touch swipe variables

private var viewY:float = 0;

private var viewX:float = 0;

private var invertViewY:int = 1; // 1 or -1 

private var invertviewX:int = 1; // 1 or -1 

private var minViewY:float = -5;

private var maxViewY:float = 8;

private var minViewX:float = -20;

private var maxViewX:float = 20;

//--- variables for calculating button positions. 

private var scrW:float; // screen width 

private var scrH:float; // screen height 

private var xgap:float;// gap from left side 

private var ygap:float;// gap from bottom side

private var bgap:float;// gap between buttons

private var w:float; // width of rect 

private var h:float; // height of rect

//--- variables for button rectangle size

private var rectLeft:Rect;

private var rectRight:Rect;

private var rectUp:Rect;

private var rectDown:Rect; 

private var rectCenter:Rect;

private var rectButtonArea:Rect;

//--- variables to check the clicked buttons

private var clickLeft:boolean;

private var clickRight:boolean;

private var clickUp:boolean;

private var clickDown:boolean;

function Start()
{ 
    player = GameObject.Find("Player");

    TouchNone();

    CameraFollow();
}

function LateUpdate()
{ 

    TouchNone();

    if(Input.touches.Length > 0)
    { 
        for(var i:int=0; i<Input.touchCount; i++)
        { 
            var touch:Vector2 = Vector2(Input.GetTouch(i).position.x,(Screen.height-Input.GetTouch(i).position.y)); 
            TouchButtonCheck(touch); 

            TouchRotate(touch, i);
        }

    } 

}

function OnGUI ()
{ 

    GUI.skin = mySkin; 

    GUI.color.a = 0.5f; 

    InitializeButtonPosition();

    DrawMoveButtonGUI(); 

} 

function TouchNone()
{ 

    clickUp = false; clickDown = false; clickLeft = false; clickRight = false; 

}

function TouchButtonCheck(touch:Vector2)
{ 

    // masking direction flag status ... 

    clickUp = clickUp || rectUp.Contains(touch); 

    clickDown = clickDown || rectDown.Contains(touch); 

    clickLeft = clickLeft || rectLeft.Contains(touch); 

    clickRight = clickRight || rectRight.Contains(touch); 

    // send event to player script ...

    if(clickUp) { player.SendMessage("MoveUp"); }

    if(clickDown) { player.SendMessage("MoveDown"); }

    if(clickLeft) { player.SendMessage("MoveLeft"); }

    if(clickRight) { player.SendMessage("MoveRight"); }

    CameraFollow(); 

}

function TouchRotate(touch:Vector2, i:int)
{

    if(!rectLeft.Contains(touch) && !rectRight.Contains(touch) && !rectUp.Contains(touch) && !rectDown.Contains(touch))
   { 

        if(!rectButtonArea.Contains(touch))
        { 

            viewX += Input.GetTouch(i).deltaPosition.x * rotateSwipeSpeed * Time.deltaTime *invertviewX * cameraRoateSpeed;
            viewY -= Input.GetTouch(i).deltaPosition.y * rotateSwipeSpeed * Time.deltaTime *invertViewY; 
            CameraFollow();

        }

    }

}

function CameraFollow()
{ 

    viewY = Mathf.Clamp(viewY, minViewY, maxViewY); 

    //--- viewX = Mathf.Clamp(viewX, minViewX, maxViewX);

    player.SendMessage("MoveRotation", Vector3(viewY, viewX, 0.0f));

    var rot = Quaternion.Euler(viewY, viewX*cameraRoateSpeed, 0.0f);

    Camera.main.transform.rotation = rot;

    Camera.main.transform.position = rot * Vector3(0, cameraHeight, -cameraDistance) + player.transform.position;

    //--- Debug.DrawLine(player.transform.position, Camera.main.transform.position, Color.green, 1, false);

    var hit : RaycastHit;

    if(Physics.Linecast(player.transform.position, Camera.main.transform.position, hit, layermask))
    { 

        var tempDistance = Vector3.Distance(player.transform.position, hit.point); 

        Camera.main.transform.position = rot * Vector3(0, cameraHeight, -tempDistance) + 

player.transform.position; 

    }

} 

function InitializeButtonPosition()
{ 

    scrW = Screen.width;

    scrH = Screen.height;

    xgap = scrW / 70;

    ygap = scrH / 20;

    bgap = scrH / 80;

    w = h = scrW / 15;

    rectLeft = Rect(xgap, scrH-ygap-bgap-(h*2), w, h);

    rectRight = Rect(xgap+(bgap*2)+(w*2), scrH-ygap-bgap-(h*2), w, h);

    rectUp = Rect(xgap+w+bgap, scrH-ygap-(bgap*2)-(h*3), w, h);

    rectDown = Rect(xgap+w+bgap, scrH-ygap-h, w, h);

    rectCenter = Rect(xgap+w+bgap, scrH-ygap-bgap-(h*2), w, h);

    rectButtonArea = Rect(0, scrH-ygap-(bgap*3)-(h*3), w*3+xgap+(bgap*3), h*3+ygap+(bgap*3));

}

function DrawMoveButtonGUI()
{

    GUI.Button(rectLeft, ""); GUI.Button(rectRight, ""); 

    GUI.Button(rectUp, ""); GUI.Button(rectDown, ""); 

    GUI.Button(rectCenter, txCenter);

    // left button clicked

    if(clickLeft)
    {
        GUI.DrawTexture(rectLeft, txLeftOn, ScaleMode.StretchToFill, false, 0);
    } 

    else
    {
        GUI.DrawTexture(rectLeft, txLeftOff, ScaleMode.StretchToFill, false, 0);
    }

    // right button clicked 

    if(clickRight)
    {
       GUI.DrawTexture(rectRight, txRightOn, ScaleMode.StretchToFill, false, 0);
    } 

    else
    {
        GUI.DrawTexture(rectRight, txRightOff, ScaleMode.StretchToFill, false, 0);
    }

    // up button clicked 

    if(clickUp)
    {
        GUI.DrawTexture(rectUp, txUpOn, ScaleMode.StretchToFill, false, 0);
    } 

    else
    {
        GUI.DrawTexture(rectUp, txUpOff, ScaleMode.StretchToFill, false, 0);
    }

    // down button cliked 

    if(clickDown)
    {
        GUI.DrawTexture(rectDown, txDownOn, ScaleMode.StretchToFill, false, 0);
    }

    else
    {
        GUI.DrawTexture(rectDown, txDownOff, ScaleMode.StretchToFill, false, 0);
    } 

    //--- GUI.Button(rectButtonArea, "");

}

#pragma strict

var walkSpeed:float = 9;

private var Controller:CharacterController;

private var motion:Vector3;//motion=hareket

function Start()
{ 

    Controller = GetComponent(CharacterController);

}

function Update()
{ 

    if(Input.GetKeyDown(KeyCode.Escape))
    { 
        Application.Quit();
    }

}

function MoveLeft()
{

    motion = transform.TransformDirection(Vector3.left) * walkSpeed * Time.deltaTime; 

    Controller.Move(motion);

}

function MoveRight()
{

    motion = transform.TransformDirection(Vector3.left) * walkSpeed * Time.deltaTime*-1;

    Controller.Move(motion);

}

function MoveUp()
{ 

    motion = transform.TransformDirection(Vector3.forward) * walkSpeed * Time.deltaTime;

    Controller.Move(motion);

}

function MoveDown()
{

    motion = transform.TransformDirection(Vector3.forward) * walkSpeed * Time.deltaTime*-1;

    Controller.Move(motion);

}

function MoveRotation(angle:Vector3)
{ 

    transform.rotation = Quaternion.Euler(0, angle.y * ButtonController.cameraRoateSpeed, 0); 

}
1
This question might get better answers on gamedevelopment SE - FullyHumanProgrammer
before you repost it on gamedev.stackexchange.com as @FullyHumanProgrammer mentioned you should try to fix your indentation as the current code is hard to read. - Minzkraut
I started trying to fix the indentation and remove some of the many duplicated blank lines but I gave up because there was just far too much code. If it's too much code for me to just deal with whitespace, think about how somebody you want to answer your question feels! - Wai Ha Lee

1 Answers

1
votes

You might wanna use the animator's Blendtree and use a direction and a speed variable to define which animation to play. This Unity tutorial will help you: https://unity3d.com/learn/tutorials/modules/beginner/animation/blend-trees?playlist=17099

Good luck ;)