Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 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)
 
Ответить с цитированием
Старый 04.08.2015, 17:11   #2
Andvrok
Бывалый
 
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений
(для 995 пользователей)
Ответ: Самонаводящийся патрон

thisTransform.LookAt(target);
(Offline)
 
Ответить с цитированием
Старый 04.08.2015, 17:32   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Самонаводящийся патрон

Была вот такая тема: http://forum.boolean.name/showthread.php?t=13339 может пригодится
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 04.08.2015, 18:21   #4
Ivan2009
AnyKey`щик
 
Регистрация: 04.08.2015
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Самонаводящийся патрон

Сообщение от pax Посмотреть сообщение
Была вот такая тема: http://forum.boolean.name/showthread.php?t=13339 может пригодится
я от туда и черпал про самонаведение
Сообщение от Andvrok Посмотреть сообщение
thisTransform.LookAt(target);
у меня расчет направления уже есть direction
(Offline)
 
Ответить с цитированием
Старый 04.08.2015, 18:25   #5
Ivan2009
AnyKey`щик
 
Регистрация: 04.08.2015
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Самонаводящийся патрон

Разобрался в чем проблема.
Не срабатывало условие
void Update () { 
   if (
target = null) { 
    
currentTarget = findTargets(); 
    
target = currentTarget.transform; 
   } 
всему виной моя не внимательность...
(Offline)
 
Ответить с цитированием
Старый 14.09.2015, 20:26   #6
Tormaz
Нуждающийся
 
Регистрация: 23.10.2009
Сообщений: 74
Написано 9 полезных сообщений
(для 22 пользователей)
Ответ: Самонаводящийся патрон

Твоя ошибка в том , что патрон состоит из пули и гильзы ! А у тебя летит весь патрон!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 07:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com