My enemy is destroyed instantly! unity 5.2 C# 2d
Hi,
I have a player who has a gun and shoots. i also have and enemy. the problem is is that when my enemy spawns he instantly is destroyed. I only want him to be destroyed on collision with player/bullet.
Here are my codes for:
Player:
using UnityEngine;
using System.Collections;
[System.Serializable]
public class mover : MonoBehaviour
// Use this for initialization
{
public float moveSpeed;
public float noSpeed;
public float jumpHeight;
public float jumpSpeed;
bool grounded;
public float health;
private Rigidbody rigid;
public Transform player;
void Start()
{
rigid = GetComponent<Rigidbody>();
}
// Update is called once per frame
void FixedUpdate()
{
if (Input.GetKey(KeyCode.RightArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(+moveSpeed, GetComponent<Rigidbody>().velocity.y);
var direction = 1;
transform.localScale = new Vector3(direction, 1, 1);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(-moveSpeed, GetComponent<Rigidbody>().velocity.y);
var direction = -1;
transform.localScale = new Vector3(direction, 1, 1);
}
if (Input.GetKeyUp(KeyCode.LeftArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(noSpeed, GetComponent<Rigidbody>().velocity.y);
}
if (Input.GetKeyUp(KeyCode.RightArrow))
{
GetComponent<Rigidbody>().velocity = new Vector2(+noSpeed, GetComponent<Rigidbody>().velocity.y);
}
if (Input.GetKey(KeyCode.UpArrow) && grounded == true)
{
GetComponent<Rigidbody>().velocity = new Vector2(jumpSpeed, jumpHeight);
grounded = false;
}
if (rigid.velocity.y == 0)
{
grounded = true;
}
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Enemy")
{
Destroy(collision.gameObject);
health -= 1;
}
if(health == 0)
{
Destroy(gameObject);
}
}
}
enemy:
using UnityEngine;
using System.Collections;
public class groundEnemyBehavior : MonoBehaviour {
public float moveSpeed;
private float move = 1;
public float nextFire;
public float fireSpeed;
public Transform BulletSpawn;
public float fireRate;
public GameObject shot;
private GameObject cloneShot;
void Start ()
{
}
void FixedUpdate ()
{
if (move == 1)
{
GetComponent<Rigidbody>().velocity = new Vector2(-moveSpeed, GetComponent<Rigidbody>().velocity.y);
}
if (Time.time > nextFire)
{
nextFire = Time.time + fireRate;
cloneShot = (GameObject)Instantiate(shot, BulletSpawn.position, BulletSpawn.rotation);
cloneShot.GetComponent<Rigidbody>().velocity = new Vector3(-fireSpeed, 0);
}
}
}
and Shot Destroy:
using UnityEngine;
using System.Collections;
public class DestroyShot : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Enemy")
{
Destroy(collision.gameObject);
Destroy(gameObject);
}
if (collision.gameObject.tag == "Boundary")
{
Destroy(gameObject);
}
}
}
i am not sure what i have done wrong? I believe it to be a coding error though. My only other problem is to get my shot to destroy when it hits the taged objects marked "boundary".
Thank you to all who help!
Answer by meat5000 · May 11, 2016 at 05:11 PM
Enemy has no Destroyer so, where is DestroyShot placed? Mover script has the capability to Insta-destroy an Enemy on collision.
Use Debug.Log("SOME INFO");
to find out whats going on.
More importantly, you say you are using 2D but you are actually using 3D everything.
http://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html
http://docs.unity3d.com/ScriptReference/Rigidbody2D.html
etc etc
Your answer
Follow this Question
Related Questions
UNITY shooting script does nothing 1 Answer
make something move when not looking at it 0 Answers
Desroy clone 1 Answer
AI Enemy Goomba Style (Super Mario 1 Answer