コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Smart Slicer 2D Pro で「NullReferenceException: Object reference not set to an instance of an object」

概要

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 で実行するようにしたら例外が発生しなくなった。