概要
using Slicer2D; using UnityEngine; using Utilities2D; internal sealed class SliceTest : MonoBehaviour { [SerializeField] private Vector2 m_start; [SerializeField] private Vector2 m_end; private void Start() { var slice = new Pair2D( m_start, m_end ); var results = Slicing.LinearSliceAll( slice ); } }
Smart Slicer 2D Pro を使用して上記のようなコードを実行したら
NullReferenceException: Object reference not set to an instance of an object Utilities2D.Polygon2D.SpriteToMesh (UnityEngine.GameObject gameObject, Utilities2D.VirtualSpriteRenderer spriteRenderer, Utilities2D.PolygonTriangulator2D+Triangulation triangulation, Utilities2D.Vector2D customUVOffset) (at Assets/FunkyCode/SmartUtilities2D/Scripts/Utilities/Geometry/Polygon2D.cs:580) Slicer2D.Sliceable2D.PerformResult (System.Collections.Generic.List`1[T] result, Slicer2D.Slice2D slice) (at Assets/FunkyCode/SmartSlicer2D/Components/Sliceable2D.cs:445) Slicer2D.Sliceable2D.LinearSlice (Utilities2D.Pair2D slice, System.Boolean perform) (at Assets/FunkyCode/SmartSlicer2D/Components/Sliceable2D.cs:572) Slicer2D.Slicing.LinearSliceAll (Utilities2D.Pair2D slice, Slicer2D.Layer layer, System.Boolean perform) (at Assets/FunkyCode/SmartSlicer2D/Scripts/Slicing.cs:18)
MissingComponentException: There is no 'SpriteRenderer' attached to the "Sliceable2D (1)" game object, but a script is trying to access it. You probably need to add a SpriteRenderer to the game object "Sliceable2D (1)". Or your script needs to check if the component is attached before using it. Utilities2D.VirtualSpriteRenderer..ctor (UnityEngine.SpriteRenderer spriteRenderer) (at Assets/FunkyCode/SmartUtilities2D/Scripts/Utilities/VirtualSpriteRenderer.cs:24) Slicer2D.Sliceable2D.Initialize () (at Assets/FunkyCode/SmartSlicer2D/Components/Sliceable2D.cs:260) Slicer2D.Sliceable2D.Start () (at Assets/FunkyCode/SmartSlicer2D/Components/Sliceable2D.cs:182)
上記の例外が発生した。
using Slicer2D; using UnityEngine; using Utilities2D; using Input = UnityEngine.Input; public sealed class SliceTest : MonoBehaviour { [SerializeField] private Vector2 m_start; [SerializeField] private Vector2 m_end; private void Update() { if ( !Input.GetKeyDown( KeyCode.Space ) ) return; var slice = new Pair2D( m_start, m_end ); var results = Slicing.LinearSliceAll( slice ); } }
Start ではなく Update で実行するようにしたら例外が発生しなくなった。