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

Unity 3D:空闲检查方向

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

 问:基本上,我创建了一个2d rpg单击以统一移动游戏。我的问题是,一旦播放器到达其位置,播放器就不会朝向正确的方向,例如,请观看以下视频:  Unity问题2-YouTube [ ^ ]。谢谢。 

 
这是我的代码: 
 
私人动画师动画;
公众漂浮速度= 15f;
私有Vector3目标;
私人布尔感动;
 
无效的开始(){
    目标= transform.position;
    动画= GetComponent <Animator>();
}
 
无效更新(){
    如果(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);
 
            如果(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);
            }
        }
    }
    其他{
        如果(Mathf.Aboutly(transform.position.x,target.x)&& Mathf.roxlyly(transform.position.y,target.y)){
            感动=假;
            anim.SetBool(“ walking”,false);
        }
        其他{
            transform.position = Vector3.MoveTowards(transform.position,target,speed * Time.deltaTime);
        }
    }
}
 
 
 
答:这段代码的问题是您的动画师无法为LastMoveX和LastMoveY获取正确的值。正如我在您的视频中看到的那样,大多数情况下,LastMoveX =(1或-1)和LastMoveY(1或-1)的值。而动画师值则以以下格式设置:
 
请参阅链接中的格式:动画值的格式
 
但是根据您的代码,值不能正确输入,从而导致播放错误的动画。请尝试运行以下代码来修复您的问题。这样,您的动画师将获得0和1格式的值。
 
公开课移动:MonoBehaviour {
 
    私有Vector3目标;
    浮动LastMoveX;
    浮动LastMoveY;
    字符串sideToMove;
    //使用它进行初始化
    无效的开始(){
        目标= this.transform.position;
    }
 
无效更新(){
    如果(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;
 
 
            if(Mathf.Abs(movementDirection.x)<Mathf.Abs(movementDirection.y))
                sideToMove =“ YAxis”;
            否则if(Mathf.Abs(movementDirection.x)> Mathf.Abs(movementDirection.y))
                sideToMove =“ XAxis”;
            其他
                sideToMove =“默认”;
 
            开关(sideToMove)
            {
 
            案例“ XAxis”:
            {
                如果(movementDirection.x <0){
                    anim.setLastMoveX = -1f;
                }
                否则(movementDirection.x> 0){
                    LastMoveX = 1f;
                }
                其他{
                    LastMoveX = 0f;
                }
                LastMoveY = 0f;
            }
                打破;
 
            案例“ YAxis”:
            {
                如果(movementDirection.y> 0){
                    LastMoveY = 1f;
                }
                否则(movementDirection.y <0){
                    LastMoveY = -1f;
                }
                其他{
                    LastMoveY = 0f;
                }
                LastMoveX = 0;
            }
                打破;
 
            dafault:
                {
                    LastMoveX = 0;
                    LastMoveY = 0;
                }
            }
                         anim.setFloat(“ LastMoveX”,LastMoveX);
                         anim.setFloat(“ LastMoveY”,LastMoveY);
}
}
上一篇: 使用Codeigniter框架将Excel数据导出到mysql
下一篇: 我需要C代码的帮助