- Home /
Destroying assets is not permitted to avoid data loss. If you really want to remove an asset use DestroyImmediate (theObject, true); UnityEngine.Object:Destroy(Object) Gun:Update() (at Assets/Scripts/Gun.cs:75)
I am trying to make a simple fps game, and whenever I hit an "Enemy" with a "Bullet" I always get this error message
Destroying assets is not permitted to avoid data loss.
If you really want to remove an asset use DestroyImmediate (theObject, true);
UnityEngine.Object:Destroy(Object)
Gun:Update() (at Assets/Scripts/Gun.cs:75)
The enemy is supposed to die after one hit however most of the time it takes 2 hits to kill an enemy and the enemy only dies after the error message is displayed in the console.
The question is: How can I fix this, I don't want the prefab to be destroyed instead I want the version of the prefab I have "copied" many times within the game.
Sorry if this is confusing.
using UnityEngine;
using System.Collections;
public class Gun : MonoBehaviour {
public Transform BulletPoint;
public GameObject Bullet;
public GameObject Head;
public GameObject Body;
public int TotalPistolAmmo;
public int MaxPistolClip;
public int CurrentPistolClip;
public int AmmoReloadPistol;
public int AbsoluteZeroPistolAmmo;
public bool CanShoot;
public bool CanReload;
void Start ()
{
Screen.lockCursor = true;
}
void Update ()
{
if(CurrentPistolClip <= 0)
{
CanShoot = false;
}
if(TotalPistolAmmo <= AbsoluteZeroPistolAmmo)
{
CanReload = false;
}
else
{
CanReload = true;
}
if(Input.GetKeyDown(KeyCode.R) && CanReload == true)
{
AmmoReloadPistol = MaxPistolClip - CurrentPistolClip;
if(TotalPistolAmmo - AmmoReloadPistol <= AbsoluteZeroPistolAmmo)
{
AmmoReloadPistol = TotalPistolAmmo;
TotalPistolAmmo -= TotalPistolAmmo;
}
else
{
TotalPistolAmmo -= AmmoReloadPistol;
}
CurrentPistolClip += AmmoReloadPistol;
CanShoot = true;
}
RaycastHit hit;
Ray mouseRay = new Ray(BulletPoint.position, BulletPoint.forward);
if(Input.GetMouseButtonDown(0) && CanShoot == true)
{
CurrentPistolClip -= 1;
Instantiate(Bullet, BulletPoint.position, BulletPoint.rotation);
if (Physics.Raycast (mouseRay, out hit))
{
if(hit.collider.tag == "Body")
{
Debug.Log("Body");
Destroy(Body);
}
if(hit.collider.tag == "Head")
{
Debug.Log("Head");
Destroy(Head);
}
}
}
}
void OnGUI()
{
GUI.Label (new Rect (10, 10, 100, 50), " " + CurrentPistolClip);
GUI.Label (new Rect (30, 10, 100, 50), " / ");
GUI.Label (new Rect (40, 10, 100, 50), " " + TotalPistolAmmo);
}
}
Why are you instantiating a bullet AND making a raycast? Those are two alternate ways of shooting.
What are Body and Head? The error message says they are linked to prefabs. Are they?
I think maybe the real problem is you could use more practice with basic Unity tricks, and might learn faster with smaller projects.
Your answer
![](https://koobas.hobune.stream/wayback/20220613193252im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
2D repeating obstacles with a random Y value 0 Answers
How can i create [n] prefabs taking Array data? 1 Answer
Need help moving player object towards an instantiated ball 1 Answer
How can I destroy an specific clone already instantiated, when there's more than one? 1 Answer
RPC function Unity 1 Answer