거리 측정 충돌 해결 / 윈도우 메뉴 드롭다운에 간섭되고 있는 객체 목록 UI 활성화 버튼 추가 #36
1338
Assets/Prefabs/UI/Panel_ObjectDistance.prefab
Normal file
1338
Assets/Prefabs/UI/Panel_ObjectDistance.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/UI/Panel_ObjectDistance.prefab.meta
Normal file
7
Assets/Prefabs/UI/Panel_ObjectDistance.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e34354bad51342e4ca9569fd37c9b8dd
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using System.Linq;
|
||||
using static XED.UI.Panel_ObjectDistance;
|
||||
|
||||
namespace XED.Util
|
||||
{
|
||||
@@ -24,6 +25,8 @@ namespace XED.Util
|
||||
public bool isCollided = false;
|
||||
private float zFightingOffset = 1.0001f;
|
||||
|
||||
LayerMask twinObjectMask;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
objectRenderer = GetComponentInChildren<MeshRenderer>();
|
||||
@@ -32,6 +35,9 @@ namespace XED.Util
|
||||
matCubeShow = Resources.Load<Material>("Materials/Mat_CubeShow");
|
||||
matCubeSelected = Resources.Load<Material>("Materials/Mat_CubeSelected");
|
||||
matCubeCollided = Resources.Load<Material>("Materials/Mat_CubeCollided");
|
||||
|
||||
boxCollider.gameObject.layer = LayerMask.NameToLayer("TwinObject");
|
||||
twinObjectMask = LayerMask.GetMask("TwinObject");
|
||||
}
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
@@ -230,5 +236,13 @@ namespace XED.Util
|
||||
if (renderObject == null) return null;
|
||||
return new KDTree(renderObject);
|
||||
}
|
||||
|
||||
public RaycastHit GetObjectHit(Vector3 direction)
|
||||
{
|
||||
RaycastHit hitInfo;
|
||||
Physics.BoxCast(boxCollider.bounds.center, boxCollider.bounds.size / 2.0f, direction, out hitInfo, transform.rotation, Mathf.Infinity, twinObjectMask);
|
||||
|
||||
return hitInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using XED.Attributes;
|
||||
using XED.UI;
|
||||
@@ -30,8 +29,9 @@ namespace XED
|
||||
physics.Init(this);
|
||||
metaData.Init(this);
|
||||
|
||||
panel_InterferedObjectList = FindSingle<Panel_InterferedObjectList>();
|
||||
panel_InterferedObjectList = FindSingle<Panel_InterferedObjectList>();
|
||||
}
|
||||
|
||||
public void Binding(IEntity entity)
|
||||
{
|
||||
this.entity = entity;
|
||||
@@ -80,6 +80,5 @@ namespace XED
|
||||
|
||||
panel_InterferedObjectList.RemoveContentButton(this, contracter);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ namespace XED
|
||||
public Panel_DragHandler panel_draghandler;
|
||||
public Panel_AssetEdit panel_assetedit;
|
||||
public Panel_Thumbnail panel_thumbnail;
|
||||
public Panel_ObjectDistance panel_objectdistance;
|
||||
|
||||
public override void AfterAwake()
|
||||
{
|
||||
|
||||
88
Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs
Normal file
88
Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs
Normal file
@@ -0,0 +1,88 @@
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using XED.Util;
|
||||
using XRLib.UI;
|
||||
|
||||
namespace XED.UI
|
||||
{
|
||||
public class Panel_ObjectDistance : PanelBase
|
||||
{
|
||||
RectTransform Distance_up;
|
||||
RectTransform Distance_down;
|
||||
RectTransform Distance_left;
|
||||
RectTransform Distance_right;
|
||||
RectTransform Distance_foward;
|
||||
RectTransform Distance_back;
|
||||
|
||||
CustomAssetRenderObject selectedObject;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (selectedObject == null)
|
||||
return;
|
||||
|
||||
UpdateDistance(Distance_up);
|
||||
UpdateDistance(Distance_down);
|
||||
UpdateDistance(Distance_left);
|
||||
UpdateDistance(Distance_right);
|
||||
UpdateDistance(Distance_foward);
|
||||
UpdateDistance(Distance_back);
|
||||
}
|
||||
|
||||
public void Activate(string name, List<GameObject> objects)
|
||||
{
|
||||
if (objects.Count != 1)
|
||||
{
|
||||
Deactivate();
|
||||
return;
|
||||
}
|
||||
|
||||
selectedObject = objects[0].GetComponent<CustomAssetRenderObject>();
|
||||
SetActive(true);
|
||||
}
|
||||
|
||||
public void Deactivate()
|
||||
{
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
void UpdateDistance(RectTransform rect)
|
||||
{
|
||||
Vector3 direction;
|
||||
|
||||
if (rect == Distance_up)
|
||||
direction = selectedObject.transform.up;
|
||||
else if (rect == Distance_down)
|
||||
direction = -selectedObject.transform.up;
|
||||
else if (rect == Distance_left)
|
||||
direction = -selectedObject.transform.right;
|
||||
else if (rect == Distance_right)
|
||||
direction = selectedObject.transform.right;
|
||||
else if (rect == Distance_foward)
|
||||
direction = selectedObject.transform.forward;
|
||||
else if (rect == Distance_back)
|
||||
direction = -selectedObject.transform.forward;
|
||||
else return;
|
||||
|
||||
RaycastHit hit = selectedObject.GetObjectHit(direction);
|
||||
float distance = hit.distance;
|
||||
|
||||
if (distance > 0)
|
||||
{
|
||||
rect.GetComponentInChildren<TextMeshProUGUI>().text = distance.ToString();
|
||||
|
||||
Vector3 hitPoint = hit.point;
|
||||
Vector3 distanceCenterPoint = hitPoint - (direction * distance / 2);
|
||||
Vector2 screenPoint = Camera.main.WorldToScreenPoint(distanceCenterPoint);
|
||||
rect.transform.position = screenPoint;
|
||||
|
||||
rect.gameObject.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
rect.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ba071beb1c8293e49a8b25d46f91a7bf
|
||||
@@ -18,7 +18,7 @@ TagManager:
|
||||
- Voxel
|
||||
- obstacle
|
||||
- objectSnap
|
||||
-
|
||||
- TwinObject
|
||||
-
|
||||
-
|
||||
-
|
||||
|
||||
Reference in New Issue
Block a user