forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Очень нужна помощь.. (http://forum.boolean.name/showthread.php?t=15167)

PasPar2 23.07.2011 15:38

Очень нужна помощь..
 
:SOS: Собственно недавно начал юнити изучать, не все скрипты еще знаю, но так как справка на оф сайте на англ, не особо все понятно.. Теперь есть проблема.

Начал делать проектик, увидел пример "Tower defense" и загорелся тож его повторить. Сделал модельки, терейн, и встал в ступор как дальше..

Вопрос в том -как реализовать генерацию врагов?..
- как сделать траекторию движения ботов? (хотя пока читал форум в общих чертах понял.. но лучше если объясните.. )
- как выглядит скрипт для расположения башенок на карте по нажатию иконки?
-и последний вопрос, как сделать сетку для расположения башенок? Нарисовать в "Сторонней графической программе" и кинуть на неё определённый скрипт, или есть что то внутри юнитовское...?

Заранее спасибо за ответы.. Знаю что много.. поэтому если не сложно ответте хоть на что то или киньте линк урока.. тоже будет здорово.
:user: :SOS:

Lestar 23.07.2011 16:47

Ответ: Очень нужна помощь..
 
1.Для генерации врагов подготавливаем префаб-модель+скрипты и через Instantiate инстансим префаб там где нам нужно.
2.По террайну расставляете вейпойнты согласно траектории.Скрипт,который нужно вешать на бота здесь на форуме выкладывали.
3.
PHP код:

public Transfotm _tower_Prefab;

void OnGUI()
{
  if(
GUI.Button(new Rect(10705030), "Click me"))
        {
        
Instantiate(_tower_Prefab,Vector3.zeroQuaternion.identity);
         }


По клику инстансим префаб в точке с координатами (0,0,0)
4.За сетку не совсем понял.Как вариант просто создаете массив с узловыми координатами сетки,от них уже можно и плясать.
PHP код:

Vector3 [] _point_List=new Vector3[30]
float _x=0;
float _z=0;
float _j=0;

void Start()
{
 for(
int i=0;i<30;i++)
 {
   
_point_List[i]=new Vector 3(_x,0,_z)
   
_x=i+100f;
   
_j++;
  if(
_j%5==0f)
     {
       
_z=i+50f;
       
_x=0;
       
_j=0;
     }
 }


Таким образом создаем и инициализируем массив для сетки 6х5 с ячейкой 100х50.

PasPar2 26.07.2011 21:44

Ответ: Очень нужна помощь..
 
:super: Спасибо вам огромное! оч благодарен. Если еще возникнут вопросы спрошу, но пока все понятно )

И даже получается))

а про сетку я имел ввиду следующее, что бы префаб башенки ставился не в одной координате, ну например 0;0;0; а имеено по сетке в определённом месте поставить. во как :)
По Вашему скрипту посмотрю, будем надеяться додумаюсь как это реализовать)

PasPar2 27.07.2011 19:45

Ответ: Очень нужна помощь..
 
А мою сетку можно реализовать так? (Только это будет немного крапотливо, если так можно)

Как Вы сказали рисуем сетку на всё поле, далее создаём empty объекты, и по нужности присваеваем им один из тегов, либо empty Либо Noempty ))
Получаем поле из пустых обеъектов совподающих с сеткой, с тегами. Далее по нажатию кнопки, префаб появляется в координатах курсора, и следует за ним.. И по наведению на пустой объект, сравниваем тэг, если Empty - то префаб окрашивается в зелёный цвет и по нажатию перестаёт следовать за курсором а ставится в координатах этого тела. А его тэг меняется на NoEmpty. Если же тэк уже ноэмпти, то префаб красный и по нажатию ничего не происходит, ну или появляется текстовое сообщения типа "вы тыкаете не туда" :4to: во как.. Это реализуемо?
Только откровенно, я только знаю как скрипт сделать на появление префаба, проверку тэга, а вот установку и следование за курсором не знаю.. Может кто то хоть частично написать? (Я представляю какой это будет громадный скрипт... )

