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