Пятница, 19 Апреля 2024, 15:35

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемы с триггерами и флешем
Проблемы с триггерами и флешем
musicfunsДата: Пятница, 31 Января 2014, 11:29 | Сообщение # 1
Gorilla Develop Studio
Сейчас нет на сайте
Суть такова. Сделал небольшой проект, думал выпустить как флеш игрулю и собрать 5$ на рекламе за следующие over 9000 лет, но вот проблема. Проект готов, а оказывается что триггеры во flash еще не работают, разработчики еще не сделали их поддержку. У меня вся игра на триггерах крутится, поэтому возникает вопрос. Как можно безболезненно заменить триггеры на что-либо другое, сильно не меняя проект?
P.S Я знал, что флеш из юнити многое не поддерживает, но единственное столкновения до этого было из-за "террэйна", но эту проблему я решил, а вот с остальными проблема.
P.S 2 Вот код который я использовал в триггере :
Код

var OnEvent : int;

function OnTriggerEnter(other : Collider)  
{
if (other.collider.tag == "Player")
{
OnEvent = 1;
Application.LoadLevel (6);

}

}

Переменная там просто так сделана, это просто для проверки было сделано.
Nasa13Дата: Пятница, 31 Января 2014, 11:52 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Насколько я понимаю, триггер, это специальная зона, в которую игрок попадает, и происходит определенное действие по условию! Теперь можно подумать, что такое зона?

Зона, это область ! Что происходит , если разглядеть конкретней? Т.е. проверяется наличие игрока в области...но! Ведь это в свою очередь и расстояние до этой области? Правильно? Вот к чему я клоню!=)(но в триггере расстояние не учитывается, там чисто попадание элементов одного в другое)

Я не юзаю JS , но попробую написать ...
Код


#pragma strict
public var obj1 : Transform;/// Наш игрок
public var obj2 : Transform;/// Наш триггер зона

     
function Update () {

var distance = Vector3.Distance(obj1.position, obj2.position);

//Расчитываем расстояние между триггером и нашим игроком, дальше пишем

if( distance <1)
{
/// Our condition
}

}


Стоит учитывать, что это расстояние ОТ ЦЕНТРА ФИГУРЫ, до ЦЕНТРА ФИГУРЫ


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1


Сообщение отредактировал Nasa13 - Пятница, 31 Января 2014, 11:53
musicfunsДата: Пятница, 31 Января 2014, 11:54 | Сообщение # 3
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, Спасибо за скорость) Сейчас попробую проверить, отпишусь как сделаю. Я бы и не юзал JS, но во флеше пока только он поддерживается, возможности заюзать C# нет.
Nasa13Дата: Пятница, 31 Января 2014, 11:59 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Да это Беда прям, половина примеров в интернете на JS ,половина на С, я потом уже путаться начинаю, и пишу в С

function Update () вместо void=))

Кстати, если используешь JS , не забывай еще писать private и public ,Просто если ты напишешь var - у тебя она в публичную пойдет, у меня так...


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
musicfunsДата: Пятница, 31 Января 2014, 12:56 | Сообщение # 5
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, Так спасибо! Работает, есть небольшие косяки с расстоянием, но поднастрою все и будет работать как надо.
Цитата Nasa13 ()
Да это Беда прям, половина примеров в интернете на JS ,половина на С, я потом уже путаться начинаю, и пишу в С

function Update () вместо void=))


Хаха, бывает. Но я постоянно путаю Java и C# ибо очень уж похожи, а я работаю и с тем и с другим)
Цитата Nasa13 ()
Кстати, если используешь JS , не забывай еще писать private и public ,Просто если ты напишешь var - у тебя она в публичную пойдет, у меня так...

Спасибо, учту, но в данном проекте у меня почти нет работы с переменными, за исключением переменных объектов.

Добавлено (31.01.2014, 12:39)
---------------------------------------------
Nasa13, Видно я рано обрадовался. Теперь не получается загрузить сам этот уровень. То есть если запустить только эту сцену то она работает, а если запуск из меню, то нет. Странно...

Добавлено (31.01.2014, 12:56)
---------------------------------------------
Вопрос с загрузкой уровня решил, но все равно скрипт во флеше не работает!!!

Nasa13Дата: Пятница, 31 Января 2014, 13:03 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Так...ну тогда можно сделать проверку по мировой локации игрока...т.е. указать координаты нахождения...

Задать квадрат по всем осям...

if(transform.position.y>3&& transform.position.y<5 && transform.position.x>32&& transform.position.x<33)

В таком духе, ясно? Я точно не скрипт не писал, я там не уверен...Как на JS пишется


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
musicfunsДата: Пятница, 31 Января 2014, 13:16 | Сообщение # 7
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, Написал вот такой скрипт, все настроил, но не работает даже просто в юньке, без флэша.
Код

#pragma strict  
public var obj1 : Transform;/// Наш игрок  
public var obj2 : Transform;/// Наш триггер зона  
var x1: int;
var x2: int;

       
function Update () {  
x1 = -4;
x2 = -22;
if(obj1.transform.position.y>7&& obj1.transform.position.y<14 && obj1.transform.position.x>x1 && obj1.transform.position.x<x2)  
{
Application.LoadLevel (4);

}

}

