牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2017-03-15 投稿人: 浏览次数:565

因为是要在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的原点进行实例化

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

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。