ArgumentNullException: Value cannot be null when slicing mesh
I'm using this open source mesh slicer and I started playing around with it a little but when instantiating some objects with this script i get the following error:
ArgumentNullException: Value cannot be null.
Parameter name: collection
System.ThrowHelper.ThrowArgumentNullException (System.ExceptionArgument argument) (at <567df3e0919241ba98db88bec4c6696f>:0)
System.Collections.Generic.List`1[T].InsertRange (System.Int32 index, System.Collections.Generic.IEnumerable`1[T] collection) (at <567df3e0919241ba98db88bec4c6696f>:0)
System.Collections.Generic.List`1[T].AddRange (System.Collections.Generic.IEnumerable`1[T] collection) (at <567df3e0919241ba98db88bec4c6696f>:0)
Shatter.ShatterObject (UnityEngine.GameObject obj, UnityEngine.Material crossSectionMaterial) (at Assets/Scripts/Shatter.cs:25)
Shatter.RandomShatter () (at Assets/Scripts/Shatter.cs:62)
Shatter.Start () (at Assets/Scripts/Shatter.cs:16)
If anybody has any advice on how to fix this my code is right here:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EzySlice;
public class Shatter : MonoBehaviour
{
public GameObject objectToShatter;
public Material crossSectionMaterial;
public int sliceAmount = 1;
public void Start()
{
objectToShatter = gameObject;
crossSectionMaterial = gameObject.GetComponent<Renderer>().material;
RandomShatter();
}
public List<GameObject> ShatterObject(GameObject obj, Material crossSectionMaterial = null)
{
List<GameObject> slices = new List<GameObject>();
for(int c = 0; c < sliceAmount; c++)
{
if(c == 0)
{
slices.AddRange(
obj.SliceInstantiate(GetRandomPlane(obj.transform.position, obj.transform.localScale),
new TextureRegion(0.0f, 0.0f, 1.0f, 1.0f),
crossSectionMaterial)
);
}
else
{
if(slices.Count > 0)
{
for (int b = 0; b < slices.Count; b++)
{
slices.AddRange(
slices[b].SliceInstantiate(GetRandomPlane(obj.transform.position, obj.transform.localScale),
new TextureRegion(0.1f, 0.1f, 1.0f, 1.0f),
crossSectionMaterial)
);
}
}
}
}
return slices;
}
public EzySlice.Plane GetRandomPlane(Vector3 positionOffset, Vector3 scaleOffset)
{
Vector3 randomPosition = Random.insideUnitSphere;
//randomPosition += positionOffset;
Vector3 randomDirection = Random.insideUnitSphere.normalized;
return new EzySlice.Plane(randomPosition, randomDirection);
}
public void RandomShatter()
{
GameObject[] shatters = ShatterObject(objectToShatter, crossSectionMaterial).ToArray();
if (shatters != null && shatters.Length > 0)
{
// add rigidbodies and colliders
foreach (GameObject shatteredObject in shatters)
{
shatteredObject.AddComponent<MeshCollider>().convex = true;
shatteredObject.AddComponent<Rigidbody>().useGravity = false;
shatteredObject.AddComponent<ShrinkGone>();
}
Destroy(gameObject);
}
return;
}
}
It looks like slice instantiate is a void method, please give a link to api reference /docs/source/wiki. If it does actually return a list then it has handled an error silently and returned null which is extremely bad practice and also extremely unlikely so the first point is more valid
Your answer
![](https://koobas.hobune.stream/wayback/20220612220249im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Error "ArgumentException: The Assembly System.Windows is referenced by GoogleAds" 0 Answers
Why am I getting a null reference error? 1 Answer
NullRefrenceException: Object refrence not set to an instance of an object. 0 Answers
error ArgumentException, game pauses after splash screens 0 Answers
Asset Null Exception - No assetGUID 0 Answers