Координаты игрока подходят. Странно...
Nasa13Дата: Пятница, 31 Января 2014, 13:20 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
А по Z где переменные?

Добавлено (31.01.2014, 13:20)
---------------------------------------------
Кстати, еще момент, ты должен убрать цикл...Вот даже если у тебя все условия правильные ,у тебя бесконечно запускается Application.LoadLevel (4);

А тебе надо один раз, для этого лучше всего сделать переменную типа

var OnlyOnce...

if(obj1.transform.position.y>7&& obj1.transform.position.y<14 && obj1.transform.position.x>x1 && obj1.transform.position.x<x2&& OnlyOnce==0)
{
Application.LoadLevel (4);
OnlyOnce=3;

}


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
set16Дата: Пятница, 31 Января 2014, 13:21 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
У Flash ActionScript API есть же коллизия

=>The darkness of distant lands [3D]<=
musicfunsДата: Пятница, 31 Января 2014, 13:25 | Сообщение # 10
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, Дописал и для Z. Не работает...
Код

function Update () {  

if(obj1.transform.position.y>7&& obj1.transform.position.y<14 && obj1.transform.position.x>x1 && obj1.transform.position.x<x2 && obj1.transform.position.z>45 && obj1.transform.position.z<55)  
{
OnEvent = 1;
Application.LoadLevel (4);

}

}

Добавлено (31.01.2014, 13:25)
---------------------------------------------
Nasa13, Мне на данный момент главное чтобы работало..
set16, Я работаю в Unity с JS, а не с AS

set16Дата: Пятница, 31 Января 2014, 13:27 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Unity Поддерживает ActionScript API, и можно компенсировать недостатки JS скриптом AS



=>The darkness of distant lands [3D]<=

Сообщение отредактировал set16 - Пятница, 31 Января 2014, 13:27
musicfunsДата: Пятница, 31 Января 2014, 13:33 | Сообщение # 12
Gorilla Develop Studio
Сейчас нет на сайте
set16, ну AS все равно не для меня. Мне бы что-нибудь на JS.
Nasa13Дата: Пятница, 31 Января 2014, 13:34 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
They work, but only if you add the collision something argument to the function. Mono is very forgiving for omitting that, but our flash port isn't yet.
As for OnTriggerEnter() you need to put collision : Collision in the arguments or it wont work in flash.

Here is a quote from one of the Unity devs:


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1


Сообщение отредактировал Nasa13 - Пятница, 31 Января 2014, 13:34
set16Дата: Пятница, 31 Января 2014, 13:36 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
вот урок как делать OnCollisionEnter для flash
тут

печаль


=>The darkness of distant lands [3D]<=

Сообщение отредактировал set16 - Пятница, 31 Января 2014, 13:37
Nasa13Дата: Пятница, 31 Января 2014, 13:37 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
As for OnTriggerEnter() you need to put collision : Collision

Главная фраза=)


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
musicfunsДата: Пятница, 31 Января 2014, 13:38 | Сообщение # 16
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, я эту тему листал сегодня раз 5 за день, только все равно не доперло. Куда какие коллизии ставить?
Nasa13Дата: Пятница, 31 Января 2014, 13:39 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
как я понял, нужно указать ,что именно этот объект с коллизиями...Потому как вообще, этого делать не обязательно, но не для флеша...Т.е.

var collisionObject : Collision;

Как я понял


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1


Сообщение отредактировал Nasa13 - Пятница, 31 Января 2014, 13:40
musicfunsДата: Пятница, 31 Января 2014, 13:42 | Сообщение # 18
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, Я все равно не понял как с этим работать sad
Nasa13Дата: Пятница, 31 Января 2014, 13:48 | Сообщение # 19
заслуженный участник
Сейчас нет на сайте
Как-то так,наверное

Код
#pragma strict

var OnEvent : int;  
var collisionObject : Collision;  

function Start () {

}

function Update () {

if ( collisionObject.collider.tag == "Player")  
{  
OnEvent = 1;  
Application.LoadLevel (6);  

}  

}  

Добавлено (31.01.2014, 13:44)
---------------------------------------------
Честно ,вообще с флешом не работал, с коллизиями не работал(интер он) , поэтому ,могу абстрактно помогать=)

Добавлено (31.01.2014, 13:48)
---------------------------------------------
Вот еще вариант, походу, рабочий...

Код
#pragma strict  

var OnEvent : int;  

function OnCollisionEnter(collision : Collision)
{  
if (other.collider.tag == "Player")  
{  
OnEvent = 1;  
Application.LoadLevel (6);  

}  

}


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
musicfunsДата: Пятница, 31 Января 2014, 13:48 | Сообщение # 20
Gorilla Develop Studio
Сейчас нет на сайте
Nasa13, Этот код не работал. Был допилен до :
Код

#pragma strict  

var OnEvent : int;   
var collisionObject : Collision;   

function OnTriggerEnter(collisionObject : Collider)  
{
if ( collisionObject.collider.tag == "Player")   
{   
OnEvent = 1;   
Application.LoadLevel (4);   

}   

}   


Сейчас компильну во флеш, посмотрю как там это работает.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемы с триггерами и флешем
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг