private void RefreshGui(float interval) { if (adapter != null && isGameObjectCreated) { if (safeArea.Level != adapter.NextDuquan.Level) { var tempData = adapter.CurDuquan; rawDuquan.SetValue(tempData.Level, tempData.Center, tempData.Radius, tempData.WaitTime, tempData.MoveTime); waitTime = rawDuquan.WaitTime; } //设置当前数据 curDuquan = adapter.CurDuquan; safeArea = adapter.NextDuquan; // curPlayPos.x = adapter.CurPosition.x; // curPlayPos.y = adapter.CurPosition.z; curPlayPos = adapter.CurPosition.WorldVector3().To2D(); if (curDuquan.Level != adapter.OffLineNum && safeArea.Level != adapter.OffLineNum && rawDuquan.Level != adapter.OffLineNum && curDuquan.Radius != 0 && safeArea.Radius != 0 && rawDuquan.Radius != 0) { root.gameObject.SetActive(true); RefreshSlider(interval); } else { root.gameObject.SetActive(false); } } }
public void Update(DuQuanInfo duQuanInfo, Vector2 selfPlayPos, float rate, float windowWidthByRice) { Vector2 referPosByPixel = Vector2.zero; var duquanPos = duQuanInfo.Center.ShiftedUIVector2(); if (duQuanInfo.Level == 0 || duQuanInfo.Radius == 0 || UnityEngine.Vector2.Distance(selfPlayPos, duquanPos) > 1.414f * windowWidthByRice / 2 + duQuanInfo.Radius) //不在地图视野内 { UIUtils.SetActive(tran, false); } else { UIUtils.SetActive(tran, true); //设置大小 float beishu = (duQuanInfo.Radius * rate) / (rectTransform.rect.width / 2); float beishuDaosu = (rectTransform.rect.width / 2) / (duQuanInfo.Radius * rate); var tilingX = Mathf.Max(beishuDaosu, 0); float tilingY = tilingX; material.SetTextureScale("_MainTex", new Vector2(tilingX, tilingY)); //设置位置 Vector2 startPoint = referPosByPixel + (duquanPos - selfPlayPos) * rate; var halfW = rectTransform.rect.width / 2; Vector2 endPoint = referPosByPixel - new Vector2(halfW, halfW) + new Vector2(beishu * halfW, beishu * halfW); var deltaX = (endPoint.x - startPoint.x) / (beishu * rectTransform.rect.width); var deltaY = (endPoint.y - startPoint.y) / (beishu * rectTransform.rect.width); var safeDelat = new Vector2(deltaX, deltaY); material.SetTextureOffset("_MainTex", safeDelat); material.SetFloat("_BoundWidth", lineWidth * beishuDaosu * 256 / rectTransform.rect.width); } }
public void Update(DuQuanInfo safeDuquan, Vector2 selfPlayPos, float playItemModelWidth, float rate, float miniMapRepresentWHByRice) { var salfCenter = safeDuquan.Center.ShiftedUIVector2(); // 安全区和当前玩家的连线的方向 if (safeDuquan.Level != 0 && safeDuquan.Radius > 0 && Vector2.Distance(selfPlayPos, salfCenter) > safeDuquan.Radius) //安全区外 { UIUtils.SetActive(tran, true); { Vector2 fromVector = new Vector2(0, 1); Vector3 temper = salfCenter - selfPlayPos; Vector2 toVector = new Vector3(temper.x * -1, temper.y, temper.z); // 以玩家为中心的坐标系 转化unity的3d坐标系 float angle = Vector2.Angle(fromVector, toVector) - 180; //求出两向量之间的夹角 Vector3 normal = Vector3.Cross(fromVector, toVector); //叉乘求出法线向量 if (normal.z < 0) { angle = 360 - angle; } line.localEulerAngles = new UnityEngine.Vector3(0, 0, -angle % 360); //控制连线的长度 var width = temper.magnitude * rate - safeDuquan.Radius * rate; var showWidth = miniMapRepresentWHByRice * rate; var rect = lineImage.uvRect; if (width > showWidth) { if (lastWidth > width) { rect.y -= (lastWidth - width) / 16; } else if (lastWidth < width) { rect.y -= (lastWidth - width) / 16; } rect.y = rect.y % 1; lastWidth = width; width = showWidth; } else { rect.height = width / 16; } lineRT.sizeDelta = new Vector2(2, width); lineImage.uvRect = rect; //控制pivot // lineRT.pivot = new Vector2(0.5f, - playItemModelWidth / (2 * width)); lineRT.pivot = new Vector2(1f, 1f); lineRT.anchoredPosition = selfPlayPos * rate; } } else { UIUtils.SetActive(tran, false); } }
public void UpdateDuQuanAndSafe(Transform curDuquanRoot, Transform safeDuquanRoot, Transform miniDisTran, Transform curBombAreaRoot) { var data = adapter; if (data != null) { curDuquan = data.CurDuquan; safeDuquan = data.NextDuquan; if (SharedConfig.IsOffline) { // UIUtils.SetActive(curDuquanRoot, true); // UIUtils.SetActive(safeDuquanRoot, true); UIUtils.SetActive(miniDisTran, true); // if(UpdateSafe != null) // UpdateSafe(); // if(UpdateDuquan != null) // UpdateDuquan(); if (UpdataMiniDis != null) { UpdataMiniDis(); } } else { // if (curDuquan.Level != adapter.OffLineNum && curDuquan.Radius != 0) // { // UIUtils.SetActive(curDuquanRoot, true); // if (UpdateDuquan != null) UpdateDuquan(); // } // else // UIUtils.SetActive(curDuquanRoot, false); // // if (safeDuquan.Level != adapter.OffLineNum && safeDuquan.Radius != 0) // { // UIUtils.SetActive(safeDuquanRoot, true); // if (UpdateSafe != null) UpdateSafe(); // } // else // UIUtils.SetActive(safeDuquanRoot, false); if (safeDuquan.Level != adapter.OffLineNum && safeDuquan.Radius != 0) { UIUtils.SetActive(miniDisTran, true); if (UpdataMiniDis != null) { UpdataMiniDis(); } } else { UIUtils.SetActive(miniDisTran, false); } } //轰炸区 if (curBombAreaInfo == null || data.BombArea.Num != curBombAreaInfo.Num) { curBombAreaInfo = data.BombArea; } if (SharedConfig.IsOffline) { UIUtils.SetActive(curBombAreaRoot, true); if (UpdateBombArea != null) { UpdateBombArea(); } } else { if (curBombAreaInfo.Num != -1 && curBombAreaInfo.Radius != 0) { UIUtils.SetActive(curBombAreaRoot, true); if (UpdateBombArea != null) { UpdateBombArea(); } } else { UIUtils.SetActive(curBombAreaRoot, false); } } } }