Не уверен, почему, я делал это много раз, но это вызывает у меня некоторые проблемы. Создавая проект для Game AI, я уже сделал целую кучу вещей, а теперь просто делаю несколько турелей, которые, если игрок находится в определенном диапазоне, будут стрелять, что у меня уже есть. Турель выпускает пулю, а потом по какой-то причине они просто начинают разрушаться и не идут на моего игрока. Хотите знать, может ли кто-нибудь здесь помочь, заранее спасибо!
Некоторые детали, которые вам могут понадобиться знать: у меня есть база, носовая часть и пушка для моей башни. У My Gun есть сценарий GunLook.cs, который заставляет его смотреть на игрока (поэтому, когда они стреляют, он должен идти в их сторону), я не уверен, имеет ли это какое-либо отношение к тому, почему у меня возникают эти проблемы, но я Я опубликую этот код на всякий случай
Как мой Hierchy для моей башни - Turret_AI (Base) Gun (child of Turret_AI) bulletSpawn (child of Gun) Gun_Nose (child of turret_AI)
bulletSpawn - это пустой GameObject, который я создал в надежде решить мою проблему. Я поставил его прямо из пистолета, чтобы он не столкнулся с пушкой и не уничтожил себя (что я думал, что он может делать, но не правильно).
Это должна быть вся необходимая информация, если кому-то понадобится больше, я буду проверять ее каждые 2 секунды, так что дайте мне знать, и я свяжусь с вами с быстрым ответом.
TurretScript.cs (я установил GameObject на Player в Unity, прежде чем кто-нибудь спросит)
using UnityEngine;
using System.Collections;
public class TurretScript : MonoBehaviour {
[SerializeField]
public GameObject Bullet;
public float distance = 3.0f;
public float secondsBetweenShots = 0.75f;
public GameObject followThis;
private Transform target;
private float timeStamp = 0.0f;
void Start () {
target = followThis.transform;
}
void Fire() {
Instantiate(Bullet, transform.position , transform.rotation);
Debug.Log ("FIRE");
}
void Update () {
if (Time.time >= timeStamp && (target.position - target.position).magnitude < distance) {
Fire();
timeStamp = Time.time + secondsBetweenShots;
}
}
}
GunLook.cs
// C#
using System;
using UnityEngine;
public class GunLook : MonoBehaviour
{
public Transform target;
void Update()
{
if(target != null)
{
transform.LookAt(target);
}
}
}
BulletBehavior.cs
using UnityEngine;
using System.Collections;
public class BulletBehavior : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (rigidbody.velocity.magnitude <= 0.5)
Destroy (gameObject);
}
void OnCollisionEnter(Collision collision)
{
if (collision.collider)
{
if(collision.gameObject.tag == "Enemy" || collision.gameObject.tag == "EnemyProjectile")
{
Physics.IgnoreCollision(rigidbody.collider,collision.collider);
//Debug.Log ("Enemy");
}
if(collision.gameObject.tag == "SolidObject")
{
Destroy(gameObject);
}
if(collision.gameObject.tag == "Player")
{
Destroy(gameObject);
}
}
}
}