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
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