Reputation: 154
I posted this to Unity Answers as well but haven't gotten any hits, so I thought I'd try here too.
So I'm doing some refactoring on my Unity game that uses a ScriptableObject to contain a weapon definition. I'm wanting to remove one of the public properties in the weapon definition as it is no longer needed. Here's my class in full, I'm wanting to get rid of shotParticlesPrefab:
public class WeaponDefinition : ScriptableObject
{
public const int DefaultWeaponDamage = 50;
public const float DefaultWeaponFireRate = 0.25f;
public const float DefaultWeaponShotSpeed = 600;
public ActorWeaponShot shotPrefab;
public ParticleSystem shotParticlesPrefab;
public AudioClip shotAudio;
public int damage = DefaultWeaponDamage;
public float fireRate = DefaultWeaponFireRate;
public float shotSpeed = DefaultWeaponShotSpeed;
}
However, when I try to remove the property from the ScriptableObject, Unity gives me the following error:
Assets/Scripts/Actors/ActorWeapon.cs(64,53): error CS1061: Type 'WeaponDefinition' does not contain a definition for 'shotParticlesPrefab' and no extension method 'shotParticlesPrefab' of type `WeaponDefinition' could be found. Are you missing an assembly reference?
I tried restarting Unity and Visual Studio, but after the restart none of my scripts on any of my prefabs would load because of the error. I also tried cleaning up references in the existing weapon definitions (basically setting shotParticlesPrefab to None) but had no joy there either. After restoring the property, all returned to normal without issues but leaves me with a property I don't need anymore.
What's the proper way to go about this? Is it possible to remove a property on a ScriptableObject after instances of it have been created in a project? Do I have to delete all existing instances of the ScriptableObject before changes are possible? That would be a rather ugly solution, so I haven't tried that yet. :|
My best Google-Fu attempts didn't yield any results on something like this issue, so here I am. :) Any thoughts would be greatly appreciated. Thanks.
Upvotes: 0
Views: 345
Reputation: 1323
ActorWeapon is trying to use the property which now doesn't exist, open up ActorWeapon and remove the reference.
Upvotes: 1