Помогите с элементарным скриптом

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Помогите с элементарным скриптом

Сообщение revolteck 02 мар 2013, 03:07

Ребят, покажите пример скрипта для плавного перемещения объекта с пункта А в пункт Б ^:)^
В шутерах всё просто: bullet.position = vector3.forward * time.Deltatime * speed;
но вот мне нужно реализовать что-то типа:
spell.transform.position = spellSpawnPoint.transform.Position...код...target.transform.position;

в общем, что бы заклинание летело к цели с равной скоростью и 100% достигало цели.
пробовал с помощью этих функций:
transform.Translate \\Rigidbody.AddForce\\Vector3.MoveTowards\ \
но как-то никак не получается из-за того что мало опыта в скриптовании (js) ~x(
мой пример кода:
Скрытый текст:
Синтаксис:
Используется javascript
var start : Transform;
var end : Transform;
var spell : Transform;


function Update ()
{
    if(Input.GetButtonDown("Fire2"))
    {
                CastSpell ();
    }
   
}


function CastSpell ()
{
  while(Vector3.Distance(start.transform.position,end.transform.position)>2)
        {
        transform.position = Vector3.Lerp(start.position, end.position, Time.deltaTime );
        }
}


 

но при этом объект перемещается к цели мгновенно

З.Ы. Может кто знает где хорошие НЕвидео уроки по созданию RPG ?(гугля не нашёл) \\можно даже на английском
а то всё ФёстПерсонШутеры.
Из-за малой скорости интернет соединения не могу позволить себе просмотр видео уроков.

Рассчитываю на Вашу помощь :ympeace: мир вам
Последний раз редактировалось revolteck 02 мар 2013, 04:36, всего редактировалось 3 раз(а).
Аватара пользователя
revolteck
UNец
 
Сообщения: 19
Зарегистрирован: 18 апр 2012, 03:47

Re: Помогите с MoveTowards

Сообщение Левш@ 02 мар 2013, 03:35

но вот мне нужно реализовать что-то типа:
spell.transform.position = spellSpawnPoint.transform.Position...код...target.transform.position;

Vector3.Lerp
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Помогите с MoveTowards

Сообщение revolteck 02 мар 2013, 03:43

Левш@ писал(а):Vector3.Lerp


Синтаксис:
Используется javascript
var start : Transform;
var end : Transform;
var spell : Transform;
var speed :float = 2;

function Update ()
{
    if(Input.GetButton("Fire2"))
    {
                CastSpell ();
    }
   
}
function CastSpell ()
{
        spell.transform.Translate = Vector3.Lerp(start.position, end.position * speed);

}

 

:( :
Assets/SpellTest/SpellTwo.js(19,49): BCE0017: The best overload for the method 'UnityEngine.Vector3.Lerp(UnityEngine.Vector3, UnityEngine.Vector3, float)' is not compatible with the argument list '(UnityEngine.Vector3, UnityEngine.Vector3)'.

Аватара пользователя
revolteck
UNец
 
Сообщения: 19
Зарегистрирован: 18 апр 2012, 03:47

Re: Помогите с MoveTowards

Сообщение revolteck 02 мар 2013, 03:57

Умный американец написал

Синтаксис:
Используется javascript
            while(Vector3.Distance(sendingParticle.transform.position,target.transform.position)>2)


            {


                sendingParticle.transform.rotation=Quaternion.Lerp(sendingParticle.transform.rotation,


                                                  Quaternion.LookRotation(target.transform.position-sendingParticle.transform.position,Vector3.up),1f);


                    sendingParticle.transform.Translate(Vector3.forward*Time.deltaTime);


                yield return null;


            }


            Destroy(sendingParticle);


            curSkill=null;

 


но у него non-target система :(
Аватара пользователя
revolteck
UNец
 
Сообщения: 19
Зарегистрирован: 18 апр 2012, 03:47

Re: Помогите с элементарным скриптом

Сообщение Левш@ 02 мар 2013, 08:36

spell.transform.Translate = Vector3.Lerp(start.position, end.position * speed);

Ты бы хоть немного почитал бы в справке что есть что... а то лепишь что попало и куда попало... :-?

Надо типа так:
Синтаксис:
Используется javascript
spell.transform.position = Vector3.Lerp(start.position, end.position * Time.deltaTime * speed);


или так тоже можно:
Синтаксис:
Используется javascript
spell.transform.Translate ((end.position - start.position) * Time.deltaTime * speed);


:)
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Помогите с элементарным скриптом

Сообщение Syberex 02 мар 2013, 10:51

Можно записать полет заклинания в анимацию ;) , запустить анимацию и пусть летит - так будет проще скриптовать, стоит попробовать...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Помогите с элементарным скриптом

Сообщение revolteck 02 мар 2013, 11:44

Левш@ писал(а):или так тоже можно:
Синтаксис:
Используется javascript
spell.transform.Translate ((end.position - start.position) * Time.deltaTime * speed);


:)

