Показать сообщение отдельно
Старый 04.08.2015, 17:03   #1
Ivan2009
AnyKey`щик
 
Регистрация: 04.08.2015
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Самонаводящийся патрон

Здавствуйте.такая вот проблемка делал самонаводящий патрон, в идеале должен патрон спавнится и лететь к цели, но патрон летит куда то в сторону.Подскажите где моя ошибка?

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 

public class 
NewShootPlayer : MonoBehaviour { 
  private 
GameObject currentTarget; 
  private 
Transform target;//цель для патрона 
  
public float speed = 10;// скорость патрона 
  
public float turnSpeed = 100; //скорость поворота патрона 
  
public float timeLive = 5;//время жизни патрона 
  
private Transform thisTransform;// трансформ персонажа 

  
public void Awake(){ 
   
thisTransform = transform; 
  } 
   
  
// Update is called once per frame 
  
void Update () { 
   if (
target = null) { 
    
currentTarget = findTargets(); 
    
target = currentTarget.transform; 
   } 
   
//timeLive -= Time.deltaTime; 
   
Vector3 movement = thisTransform.forward * speed * Time.deltaTime;//величина движения вперед 
   
if (target != null) { 
    
Vector3 direction = target.position - thisTransform.position;//направление на цель 
    
float maxAngle = turnSpeed*Time.deltaTime;//максимальный угол поворота  в текущий кадр 
    
float angle = Vector3.Angle(thisTransform.forward,direction);// 
    
if(angle<=maxAngle){ 
     
thisTransform.forward = direction.normalized;// если угол меньше максимального, поворачиваем на цель 
    
}else{ 
     
thisTransform.forward = Vector3.Slerp(thisTransform.forward, direction.normalized,maxAngle/angle); 
    } 
    
//float distanceToTarget = direction.magnitude; 
   
} 
   
thisTransform.position += movement;//двигаем ракету вперед 
  
} 
  public 
GameObject findTargets(){ 
   
float closestMobDistance = 0;//переменная для проверки дистанции до моба 
   
GameObject nearestMob = null;//переменная для ближайшего моба 
   
List<GameObject> allMobs = GameObject.FindGameObjectsWithTag ("Mob").ToList ();//ищу мобов по тагу и добавляю в список 
   
foreach (GameObject mob in allMobs) {//перебираю мобов 
    
if((Vector3.Distance(mob.transform.position, transform.position)< 
        
closestMobDistance) || closestMobDistance == 0){ 
     
closestMobDistance = Vector3.Distance(mob.transform.position, thisTransform.position);//меряю дистанцию и записую в переменную 
     
nearestMob = mob;//устанавливаю как ближайшую 
    
} 
   } 
   
//Debug.Log(" Ближайший моб----> " + nearestMob); 
   
return nearestMob;//возвращаю ближайшего моба 
    
  
} 
  
void OnCollisionEnter(Collision myCollision){ 
   
MyBehavior collisionBehavior = myCollision.gameObject.GetComponent<MyBehavior> (); 
   if (
collisionBehavior) { 
    
collisionBehavior.SetDamage(30); 
    
Debug.Log("Нанес 30 урона"); 
    
Destroy(gameObject); 
   } 
  } 
} 
(Offline)
 
Ответить с цитированием