- Home /
Instantiate breaking at certain positions?
So I am working on a tower defense type game where there are build pads that when clicked, will Instantiate a tower in a certain position that has a sphere collider. When a 'Monster' enters this collider a bullet will be Instantiated and the bullet will move to the monster and remove it's health. Now this all works fine and dandy at the lower half of my maze where the bullets just shoot once each time a monster enters but for some reason any towers Instantiated in the upper half just spawn bullets one after each other in quick secession. I find it weird how it works for one set of positions and not others. Here's some of my scripts:
Build Place Script using System.Collections; using System.Collections.Generic; using UnityEngine;
public class BuildPlace : MonoBehaviour {
public GameObject tower1;
void Start () {
}
void Update () {
}
private void OnMouseUpAsButton()
{
GameObject g = (GameObject)Instantiate(tower1);
g.transform.position = transform.position + Vector3.up;
}
}
Tower Script using UnityEngine; using System.Collections.Generic; using System.Collections;
public class Tower1 : MonoBehaviour
{
public GameObject bullet;
private float rotationSpeed = 35;
void Update()
{
transform.Rotate(Vector3.up * Time.deltaTime * rotationSpeed, Space.World);
}
void OnTriggerEnter(Collider target)
{
if (target.GetComponent<Monster>())
{
GameObject bulletObject = (GameObject)Instantiate(bullet, transform.position, Quaternion.identity);
bulletObject.GetComponent<Bullet>().targetMonster = target.transform;
}
}
}
Bullet Script using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Bullet : MonoBehaviour { private float speed = 10; public Transform targetMonster; void Start () {
}
void Update () {
}
void FixedUpdate()
{
if (targetMonster)
{
Vector3 dir = targetMonster.position - transform.position;
GetComponent<Rigidbody>().velocity = dir.normalized * speed;
}
else
{
Destroy(gameObject);
}
}
void OnTriggerEnter(Collider monster)
{
Health health = monster.GetComponentInChildren<Health>();
if (health)
{
health.decrease();
Destroy(gameObject);
}
}
}
and Monster script using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI;
public class Monster : MonoBehaviour {
void Start()
{
// Navigate to Castle
GameObject castle = GameObject.Find("Castle");
if (castle)
GetComponent<NavMeshAgent>().destination = castle.transform.position;
}
void Update () {
}
void OnTriggerEnter(Collider castle)
{
// If castle then deal Damage
if (castle.name == "Castle")
{
castle.GetComponentInChildren<Health>().decrease();
Destroy(gameObject);
}
}
}
Would appreciate the help!
Your answer
Follow this Question
Related Questions
What's the best way to check if an area is empty? 7 Answers
Instantiated (clone of) prefab, doesn't trigger another object's collider when inside it. 2 Answers
i need to copy a list from the collided to the newly instantiated one individually . 0 Answers