unity实现按钮和攻击对象的选定

Posted xiaogeformax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity实现按钮和攻击对象的选定相关的知识,希望对你有一定的参考价值。


unity实现按钮和攻击对象的选定

下面来看下实现的效果的样子

unity通常用来用类似easytouch的资源来实现对攻击目标的选定

UI里面的效果的实现

这个样子就把一个按钮实现了由到类似于Easytouch的方式了。


下面我们看下代码的实现吧。

 //区域半径
    [SerializeField]
    private int radius = 100;
    public int Radius  get  return this.radius;  
    //选择区域按钮的轴
    private Vector2 chooseAreaAxis = Vector2.zero;
    //上次按钮选择区域按钮的轴
    private Vector2 lastChooseAreakAxis = Vector2.zero;
    public Vector2 LasttChooseAreaAxis  get  return this.lastChooseAreakAxis;  

    #endregion

    UIWidget root;
    [SerializeField]
    //背景
    UISprite bg;
    //可拖拽的小物体
    [SerializeField]
    UISprite thumb;





下面类似于Easytouch,我们也要实现中间的轴,并且将按钮按下时候的UI的蓝色外圈命名为背景。

 void Init()
    
        bg.enabled = false;
        bg.transform.localPosition = Vector3.zero;
        thumb.transform.localPosition = Vector3.zero;
        SetJoystickSize(radius);
    

    #region ngui event

    //按下按钮
    public override void OnPress(bool isPressed)
    
        base.OnPress(isPressed);
        if (isPressed)
               
            OnBtnPressed.Invoke();
           
            //如果是选定区域按钮
            if (isUseChooseArea)
            
                bg.enabled = true;
                CalculateChooseAreaAxis();
            
        
        else
        
            //原来的OnPressed函数里的
            if (SwipedOutType != -1)
            
                OnSwipeOut.Invoke(SwipedOutType);
                SwipedOutType = -1;
            
            OnBtnUp.Invoke();
            if (isUseChooseArea)
            
                //  PlayController.Instance.DestroyWarning();

                CalculateChooseAreaAxis();
                bg.enabled = false;
                thumb.transform.localPosition = Vector3.zero;

            

        

    

在初始化的时候是要隐藏蓝色外圈的,然后对它们进行居中了Vector3.zero。

下面用来计算便宜的地方,再加上些拖拽的功能,差不多就是可以完成的了。

 void CalculateChooseAreaAxis()
    
        Vector3 offset = ScreenPos_to_NGUIPos(UICamera.currentTouch.pos);
        Vector3 buttonPos = UICamera.currentCamera.transform.InverseTransformPoint(transform.position);
        offset -= buttonPos;

        if (offset.magnitude > radius)
        
            offset = offset.normalized * radius;
        

        thumb.transform.localPosition = offset;
        lastChooseAreakAxis = chooseAreaAxis;
        chooseAreaAxis = new Vector2(offset.x / radius, offset.y / radius);

        //问题
        onMove.Invoke(chooseAreaAxis);
       
    


后面我们去定义几个事件去响应按钮的点击和拖拽。



这个点击会比如说唤起OnBtnClick(),同样按下会触发OnOpress函数,此外等等



场景里面实现的效果

这个样子差不多就可以在UI脚本的人物就算完成了,下面要去实现在场景里去实现的大圆和小圆的样子了。


先就是这个的样子。


其实这里的就是用美工做的东西然后实例化去,在场景里面在主角的位置给实例化出来,然后把偏移的位置给传进来,这个样子就是差不多了。

最后再来看下。


代码下载,在NGUI下面使用,继承自UIButton


以上是关于unity实现按钮和攻击对象的选定的主要内容,如果未能解决你的问题,请参考以下文章

unity怎么得到dropdown选定的文本

unity3d里面 ,点击一下按钮然后自动修改人物属性数据,比如说攻击力增加等等的代码怎么编写?

禁用选定元素的突出显示

3dmax布料动画导入到Unity流程

关于Unity中的模型描边与Shader切换(专题二)

unity点击按钮出现子按钮