因为是要在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的原点进行实例化
该文章主要目的是为了方便我个人以后观看,如果有需要或者有什么建议的朋友,可以在下方留言,若有时间,我会去查看