透明小地图&列表点击切换&海拔图头像位移

This commit is contained in:
lishuo committed 2022-03-29 18:41:32 +08:00
1 parent bf48989a9c
commit 6ec4c0101b
114 files changed
+12787 -6517

No files matched your search

@@ -220,7 +220,9 @@ namespace Assets.Scripts.Scenes.VideoRide
for (int i = 0; i < pointList.Count; i++)
{
sumDistance += pointList[i].Distance;
decimal left = (decimal)totalDistance * 1000;
//decimal left = (decimal)totalDistance * 1000;
decimal left = (decimal)totalDistance % (decimal)mapData.TotalDistance;//处理多圈的情况
left *= 1000;
decimal right = (decimal)sumDistance;
if (left <= right)
{
@@ -0,0 +1,68 @@
using ChartAndGraph;
using System;
using UnityEngine;
namespace Assets.Scripts.Scenes.VideoRide
{
public class ElevationBarDataFeed : MonoBehaviour
{
GameObject head { get; set; }
VideoGameManager manager { get; set; }
[SerializeField]
Material _lightColor;
[SerializeField]
Material _mediumColor;
[SerializeField]
Material _hardColor;
void Start()
{
head = transform.Find("HeadPanel").gameObject;
manager= FindObjectOfType<VideoGameManager>();
BarChart barChart = GetComponent<BarChart>();
if (barChart != null)
{
barChart.DataSource.SetValue("Player 1", "Value 1", UnityEngine.Random.value * 20);
barChart.DataSource.SlideValue("Player 2", "Value 1", UnityEngine.Random.value * 20, 40f);
}
var material = barChart.DataSource.GetMaterial("Player 1");
var material1 = barChart.DataSource.GetMaterial("Player 2");
var material2 = barChart.DataSource.GetMaterial("Player 3");
var list = manager.GetMapData().List;
for (int i = 5; i < list.Count; i++)
{
if (i % 2 == 0)
{
material = material1;
}
else
{
material = material2;
}
barChart.DataSource.AddCategory($"Player {i}", material);
barChart.DataSource.SetValue($"Player {i}", "Group 1", list[i].Elevation);
}
}
float timer = 1f;
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
{
var videoPlayer = manager.CurrentPlayer;
if (videoPlayer != null)
{
BarChart barChart = GetComponent<BarChart>();
Vector3 vector3 = Vector3.back;
barChart.GetBarTrackPosition($"Player {videoPlayer.currentIndex}", "Group 1", out vector3);
head.transform.position = vector3;
}
timer += 1f;
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c3b2e5abc80332645b6ab677873adeec
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -198,7 +198,7 @@ namespace Assets.Scripts.Scenes.VideoRide
_mipMapRoute.Destroy();
}
_mipMapRoute = new GameObject("MiniMapRoute");
_mipMapRoute.transform.parent = transform;
_mipMapRoute.transform.parent = transform.parent;
var lineRender = _mipMapRoute.AddComponent<LineRenderer>();
lineRender.material = Instantiate(Resources.Load<Material>("UI/Material/1"));
@@ -206,14 +206,15 @@ namespace Assets.Scripts.Scenes.VideoRide
lineRender.endColor = Color.white;
lineRender.startColor = Color.white;
//设置宽度
lineRender.startWidth = 10f;
lineRender.endWidth = 10f;
lineRender.startWidth = 15f;
lineRender.endWidth = 15f;
lineRender.positionCount = dat.Count;
lineRender.SetPositions(feat.Points[0].ToArray());
lineRender.numCornerVertices = 20;
lineRender.numCapVertices = 20;
lineRender.loop = false;
_mipMapRoute.layer = 9;
_map.gameObject.SetActive(false);
}
GameObject _mipMapPath;
void CreateRedLineRender(VectorFeatureUnity feat)
@@ -223,7 +224,7 @@ namespace Assets.Scripts.Scenes.VideoRide
_mipMapPath.Destroy();
}
_mipMapPath = new GameObject("MiniMapPath");
_mipMapPath.transform.parent = transform;
_mipMapPath.transform.parent = transform.parent;
var lineRender = _mipMapPath.AddComponent<LineRenderer>();
lineRender.material = Instantiate(Resources.Load<Material>("UI/Material/2"));
@@ -231,8 +232,8 @@ namespace Assets.Scripts.Scenes.VideoRide
lineRender.endColor = Color.red;
lineRender.startColor = Color.red;
//设置宽度
lineRender.startWidth = 10f;
lineRender.endWidth = 10f;
lineRender.startWidth = 20f;
lineRender.endWidth = 20f;
lineRender.positionCount = dat.Count;
lineRender.SetPositions(feat.Points[0].ToArray());
lineRender.numCornerVertices = 20;
@@ -0,0 +1,79 @@
using PolyAndCode.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
namespace Assets.Scripts.Scenes.VideoRide
{
public class ListItem : MonoBehaviour, ICell
{
//UI
public Text nameLabel;
public Text genderLabel;
public Text idLabel;
//Model
private ContactInfo _contactInfo;
private int _cellIndex;
public string Id;
public string Rank;
public string Name;
private VideoGameManager manager { get; set; }
private void Start()
{
manager = FindObjectOfType<VideoGameManager>();
GetComponent<Button>().onClick.AddListener(ButtonListener);
}
private float timer = 1f;
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
{
if (manager != null)
{
var riders = manager.cyclingController?.riders;
if (riders != null)
{
var current = riders.Where(c => c.UserId.ToString() == Id).FirstOrDefault();
if (current == null)
{
gameObject.SetActive(false);
gameObject.Destroy();
}
}
}
timer += 1f;
}
}
//This is called from the SetCell method in DataSource
public void ConfigureCell(ContactInfo contactInfo, int cellIndex)
{
Id = contactInfo.id;
_cellIndex = cellIndex;
_contactInfo = contactInfo;
nameLabel.text = contactInfo.Name;
genderLabel.text = contactInfo.Gender;
idLabel.text = contactInfo.id;
}
public void UpdateItem(string name,string gender,string id)
{
nameLabel.text = name;
genderLabel.text = gender;
idLabel.text = id;
}
private void ButtonListener()
{
manager.ChangePlayer(Convert.ToInt32(Id));
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 057cbb0cadd9caf4c9031a94f9ca6d39
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -6,6 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
namespace Assets.Scripts.Scenes.VideoRide
{
@@ -20,9 +21,15 @@ namespace Assets.Scripts.Scenes.VideoRide
[SerializeField]
RecyclableScrollRect _recyclableScrollRect;
[SerializeField]
RectTransform _rectTransform;
[SerializeField]
private int _dataLength;
private bool _isInit;
//Dummy data List
private List<ContactInfo> _contactList = new List<ContactInfo>();
@@ -37,9 +44,10 @@ namespace Assets.Scripts.Scenes.VideoRide
{
if (_contactList != null) _contactList.Clear();
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);
int index = 0;
foreach (var item in list)
{
_isInit = true;
ContactInfo obj = new ContactInfo();
obj.Name = item.Name;
obj.Gender = DateTime.Now.Millisecond.ToString();
@@ -47,14 +55,30 @@ namespace Assets.Scripts.Scenes.VideoRide
_contactList.Add(obj);
}
}
float timer = 1f;
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
var currenList = FindObjectsOfType<ListItem>();//当前列表
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
foreach (ListItem o in currenList)
{
var needUpdate = list.Where(c => c.Id.ToString() == o.Id).FirstOrDefault();
if (needUpdate != null)
{
o.gameObject.SetActive(true);
o.UpdateItem(needUpdate.Name, needUpdate.LastActiveTime.ToShortTimeString(), needUpdate.Id.ToString());
}
else
{
o.gameObject.SetActive(false);
}
}
if (currenList.Count() <= 10 || list.Count() > 0)
{
InitData();
timer += 1f;
if (_recyclableScrollRect.SelfInitialize)
{
_recyclableScrollRect.ReloadData();
}
}
}
@@ -19,12 +19,15 @@ namespace Assets.Scripts.Scenes.VideoRide
//计算
protected override void ComputePlayer()
{
//base.ComputePlayer();
var current = FindObjectOfType<VideoPlayer>();
diff = totalDistance - current.EndDistance;
var z = current.transform.position.z + diff;
transform.DOMoveZ((float)z, 1f);
Push();
base.ComputePlayer();
var current = manager.CurrentPlayer;
if (current != null)
{
diff = totalDistance - current.totalDistance;
var z = current.transform.position.z + diff;
transform.DOMoveZ((float)z, 1f);
Push();
}
}
//人物向前超车 右边超车
private void Push()
@@ -66,12 +69,34 @@ namespace Assets.Scripts.Scenes.VideoRide
protected override void ComputeAnimator()
{
base.ComputeAnimator();
var currentFrame = manager.GetFrameOffSet(diff);
if (manager.mockDirection.ContainsKey(currentFrame))
{
bearing = manager.mockDirection[currentFrame];
}
animator.SetFloat("bearing", bearing);
}
protected override int GetCurrentFrame()
{
return manager.DistanceToFrames(diff) + manager.GetCurrentFrame();
}
protected override void ComputeVideo()
{
if (manager.CurrentPlayer == null || manager.CurrentPlayer.UserId != UserId)
return;
mapData = manager.GetMapData();
float ratio = 1;
if (currentIndex + 1 < mapData.List.Count)
{
ratio = (float)(manager.CurrentPlayer.speed / mapData.List[currentIndex + 1].Speed);
}
else
{
ratio = (float)(manager.CurrentPlayer.speed / mapData.List[currentIndex].Speed);
}
manager.Play(ratio);
}
//设置当前玩家属性
public void SetPlayer(double totalDistance, double cadance,double heartRate,int userId)
{
@@ -80,6 +105,7 @@ namespace Assets.Scripts.Scenes.VideoRide
this.totalDistance = totalDistance;
this.heartRate = (int?)heartRate;
this.UserId = userId;
this.power = 200;
}
}
}
@@ -22,7 +22,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoGameManager : DeviceServiceMonoBase
{
private List<VideoMapModel> videoPointList { get; set; }
public AbstractVideoPlayer CurrentPlayer { get; set; }
private MapDataModel mapData { get; set; }
private MediaPlayer mediaPlayer { get; set; }
@@ -40,10 +39,11 @@ namespace Assets.Scripts.Scenes.VideoRide
public List<float> slots = new List<float>();
GameObject infoPanel;
GameObject OnlinePlayer;
private bool isStop { get; set; }
public enum ARMode
{
INSPECT,
RIDE
RIDE,
INSPECT
}
public enum ViewMode
{
@@ -113,9 +113,15 @@ namespace Assets.Scripts.Scenes.VideoRide
cyclingController?.Run(null);
var onlineRiders = cyclingController.riders;
Debug.Log($"当前在线人数:{ MapUDPService.GetAllOnlineUserCount()}");
CreateOnlineUser(onlineRiders);
try
{
CreateOnlineUser(onlineRiders);
}
catch (Exception e)
{
Debug.Log(e.Message);
}
timer += 1f;
}
}
private int offSet = 50;
@@ -124,7 +130,7 @@ namespace Assets.Scripts.Scenes.VideoRide
private void CreateOnlineUser(List<BaseRider> list)
{
var players = FindObjectsOfType<OnlineVideoPlayer>();
var current = FindObjectOfType<VideoPlayer>();
//var current = FindObjectOfType<VideoPlayer>();
//移除
foreach (var item in players)
{
@@ -132,7 +138,9 @@ namespace Assets.Scripts.Scenes.VideoRide
if (currentItem == null)
{
item.Destroy();
currentOnlineCount--;
if (currentOnlineCount > 1) {
currentOnlineCount--;
}
}
}
//新增/更新
@@ -149,12 +157,11 @@ namespace Assets.Scripts.Scenes.VideoRide
else
{
//进来观察 看谁呢 依据谁未中心构建其他玩家
var diff = item.EndDistance - 0;//CurrentPlayer.EndDistance;
if (diff < offSet)
//var diff = item.EndDistance - CurrentPlayer?.totalDistance;
//if (diff < offSet)
{
var obj = Instantiate(OnlinePlayer, transform);
var online = obj.GetComponent<OnlineVideoPlayer>();
Debug.Log($"{onlineRider.EndDistance}={item.Power}={onlineRider.PreDistance}");
online.SetPlayer(onlineRider.EndDistance, item.Cadence, item.HeartRate, item.UserId);
obj.transform.DOMoveX(slots[currentOnlineCount], 1);
currentOnlineCount++;
@@ -163,14 +170,14 @@ namespace Assets.Scripts.Scenes.VideoRide
}
//随机选择当前骑行的人作为观察对象
if (_aRMode == ARMode.INSPECT && CurrentPlayer == null)
{
var currentPlayer = players.FirstOrDefault();
if (currentPlayer != null)
{
ChangePlayer(currentPlayer.UserId);
}
}
//if (_aRMode == ARMode.INSPECT && CurrentPlayer == null)
//{
// var currentPlayer = players.FirstOrDefault();
// if (currentPlayer != null)
// {
// ChangePlayer(currentPlayer.UserId);
// }
//}
}
//设置当前是骑行模式还是观察模式
public void SetCurrentMode(ARMode aRMode)
@@ -181,7 +188,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
videoPlayer?.gameObject.SetActive(false);
}
else
else
{
CurrentPlayer = videoPlayer;
}
@@ -203,6 +210,7 @@ namespace Assets.Scripts.Scenes.VideoRide
currentPlayer.DOMoveY(-1f, 0f);
}
}
Vector3 origin = new Vector3(0, -1, 4);
//切换人物
public void ChangePlayer(int userId)
{
@@ -213,6 +221,22 @@ namespace Assets.Scripts.Scenes.VideoRide
var currentFrames = DistanceToFrames(CurrentPlayer.totalDistance);
//获取当前人物的帧数
SetCurrentFrame(currentFrames);
//设置人物的位置
CurrentPlayer.transform.position = origin;
//var videoPlayer = FindObjectOfType<VideoPlayer>();
//videoPlayer.transform.gameObject.SetActive(false);
}
else
{
var onlineRiders = cyclingController.riders;
var onlineRider = onlineRiders.Where(c => c.UserId == userId).FirstOrDefault();
if (onlineRider != null)
{
var obj = Instantiate(OnlinePlayer, transform);
var online = obj.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.UserId);
//obj.transform.DOMoveX(slots[currentOnlineCount], 1);
}
}
}
}
@@ -314,6 +338,11 @@ namespace Assets.Scripts.Scenes.VideoRide
mediaPlayer.OpenMedia(new MediaPath(path,MediaPathType.AbsolutePathOrURL),false);
}
}
//是否停止
public bool IsQuit()
{
return isStop;
}
//设置当前视频播放速度
public void Play(float playbackRate = 1f)
{
@@ -336,6 +365,9 @@ namespace Assets.Scripts.Scenes.VideoRide
//退出骑行
public void Quit()
{
mediaPlayer?.Pause();//暂停视频
isStart = false;
isStop = true;
mediaPlayer?.Stop();
}
//获取当前视频帧数
@@ -348,8 +380,18 @@ namespace Assets.Scripts.Scenes.VideoRide
{
var frames = mediaPlayer.Info.GetMaxFrameNumber(); //视频打开后生效
var TotalDistance = route?.TotalDistance ?? 0;
distance %= TotalDistance;
return TotalDistance > 0 ? Convert.ToInt32(frames / TotalDistance * distance) : 0;
}
public int GetFrameOffSet(double distance)
{
var currentFrame = GetCurrentFrame();
var frames = mediaPlayer.Info.GetMaxFrameNumber(); //视频打开后生效
var TotalDistance = route?.TotalDistance ?? 0;
distance %= TotalDistance;
var offset = TotalDistance > 0 ? Convert.ToInt32(frames / TotalDistance * distance) : 0;
return currentFrame + offset;
}
//设置当前视频播放进度
public void SetCurrentFrame(int seq)
{
@@ -380,9 +422,8 @@ namespace Assets.Scripts.Scenes.VideoRide
//保存骑行记录
public void Save(double totalDistance)
{
mediaPlayer?.Pause();//暂停视频
Quit();
cyclingController.recorderData.EndTime = UIManager.Now.GetDateTime();
isStart = false;
var path = PFConstants.MapWorkoutRecordFolder + "/" + recordId;
Assets.Scenes.Ride.Scripts.Helper.CreateDirectoryIfNotExsit(path);
string imageFileName = path + "/" + Guid.NewGuid().ToString() + ".png";
@@ -67,6 +67,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
canvasGroup.DOFade(0, 1).onComplete+=()=> {
g.SetActive(false);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
ui.Find("Panel").gameObject.SetActive(true);
};
});
+20 -18
View File
@@ -53,29 +53,29 @@ namespace Assets.Scripts.Scenes.VideoRide
heartRate = manager.UpDateHeart();
power = manager.UpdatePower();
cadance = manager.UpdateCadence();
//TEST TODO
#region TEST
power = 200;
cadance = 150;
heartRate = 160;
#endregion
weight = App.CurrentUser.Weight;
bicycleWeight = App.CurrentUser.BicycleWeight;
//发送阻力
manager.TrackResistance(currentSlope);
base.ComputePlayer();
//一旦有功率就开始骑行、否则暂停
if (power > 0)
{
manager.Play((float)speed);
}
else
if (!manager.IsQuit())
{
manager.Pause();
if (power > 0)
{
manager.StartGame();
}
}
}
//控制视频播放速度
protected override void ComputeVideo()
{
mapData = manager.GetMapData();
float ratio = 1;
if (currentIndex + 1 < mapData.List.Count)
@@ -86,14 +86,16 @@ namespace Assets.Scripts.Scenes.VideoRide
{
ratio = (float)(speed / mapData.List[currentIndex].Speed);
}
if (manager.CurrentPlayer != null && manager.CurrentPlayer.UserId != UserId)
return;
manager.Play(ratio);
if (totalDistance >= mapData.TotalDistance)
{
start = false;
manager.Pause();//暂停视频
}
//if (totalDistance >= mapData.TotalDistance)
//{
// start = false;
// manager.Pause();//暂停视频
//}
}
protected override void ComputeRecord()
@@ -119,11 +121,11 @@ namespace Assets.Scripts.Scenes.VideoRide
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
if (totalDistance >= mapData.TotalDistance)
{
start = false;
manager.Save(totalDistance);
}
//if (totalDistance >= mapData.TotalDistance)
//{
// start = false;
// manager.Save(totalDistance);
//}
}
protected override void MoveGraphHead(bool init = false)
{
@@ -166,7 +166,7 @@ namespace Assets.Scripts.Scenes.VideoRide
avHeatrate.text = record.RiderDatas.Average(c => c._HeartRate.GetValueOrDefault(0)).ToString("f0");
avSpeed.text = record.RiderDatas.Average(c => c._Speed).ToString("f1");
maxSpeed.text = record.RiderDatas.Max(c => c._Speed).ToString("f1");
wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
//wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
avCadence.text = record.RiderDatas.Average(c => c._Cadence).GetValueOrDefault(0).ToString("f0");
DNF.gameObject.SetActive(!record.IsCompleted);
@@ -84,19 +84,19 @@ namespace Assets.Scripts.Scenes.VideoRide
// Update is called once per frame
void Update()
{
if (videoPlayer != null && manager != null)
if (manager != null && manager.CurrentPlayer != null)
{
//infoText.text = $"帧数:{manager.GetCurrentFrame()}";
power.text = Math.Round(videoPlayer.power).ToString();
speed.text = Math.Round(videoPlayer.speed).ToString();
heartRate.text = Math.Round((videoPlayer.heartRate ?? 0d)).ToString();
cadance.text = Math.Round(videoPlayer.cadance).ToString();
power.text = Math.Round(manager.CurrentPlayer.power).ToString();
speed.text = Math.Round(manager.CurrentPlayer.speed).ToString();
heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString();
cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString();
playerTimer.text = Helper.FormatTicks(videoPlayer.ticks);
distance.text = Math.Round((videoPlayer.totalDistance)).ToString();
distance.text = Math.Round((manager.CurrentPlayer.totalDistance)).ToString();
if (App.CurrentUser != null)
{
left.fillAmount = (float)(Math.Round(videoPlayer.power) / MAXPOWER_RATE);
right.fillAmount = (float)(Math.Round((videoPlayer.heartRate ?? 0f)) / MAXHEARRATE);
left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE);
right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE);
}
}
}
@@ -211,67 +211,5 @@ namespace Assets.Scripts.Scenes.VideoRide
#endregion
//private int pageIndex = 0;
//private int pageSize = 15;
//private int bufferSize = 15;
//protected override void CreateList()
//{
// //OnlineUserNum.text = " " + MapUDPService.GetNearRiderCount().ToString();
// //LayoutRebuilder.ForceRebuildLayoutImmediate(OnlineUserNum.rectTransform);
// var nearList = MapUDPService.GetOnlineUsers(App.RouteIdParam);
// if (nearList == null)
// return;
// var mod = MapUDPService.GetNearRiderCount() % pageSize;
// var pages = MapUDPService.GetNearRiderCount() / pageSize;
// //totalPages = mod > 0 ? pages + 1 : pages;
// //删除
// var currentNearList = FindObjectsOfType<NearByItemScript>();
// foreach (var item in currentNearList)
// {
// var e = nearList.Where(c => c.Id == item.UserId).FirstOrDefault();
// if (e == null)
// {
// //item.transform.gameObject.SetActive(false);
// item.Dispose();
// bufferSize--;
// }
// }
// for (int i = 0; i < nearList.Count(); i++)
// {
// Create(nearList[i], currentNearList);
// }
//}
//private void Create(OnlineUser item, NearByItemScript[] rankingList)
//{
// //var rankingList = FindObjectsOfType<NearByItemScript>();
// var nearByItemscript = rankingList.Where(c => c.UserId == item.Id).FirstOrDefault();
// //如果当前有这个用户则更新没有则创建并setslibingindex
// if (nearByItemscript == null)
// {
// //创建
// if (bufferSize < pageSize)
// {
// //情况一:还有足够的buffer,直接创建
// GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem;
// GameObject newObj = (GameObject)Instantiate(prefabItem, parent);
// nearByItemscript = newObj.GetComponent<NearByItemScript>();
// bufferSize++;
// }
// else
// {
// //情况二:没有足够的buffer,找到要被淘汰的buffer()最后一名
// nearByItemscript = rankingList.OrderByDescending(c => c.distance).FirstOrDefault();
// }
// }
// nearByItemscript.setUserId(item.Id);
// nearByItemscript.setName(item.Name);
// nearByItemscript.setRatio(item.KGWeight + "W/KG");
// nearByItemscript.setSpeed(item.Speed.ToString() + "KM/H");
// nearByItemscript.setDistance(item.Near.ToString() + "KM");
//}
}
}