Lestar 28.07.2011 00:49

Ответ: Очень нужна помощь..
 
Так можем таскать превив модельки за мышкой.
PHP код:

Ray _ray;
RaycastHit _hit;
bool _previw=false;
bool _instans=false;

void Update()
{
  if(
GUI.Button(new Rect(10705030), "Click me"))
  {
   
_previw=!_previw;
  }  
  if(
_previw)
  {
  
ray=Camera.main.ScreenPointToRay(Input.mousePosition);
     if (
Physics.Raycast(_rayout _hitMathf.Infinity100))
        { 
          if(!
_instans)
          {
           if (
_hit.collider.tag == "Floor")
             {                
              
Instantiate(_tower_Prefab,_hit.point,Quaternion.identity); 
              
_instans=true;                  
             } 
           }
        }
    
transform.position=_hit.point;
  }


Так расставить кубики по узлам сетки
PHP код:

Vector3 [] _point_List=new Vector3[30]
float _x=0;
float _z=0;
float _j=0;


void Start()
{
 for(
int i=0;i<30;i++)
 {
  
_point_List[i]=new Vector 3(_x,0,_z)
  
GameObject _waypoint GameObject.CreatePrimitive(PrimitiveType.Cube);
  
_waypoint.transform.position=_point_List[i];
  
_waypoint.tag="Empty";
   
_x=i+100f;
   
_j++;
  if(
_j%5==0f)
     {
       
_z=i+50f;
       
_x=0;
       
_j=0;
     }
 }


Так реагируем на приближение к обьекту
PHP код:

void OnCollisionEnter(Collision collision)
{
public 
Transfotm _tower_Prefab;
 if(
collision.gameObject.tag=="Empty")
  {
  
renderer.material.color=Color.green;
  if (
Input.GetButtonDown("Fire1"))
   {
    
Gameobject _waypointOn=collision.gameObject;
    
Instantiate(_tower_Prefab,_waypointOn.transform.position,Quaternion.identity);
    
Destroy(_waypointOn);
   }
  } 


В общих чертах логика такая.

PasPar2 28.07.2011 15:11

Ответ: Очень нужна помощь..
 
:4to: :super: это 5 +..
Спасибо огромное за помощь!. Ща буду что то творить =))

PasPar2 28.07.2011 22:12

Ответ: Очень нужна помощь..
 
и еще маленький вопросик, как инициировать таймер?

Ну вот примерно
Код:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
        public GameObject _enemy;

       
        public void Start(){
        GUI.Button(new Rect(10, 70, 50, 30), "Click me");
        if (Input.GetButtonDown("Click me"))
  {
                Instantiate(_enemy,transform.position,transform.rotation);
               
        }
// а теперь вот сдесь нужно воткнуть таймер ну например на 3 секунды..
и зациклить появление 10 врагов, ну уже без нажатия кнопочки..
}

Если не сложно добавьте строчечку.. )
И еще.. почему то кнопки нету ( Скрипт юзаю на мейн камеру, т. к других не предвещается.. Но кнопочки на экране нет :''(( Смысл кнопочки запустить уровень, то бишь что бы не сразу при появлении топали толпы а после нажатия.

Lestar 29.07.2011 00:20

Ответ: Очень нужна помощь..
 
Кнопки и не будет. GUI класс нужно вызывать только в OnGUI(),а никак не в Start().
Так будет инстансить каждые 3 секунды и по клику,но по клику в общую кассу считаться не будет.
PHP код:

using UnityEngine;
using System.Collections;

public class 
NewBehaviourScript MonoBehaviour
{
    public 
GameObject _enemy;
    
int _enemyCalc 0;
    
float _time 0;
    
int _timeCalc 0;
    
    
void OnGUI()
    {
      
        if (
GUI.Button(new Rect(10705030), "Click me"))
        {
            
Instantiate(_enemytransform.positiontransform.rotation);
        }
    }

    
void Update()
    {
        if (
_enemyCalc<=10)
        {
           
float _delta_Time Time.time _time;
           if (
_delta_Time >= 1)
           {
               
_time Time.time;
               
_timeCalc++;
               if (
_timeCalc%3==0)
               {
                   
Instantiate(_enemytransform.positiontransform.rotation);
                   
_enemyCalc++;
               }
           }
        }
    }



PasPar2 29.07.2011 23:50

Ответ: Очень нужна помощь..
 
Хм.. А кноку можно скрыть? Или например через Destroy взять её и разрушить, что бы было не повадно на неё больше тыкать?

И еще, как заменить префаб? ну то есть есть кнопочка усовершенствования, при выделении башни, и при нажатти один префаб разрушается, второй на его место ставится? через Instantiate? просто convert я видел только заменяют типы им.. Хотя мой опыт это неделя интенсивного изучения :-D

И начну уже собирать игрульку потом сюда выкину поглядим что получится..

ТОлько потом еще спрошу как выкладывать.. :-D *жутко покраснел*

Lestar 30.07.2011 00:41

Ответ: Очень нужна помощь..
 
PHP код:

(GUI.Button(new Rect(10705030), "Click me"

Код отвечает за кнопку.Корректно удалить,кнопки не будет.

Разрушаем старую,на ее место ставим новую башню.
PHP код:

if (GUI.Button(new Rect(10705030), "Tower Up"))
        {
             
Vector3 _enemy_Position=transform.position;
             
Quaternion _enemy_Rotation=transform.rotation;
             
Destroy(gameObject);
             
Instantiate(_tru_Enemy_enemy_Position_enemy_Rotation);
        } 


PasPar2 30.07.2011 23:26

Ответ: Очень нужна помощь..
 
А вы не могли бы подсказать какой нибудь рускоязычный сайт по юнити (именно теорию).. а то мне уже стыдно такие элементарные вещи спрашивать.. =)

Но я теперь не знаю как поставить точки движения.. Или это делается так же как и сетка? :dontknow: потому что я точных координат движения не знаю, а ставлю пустышки по траектории - они в роли точек не годятся (
я имею ввиду вейпойнты..

Lestar 31.07.2011 00:35

Ответ: Очень нужна помощь..
 
Unity3d.ru

По какой то причине не годятся вам пустышки,поставьте кубики и снимите галку с mesh renderer.

Вам кроме Unity программированию нужно обучаться.Почитайте Шилдта "C# полное руководство".У вас нет понимания того,что вы пишите.

PasPar2 31.07.2011 13:15

Ответ: Очень нужна помощь..
 
:mad: вот и я о том же.. Нет понимания потому что теории знаю, токлько как юнити запускать =)))))))) Спасибо почитаю. Думал с ходу пойму, а не тут то было :)) Лан спасиб :) :cool: вернусь буду ассом )

PasPar2 31.07.2011 14:25

Ответ: Очень нужна помощь..
 
Цитата:

Сообщение от PasPar2 (Сообщение 197260)
:mad: вот и я о том же.. Нет понимания потому что теории знаю, токлько как юнити запускать =)))))))) Спасибо почитаю. Думал с ходу пойму, а не тут то было :)) Лан спасиб :) :cool: вернусь буду ассом )

А про пустышки тут даже проблема не в том что они не подходят, при запуске скрипта он не движется к ним самостоятельно, и перед запуском поместить в скрипт, нельзя, но за то если префаб со скриптом поставить на карту, то пустышки спокойно ставятся в роли точек.. но тогда те что появляются все равно без точек.. а только те что я поставил в ручную.

PasPar2 31.07.2011 14:28

Ответ: Очень нужна помощь..
 
о все.. разобрался )) не от туда пихал просто %)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot