TEL:400-8793-956
当前位置:程序、服务器

如何停止角色停止移动时出现的闪烁?

提问者: 近期获赞: 浏览人数: 发布时间:2021-01-03 15:47:04

 问:我在youtube上遵循了本教程:  Unity3D。自上而下的8个方向移动-YouTube [ ^ ]。我花了一段时间,但我几乎已经从箭头的动作转变为鼠标的触摸。但是现在我有了这个问题,当角色停止移动时会出现闪烁。我查看了他发送给我的链接,但该链接无效。有谁知道如何停止角色停止移动时发生的闪烁?这是我的代码:

 
   
 
private Animator anim;
    public float speed = 15f;
    private Vector3 target;
    private bool touched;
    
    
    void Start () {
        target = transform.position;
        anim = GetComponent<Animator> ();
    }
    
    void Update () {
        touched = true;
        if (Input.GetMouseButtonDown (0)) {
            Vector3 mousePosition = Input.mousePosition;
            mousePosition.z = 10; // distance from the camera
            target = Camera.main.ScreenToWorldPoint(mousePosition);
            target.z = transform.position.z;
        }
            
            var movementDirection = (target - transform.position).normalized;
            
            if (movementDirection.x != 0 || movementDirection.y != 0) {
                anim.SetBool("walking" , true);
                anim.SetFloat("SpeedX" , movementDirection.x);
                anim.SetFloat("SpeedY" , movementDirection.y);
                
                Vector2 movement = new Vector2(
                    speed * movementDirection.x ,
                    speed * movementDirection.y);
                movement *= Time.deltaTime;
                transform.Translate(movement);
                
                if (movementDirection.x < 0) {
                    anim.SetFloat("LastMoveX" , -1f);
                }
                else if (movementDirection.x > 0) {
                    anim.SetFloat("LastMoveX" , 1f);
                }
                else {
                    anim.SetFloat("LastMoveX" , 0f);
                }
                if (movementDirection.y > 0) {
                    anim.SetFloat("LastMoveY" , 1f);
                }
                else if (movementDirection.y < 0) {
                    anim.SetFloat("LastMoveY" , -1f);
                }
                else {
                    anim.SetFloat("LastMoveY" , 0f);
                }
            } else {
            touched = false;
            anim.SetBool("walking" , false);
        }
    }
 
 
答:确保您的代码没有到达终点,因此即使玩家到达目标位置,它也可以将“ walking”参数设置为false。
 
因此,对于更改,请不要单独检查“ else”部分中的那部分代码。
 
答: 无效更新(){
    感动= true;
    如果(Input.GetMouseButtonDown(0)){
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = 10; //与相机的距离
        target = Camera.main.ScreenToWorldPoint(mousePosition);
        target.z = transform.position.z;
    }
    var MovementDirection =(target-transform.position).normalized;
    如果(movementDirection.x!= 0 || MovementDirection.y!= 0){
        anim.SetBool(“ walking”,true);
        anim.SetFloat(“ SpeedX”,MovementDirection.x);
        anim.SetFloat(“ SpeedY”,MovementDirection.y);
        Vector2运动=新Vector2(
            速度* MovementDirection.x,
            速度* MovementDirection.y);
        运动* = Time.deltaTime;
        transform.Translate(motion);
        如果(movementDirection.x <0){
            anim.SetFloat(“ LastMoveX”,-1f);
        }
        否则(movementDirection.x> 0){
            anim.SetFloat(“ LastMoveX”,1f);
        }
        其他{
            anim.SetFloat(“ LastMoveX”,0f);
        }
        如果(movementDirection.y> 0){
            anim.SetFloat(“ LastMoveY”,1f);
        }
        否则(movementDirection.y <0){
            anim.SetFloat(“ LastMoveY”,-1f);
        }
        其他{
            anim.SetFloat(“ LastMoveY”,0f);
        }
    } 
        if(movementDirection.x == 0 && MovementDirection.y == 0)//尝试检查这种情况,无论它是否到达目标位置。
        {
        感动=假;
        anim.SetBool(“ walking”,false);
    }
}
上一篇: 使用C#推送通知
下一篇: 如何使我的angular js函数仅运行一次?