По Вашему совету запускаю это с таким кодом
но функция перемещает заклинание 1 раз при её вызове и при том, на расстояние которое равно speed*time.Deltatime
(вроде)
когда запускаю этот кода вооот таким циклом:
Синтаксис:
Используется javascript
 while(Vector3.Distance(start.transform.position,end.transform.position)>=1)

то опять-же, заклинание достигает цель мгновенно, а не с равномерной скоростью :(
з.ы. когда расстояние очень большое(~200юнитов), юнити зависает
з.ы.ы. справку перечитал вдоль и поперёк перед тем как постить на форуме и там написано:
Скрытый текст:
Description

Linearly interpolates between two vectors.

Interpolates between from and to by amount t.

t is clamped between [0...1]. When t = 0 returns from. When t = 1 returns to. When t = 0.5 returns the average of from and to.


а в примере кода вот такой комментарий:
// Animates the position to move from start to end within one second
з.ы.ы.ы. Another Example:
// Follows the target position like with a spring (как пружина)
Аватара пользователя
revolteck
UNец
 
Сообщения: 19
Зарегистрирован: 18 апр 2012, 03:47

Re: Помогите с элементарным скриптом

Сообщение revolteck 02 мар 2013, 11:49

Syberex писал(а):Можно записать полет заклинания в анимацию ;) , запустить анимацию и пусть летит - так будет проще скриптовать, стоит попробовать...

Поскольку я ооочень далёк от 3D моделирования, ограничиваюсь визуализацией заклинаний в форме системы частиц по этому мне нужно двигать объект а не проигрывать анимацию. :(

такая беда. вроде элементарный скрипт, а справится не могу при том что более сложные скрипты, написанные моими руками работают на ура :(
Аватара пользователя
revolteck
UNец
 
Сообщения: 19
Зарегистрирован: 18 апр 2012, 03:47

Re: Помогите с элементарным скриптом

Сообщение revolteck 02 мар 2013, 13:31

Скопипластил более-мение подходящий способ:

Синтаксис:
Используется javascript
var pointB : Vector3;


function Start () {
}

function Update ()
{
        if(Input.GetKeyDown(KeyCode.R))
        {
                tele();
        }
}
function tele () {
   var pointA = transform.position;
    while (true) {
        yield MoveObject(transform, pointA, pointB, 3.0);
            yield MoveObject(transform, pointB, pointA, 3.0);
            }
    }
     
function MoveObject (thisTransform : Transform, startPos : Vector3, endPos : Vector3, time : float) {
    var i = 0.0;
    var rate = 0.5/time;
    while (i < 1.0) {
        i += Time.deltaTime * rate;
        thisTransform.position = Vector3.Lerp(startPos, endPos, i);
        yield;
    }
}

Но в нём координаты задаются по Vector3 и никак не получается заменить их на transform.position врага. хоть в этом помогите :((
Аватара пользователя
revolteck
UNец
 
Сообщения: 19
Зарегистрирован: 18 апр 2012, 03:47

Re: Помогите с элементарным скриптом

Сообщение KBEP 02 мар 2013, 14:19

Синтаксис:
Используется javascript
var speed : float = 1.0f;
var target : GameObject;//цель, куда файрболл летит, повесь в едиторе или определяй в коде

function Update ()
{
    transform.position = Vector3.MoveTowards(transform.position, target.transform.position, speed * Time.deltaTime);
    if (transform.position == target.transform.position)
    {
        //здесь код, что делать когда файрболл достиг цели, у меня просто уничтожается файрболл
        Destroy(gameObject);
    };
};
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: Помогите с элементарным скриптом

Сообщение Левш@ 02 мар 2013, 16:08

По Вашему совету запускаю это с таким кодом
но функция перемещает заклинание 1 раз при её вызове и при том, на расстояние которое равно speed*time.Deltatime

Это в Update надо.... и условие: *пока не долетит*.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18