使用UISprite在NGUI上进行点与点之间的连线

因为是要在NGUI上做一个随机实例化数个点,然后划过点(星星)之后,对点进行连线,所以使用了UIEventListener.Get(starGo).onHover = DrawLine;

此处只记录实例化线的部分

下面贴上比较主要的代码

void DrawLine(GameObject go, bool isOver)
    {
        if (isOver)
        {
            currentPos = go.transform.localPosition;
            if (beginPos != new Vector3(0, 0, 0))
            {
                //因为星星与线是同一个父物体,星星的位置已经是localPosition,所以直接用两个星星的横纵坐标除以二就是两个星星的中心点,就是线所生成的点
                Vector3 linePos = new Vector3((beginPos.x + currentPos.x) / 2, (beginPos.y + currentPos.y) / 2, 0);
                if (currentPos.y - beginPos.y > 0)
                {
                    angle = currentPos - beginPos;
                }
                else
                {
                    angle = beginPos - currentPos;
                }
                float lineAngle = Vector3.Angle(angle, gameBg.transform.right);
                GameObject line = GameObject.Instantiate(linePrefab, gameBg.transform);
                line.transform.localScale = new Vector3(1, 1, 1);
                line.transform.localPosition = linePos;
                line.transform.localRotation = Quaternion.Euler(new Vector3(0, 0, lineAngle));
                //线的长度
                line.GetComponent<UISprite>().width = (int)(Mathf.Sqrt(Mathf.Pow(beginPos.x - currentPos.x, 2) + Mathf.Pow(beginPos.y - currentPos.y, 2)));
            }
        }


需要注意的是,NGUI虽然也是屏幕坐标,但是它的原点是出于屏幕的中心点

上方的代码中,点(星星)的实例化时我已经减去了屏幕宽与高的二分之一,并且需要减去父物体的坐标,才能相对于NGUI的原点进行实例化

该文章主要目的是为了方便我个人以后观看,如果有需要或者有什么建议的朋友,可以在下方留言,若有时间,我会去查看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值