Объекты простые кубы, но с этим скриптом:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class cannon : MonoBehaviour {
Transform target; // цель
public Transform sp;//spawn point (спавн пулей)
public Transform bullet;//пуля
public float attackRange = 30.0f;
public float shootAngleDistance = 10.0f;
int i = 50;//колво пулей
float _time = 5.0f;
double t = 0.3f;//число для счетчика выстрелов
void Start(){
}
void FixedUpdate(){
target=FindClosestEnemy().transform;//Пушка ищет ближайшую цель
if (target == null) //если не нашла то ретурн
return;
//повороачиваем пушку к цели
var targetPoint = target.position;
var targetRotation = Quaternion.LookRotation (targetPoint - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 2.0f);
var forward = transform.TransformDirection(Vector3.forward);
var targetDir = target.position - transform.position;
////повороачиваем пушку к цели
RaycastHit hit;
if(Physics.Raycast(transform.position,transform.forward,out hit,500f)){//стрельба
Debug.DrawLine( transform.position, target.position, Color.red);
Pause ();//пауза
if(i>0&&t>=0.5){//ждем пока счетчик обнулится
Transform prefabinstance = (Transform)Instantiate(bullet, sp.transform.position,
Quaternion.identity);//создаем пулю в спавн поинт
prefabinstance.rigidbody.velocity=transform.forward*500;//добавляем скорость пули
--i;//отнимаем пули
t=0;//счетчик выстрела обнуляем
}
}
}
GameObject FindClosestEnemy(){//ищем ближайшую цель
GameObject[] gos;
gos = GameObject.FindGameObjectsWithTag("Player");
GameObject closest=null;
float distance = Mathf.Infinity;
Vector3 position = transform.position;
foreach(var go in gos){
var diff = (go.transform.position-position);
var curDistance=diff.sqrMagnitude;
if(curDistance<distance)
{
closest=go;
distance=curDistance;
}
}
if(closest==null)//если цели нет то возвращаем нулл
return null;
return closest;//возвращаем ближайшую цель
}
void Pause(){//пауза
if(t<0.5){
t+=Time.deltaTime*(1.0/_time);
}
}
}
using System.Collections;
public class cannon : MonoBehaviour {
Transform target; // цель
public Transform sp;//spawn point (спавн пулей)
public Transform bullet;//пуля
public float attackRange = 30.0f;
public float shootAngleDistance = 10.0f;
int i = 50;//колво пулей
float _time = 5.0f;
double t = 0.3f;//число для счетчика выстрелов
void Start(){
}
void FixedUpdate(){
target=FindClosestEnemy().transform;//Пушка ищет ближайшую цель
if (target == null) //если не нашла то ретурн
return;
//повороачиваем пушку к цели
var targetPoint = target.position;
var targetRotation = Quaternion.LookRotation (targetPoint - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 2.0f);
var forward = transform.TransformDirection(Vector3.forward);
var targetDir = target.position - transform.position;
////повороачиваем пушку к цели
RaycastHit hit;
if(Physics.Raycast(transform.position,transform.forward,out hit,500f)){//стрельба
Debug.DrawLine( transform.position, target.position, Color.red);
Pause ();//пауза
if(i>0&&t>=0.5){//ждем пока счетчик обнулится
Transform prefabinstance = (Transform)Instantiate(bullet, sp.transform.position,
Quaternion.identity);//создаем пулю в спавн поинт
prefabinstance.rigidbody.velocity=transform.forward*500;//добавляем скорость пули
--i;//отнимаем пули
t=0;//счетчик выстрела обнуляем
}
}
}
GameObject FindClosestEnemy(){//ищем ближайшую цель
GameObject[] gos;
gos = GameObject.FindGameObjectsWithTag("Player");
GameObject closest=null;
float distance = Mathf.Infinity;
Vector3 position = transform.position;
foreach(var go in gos){
var diff = (go.transform.position-position);
var curDistance=diff.sqrMagnitude;
if(curDistance<distance)
{
closest=go;
distance=curDistance;
}
}
if(closest==null)//если цели нет то возвращаем нулл
return null;
return closest;//возвращаем ближайшую цель
}
void Pause(){//пауза
if(t<0.5){
t+=Time.deltaTime*(1.0/_time);
}
}
}
Как я понял дело в скрипте, помогите его оптимизировать.