거리 측정 충돌 해결 / 윈도우 메뉴 드롭다운에 간섭되고 있는 객체 목록 UI 활성화 버튼 추가 #36

Merged
UVCXR merged 9 commits from sjm/250331 into main 2025-03-31 10:19:32 +09:00
8 changed files with 1453 additions and 4 deletions
Showing only changes of commit 65f0199ec6 - Show all commits

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e34354bad51342e4ca9569fd37c9b8dd
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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()
{

View 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);
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ba071beb1c8293e49a8b25d46f91a7bf

View File

@@ -18,7 +18,7 @@ TagManager:
- Voxel
- obstacle
- objectSnap
-
- TwinObject
-
-
-