我也把它发布到了Unity Answers,但没有得到任何点击,所以我想我也会在这里试试。
所以我在我的Unity游戏上做了一些重构,它使用ScriptableObject来包含武器定义。我想删除武器定义中的一个公共属性,因为它不再需要。这是我的全班,我想摆脱 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;
}
但是,当我尝试从ScriptableObject中删除该属性时,Unity会给我以下错误:
Assets / Scripts / Actors / ActorWeapon.cs(64,53):错误CS1061:类型'WeaponDefinition'不包含'shotParticlesPrefab'的定义,并且没有'WeaponDefinition'类型的扩展方法'shotParticlesPrefab'可以被发现。您是否缺少装配参考?
我尝试重新启动Unity和Visual Studio,但在重新启动后,我的任何预制件上的脚本都不会因为错误而加载。我也尝试清理现有武器定义中的参考文献(基本上将shotParticlesPrefab设置为None),但也没有任何喜悦。恢复属性后,所有恢复正常没有问题,但留给我一个我不再需要的属性。
正确的方法是什么?是否可以在项目中创建实例后删除ScriptableObject上的属性?在更改之前,是否必须删除ScriptableObject的所有现有实例?那将是一个相当丑陋的解决方案,所以我还没有尝试过。 :|
我最好的Google-Fu尝试没有在这个问题上产生任何结果,所以我在这里。 :)任何想法将不胜感激。感谢。
答案 0 :(得分:1)
ActorWeapon试图使用现在不存在的属性,打开ActorWeapon并删除引用。