移动时不断动画

时间:2015-06-07 15:21:42

标签: c# unity3d

我有以下代码,但我遇到了一些问题。每次调用更新时,角色都会移动到我给他的位置。但是当我用鼠标点击地面时,我只是给他一个观点,当我试图让它为角色设置动画时问题就开始了。

如果我在clickToMove()方法中传递动画的值,即使我们没有移动,它也会始终播放该动画。如果我将clickToMove置于"如果点击"角色将传送而不是朝着。我不能想办法正确地做动画,只有当对象移动时,并且当它停止时再回到空闲状态,即使clickToMove()一直在播放。

using UnityEngine;
using System.Collections;

public class ClickScript : MonoBehaviour
{

public float moveSpeed;
public float minDistance;
Vector3 mouseClick; //Creates a variable to save the constant of the hit from raycast

private Animator anim;
private Rigidbody rigidB;


// Use this for initialization
void Start()
{
    anim = GetComponent<Animator>();
    rigidB = GetComponent<Rigidbody>();
}

// Update is called once per frame
void FixedUpdate()
{
    if (Input.GetMouseButtonDown(1))//If clicked
    {
        clickPosition(); //Gets the click position

    }

    if (Vector3.Distance(transform.position, mouseClick) > minDistance) //If the click distance is bigger than the minimal
    {
        //It is allways moving, but since there's no click position it doesn't move when not clicked
        clickToMove();
    }
}

void clickPosition()//This function throw a raycast on the ground and save the position on mouseClick to make the char move to there
{
        RaycastHit clickHit; //creates a constant with the infos from the raycast
        Ray mouseClickPosition = Camera.main.ScreenPointToRay(Input.mousePosition); //creates a constant to save the mouse position

        if (Physics.Raycast(mouseClickPosition, out clickHit, 100.00f))//throw a raycast returning the mouse position and more infos
        {
            Debug.Log("Click at " + clickHit.point); //Show where were clicked
            mouseClick = clickHit.point;//mouseClick receive the position of the click
        }
}

void clickToMove() //this function make the player look at the click and move to mouseClick
{
    mouseClick.y = transform.position.y; //get rid of the y to fix rotation bugs
    transform.LookAt(mouseClick);//look at the poit you clicked        
    transform.position = Vector3.MoveTowards(transform.position, mouseClick, moveSpeed * Time.deltaTime);//move to the clickpoint

}
}

1 个答案:

答案 0 :(得分:0)

这样怎么样?

bool _isAnimating = false;
// Update is called once per frame
void FixedUpdate()
{
    if (Input.GetMouseButtonDown(1))//If clicked
    {
        clickPosition(); //Gets the click position

        //start animation here!!!
        //animator.SetBool("bWalk", false);

        //and set animation state to true
        _isAnimating = true;
    }

    if (Vector3.Distance(transform.position, mouseClick) > minDistance)
    {
        clickToMove();
    }
    else if(_isAnimating)
    {
        //turn off the animation here!!!
        //animator.SetBool("bStop", false);

        //and set to false
        _isAnimating = false;
    }
}