2025-11-06 20:14:27 +09:00
using System ;
2025-10-30 09:31:05 +09:00
using System.Collections.Generic ;
2025-11-06 20:14:27 +09:00
using System.Linq ;
2025-10-30 09:31:05 +09:00
using UnityEngine ;
2025-12-03 21:19:07 +09:00
/// <summary>
/// <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> ̵<EFBFBD> <20> <> <EFBFBD> <EFBFBD> (Path)<29> <> 3D <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7B7> ִ<EFBFBD> <20> <> (View) Ŭ<> <C5AC> <EFBFBD> <EFBFBD>
/// Unity<74> <79> LineRenderer <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
/// </summary>
// <20> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD> LineRenderer <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> ߰<EFBFBD>
2025-10-30 09:31:05 +09:00
[RequireComponent(typeof(LineRenderer))]
2025-11-25 15:15:54 +09:00
public class PathLineView : MonoBehaviour
2025-10-30 09:31:05 +09:00
{
private LineRenderer lineRenderer ;
void Awake ( )
{
lineRenderer = GetComponent < LineRenderer > ( ) ;
2025-11-06 20:14:27 +09:00
// Line Renderer <20> ⺻ <20> <> <EFBFBD> <EFBFBD>
lineRenderer . startWidth = 0.01f ;
lineRenderer . endWidth = 0.01f ;
lineRenderer . material = new Material ( Shader . Find ( "Legacy Shaders/Particles/Alpha Blended Premultiply" ) ) ;
lineRenderer . startColor = Color . cyan ;
lineRenderer . endColor = Color . cyan ;
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
private Vector3 ConvertRobotDataToVector3 ( RobotData pose )
{
float x = Convert . ToSingle ( pose . x / - 1000.0 ) ; // mm -> m
float y = Convert . ToSingle ( pose . z / 1000.0 ) ; // Robot Z(mm) -> Unity Y(m)
float z = Convert . ToSingle ( pose . y / - 1000.0 ) ; // Robot Y(mm) -> Unity Z(m)
return new Vector3 ( x , y , z ) ;
}
/// <summary>
/// <20> <> <EFBFBD> α <CEB1> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> մ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD>
/// </summary>
2025-10-30 09:31:05 +09:00
public void DrawPath ( List < RobotData > poses )
{
if ( poses = = null | | poses . Count < 2 )
{
2025-11-06 20:14:27 +09:00
lineRenderer . positionCount = 0 ; // <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> 2<> <32> <20> ̸<EFBFBD> <CCB8> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2025-10-30 09:31:05 +09:00
return ;
}
2025-12-03 21:19:07 +09:00
// LINQ<4E> <51> Select<63> <74> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> RobotData<74> <61> Vector3 <20> 迭<EFBFBD> <E8BFAD> <20> <> ȯ
2025-11-06 20:14:27 +09:00
Vector3 [ ] positions = poses . Select ( ConvertRobotDataToVector3 ) . ToArray ( ) ;
2025-12-03 21:19:07 +09:00
// LineRenderer<65> <72> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ <20> 迭 <20> <> <EFBFBD> <EFBFBD>
2025-11-06 20:14:27 +09:00
lineRenderer . positionCount = positions . Length ;
lineRenderer . SetPositions ( positions ) ;
}
2025-12-03 21:19:07 +09:00
/// <summary>
/// Ư<> <C6AF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> 巡<EFBFBD> <E5B7A1> <EFBFBD> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> , <20> <> <EFBFBD> θ<EFBFBD> <20> ǽð<C7BD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> <20> <EFBFBD>
/// (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
/// </summary>
/// <param name="poses"><3E> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> Ʈ</param>
/// <param name="modifiedIndex"><3E> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (<28> 巡<EFBFBD> <E5B7A1> ) <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ε<EFBFBD> <CEB5> <EFBFBD> </param>
/// <param name="tempPose"><3E> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ǽð<C7BD> <20> ӽ<EFBFBD> <20> <> ǥ</param>
2025-11-06 20:14:27 +09:00
public void DrawPath ( List < RobotData > poses , int modifiedIndex , RobotData tempPose )
{
2025-12-03 21:19:07 +09:00
// <20> <> ȿ<EFBFBD> <C8BF> <20> ˻<EFBFBD> : <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEB3AA> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> δ<EFBFBD> <CEB4> <EFBFBD> <20> <EFBFBD> <D7B8> <EFBFBD>
2025-11-06 20:14:27 +09:00
if ( poses = = null | | poses . Count < 2 | |
modifiedIndex < 0 | | modifiedIndex > = poses . Count )
2025-10-30 09:31:05 +09:00
{
2025-11-06 20:14:27 +09:00
DrawPath ( poses ) ;
return ;
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
2025-12-03 21:19:07 +09:00
// 1. <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Vector3 <20> 迭<EFBFBD> <E8BFAD> <20> <> ȯ
2025-11-06 20:14:27 +09:00
Vector3 [ ] positions = poses . Select ( ConvertRobotDataToVector3 ) . ToArray ( ) ;
2025-12-03 21:19:07 +09:00
// 2. <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ǥ<EFBFBD> <C7A5> <20> 巡<EFBFBD> <E5B7A1> <20> <> <EFBFBD> <EFBFBD> <20> ӽ<EFBFBD> <20> <> ǥ(tempPose)<29> <> <20> <> <EFBFBD> <EFBFBD> <EEBEB2>
// -> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (List)<29> <> <20> ǵ帮<C7B5> <E5B8AE> <20> ʰ<EFBFBD> <CAB0> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> θ<EFBFBD> <20> <> <EFBFBD> ΰ<EFBFBD> <20> ٲ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
2025-11-06 20:14:27 +09:00
positions [ modifiedIndex ] = ConvertRobotDataToVector3 ( tempPose ) ;
2025-12-03 21:19:07 +09:00
// 3. <20> <> <EFBFBD> ŵ<EFBFBD> <20> <> ǥ <20> 迭<EFBFBD> <E8BFAD> <20> <> <20> <EFBFBD> <D7B8> <EFBFBD>
2025-11-06 20:14:27 +09:00
lineRenderer . positionCount = positions . Length ;
lineRenderer . SetPositions ( positions ) ;
2025-10-30 09:31:05 +09:00
}
}