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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值