Из Явы в Шарп - Форум Игроделов
Чт, 31 Июл 2025, 06:35 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Из Явы в Шарп
dostalitionДата: Ср, 23 Янв 2013, 13:07 | Сообщение # 1
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Не могу вставить строчку с задержкой времени, напрмер, на 2сек. в шарп-скрипт - Юня выдаёт ошибку. Написал другой простейший скрипт на Яве для примера var box : GameObject;

function OnTriggerEnter()
{
yield WaitForSeconds(3);
Destroy(box);
}
- всё работает, как надо и ошибок нет, а тоже самое на Шарпе

using UnityEngine;
using System.Collections;

public class TEST_time : MonoBehaviour {

public GameObject box ;

void OnTriggerEnter()
{
yield return new WaitForSeconds(3);
Destroy(box);
}

}
- вылазит ошибка .... sad Подскажите, будьте добры, в чём дело ?

Добавлено (23.01.2013, 13:07)
---------------------------------------------
Вопрос решен smile Просто нужно вместо void ставить IEnumerator smile

 
СообщениеНе могу вставить строчку с задержкой времени, напрмер, на 2сек. в шарп-скрипт - Юня выдаёт ошибку. Написал другой простейший скрипт на Яве для примера var box : GameObject;

function OnTriggerEnter()
{
yield WaitForSeconds(3);
Destroy(box);
}
- всё работает, как надо и ошибок нет, а тоже самое на Шарпе

using UnityEngine;
using System.Collections;

public class TEST_time : MonoBehaviour {

public GameObject box ;

void OnTriggerEnter()
{
yield return new WaitForSeconds(3);
Destroy(box);
}

}
- вылазит ошибка .... sad Подскажите, будьте добры, в чём дело ?

Добавлено (23.01.2013, 13:07)
---------------------------------------------
Вопрос решен smile Просто нужно вместо void ставить IEnumerator smile


Автор - dostalition
Дата добавления - 23 Янв 2013 в 13:07
HunjethДата: Ср, 23 Янв 2013, 13:31 | Сообщение # 2
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
может Destroy(box, 3);
надо писать IEnumerator в с#
IEnumerator OnTriggerEnter()


Сообщение отредактировал Hunjeth - Ср, 23 Янв 2013, 13:38
 
Сообщениеможет Destroy(box, 3);
надо писать IEnumerator в с#
IEnumerator OnTriggerEnter()

Автор - Hunjeth
Дата добавления - 23 Янв 2013 в 13:31
dostalitionДата: Ср, 23 Янв 2013, 14:07 | Сообщение # 3
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Вот скрипт в котором Я хочу сделать задержки по времени using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {

public bool VIDIT;

public Transform target;

void OnTriggerStay(Collider other) {
if (other.gameObject.name != "Player1")
return;

var layerMask = 1 << 9 | 1 << 8;

if (other.gameObject.name == "Player1" && !Physics.Linecast (transform.position, target.position, layerMask))
{
VIDIT = true;

}

else{

VIDIT = false;}


}

IEnumerator OnTriggerExit(Collider other) {



if (other.gameObject.name == "Player1")

yield return new WaitForSeconds(3);
VIDIT = false;
}


}
Код
   

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

using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {
          
         public bool VIDIT;
          
         public Transform target;
          
         IEnumerator OnTriggerStay(Collider other) {
                 if (other.gameObject.name != "Player1")
                         return;
                  
                 var layerMask = 1 << 9 | 1 << 8;
          
      if (other.gameObject.name == "Player1" && !Physics.Linecast (transform.position, target.position, layerMask))
                 {              
          VIDIT = true;
                          
                 }
           
        else{  
                         yield return new WaitForSeconds(3);
          VIDIT = false;}
         
        
         }
          
         IEnumerator OnTriggerExit(Collider other) {
                  
                  
          
      if (other.gameObject.name == "Player1")
                  
        yield return new WaitForSeconds(3);
          VIDIT = false;
          }
          
          
          
          
          
}


то ошибка ругается на RETURN ... Подскажите, что не так теперь с первой функцией ?
 
СообщениеВот скрипт в котором Я хочу сделать задержки по времени using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {

public bool VIDIT;

public Transform target;

void OnTriggerStay(Collider other) {
if (other.gameObject.name != "Player1")
return;

var layerMask = 1 << 9 | 1 << 8;

if (other.gameObject.name == "Player1" && !Physics.Linecast (transform.position, target.position, layerMask))
{
VIDIT = true;

}

else{

VIDIT = false;}


}

IEnumerator OnTriggerExit(Collider other) {



if (other.gameObject.name == "Player1")

yield return new WaitForSeconds(3);
VIDIT = false;
}


}
Код
   

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

using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {
          
         public bool VIDIT;
          
         public Transform target;
          
         IEnumerator OnTriggerStay(Collider other) {
                 if (other.gameObject.name != "Player1")
                         return;
                  
                 var layerMask = 1 << 9 | 1 << 8;
          
      if (other.gameObject.name == "Player1" && !Physics.Linecast (transform.position, target.position, layerMask))
                 {              
          VIDIT = true;
                          
                 }
           
        else{  
                         yield return new WaitForSeconds(3);
          VIDIT = false;}
         
        
         }
          
         IEnumerator OnTriggerExit(Collider other) {
                  
                  
          
      if (other.gameObject.name == "Player1")
                  
        yield return new WaitForSeconds(3);
          VIDIT = false;
          }
          
          
          
          
          
}


то ошибка ругается на RETURN ... Подскажите, что не так теперь с первой функцией ?

Автор - dostalition
Дата добавления - 23 Янв 2013 в 14:07
HunjethДата: Ср, 23 Янв 2013, 14:13 | Сообщение # 4
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
попробуй просто написать
if (other.gameObject.name == "Player1") {...}


Сообщение отредактировал Hunjeth - Ср, 23 Янв 2013, 14:14
 
Сообщениепопробуй просто написать
if (other.gameObject.name == "Player1") {...}

Автор - Hunjeth
Дата добавления - 23 Янв 2013 в 14:13
dostalitionДата: Ср, 23 Янв 2013, 14:45 | Сообщение # 5
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
if (other.gameObject.name == "Player1") это в функции выхода из триггера, а проблема с функцией OnTriggerStay sad Там сначала идёт проверка того, кто стоит в триггере и , если это не игрок, то RETURN (дальше дело не идёт) И вот этот ретурн конфликтует как-то с IEnumerator, видимо ... sad
 
Сообщениеif (other.gameObject.name == "Player1") это в функции выхода из триггера, а проблема с функцией OnTriggerStay sad Там сначала идёт проверка того, кто стоит в триггере и , если это не игрок, то RETURN (дальше дело не идёт) И вот этот ретурн конфликтует как-то с IEnumerator, видимо ... sad

Автор - dostalition
Дата добавления - 23 Янв 2013 в 14:45
seamanДата: Ср, 23 Янв 2013, 16:00 | Сообщение # 6
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Ваши сообщения читать невозможно. Неужели так сложно кнопочку нажать?
В енумераторах return; использовать нельзя.
 
СообщениеВаши сообщения читать невозможно. Неужели так сложно кнопочку нажать?
В енумераторах return; использовать нельзя.

Автор - seaman
Дата добавления - 23 Янв 2013 в 16:00
dostalitionДата: Ср, 23 Янв 2013, 16:02 | Сообщение # 7
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Так объясните что где нажать ...
 
СообщениеТак объясните что где нажать ...

Автор - dostalition
Дата добавления - 23 Янв 2013 в 16:02
seamanДата: Ср, 23 Янв 2013, 16:04 | Сообщение # 8
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
А вы не видите кнопочки над формой добавления сообщения?
 
СообщениеА вы не видите кнопочки над формой добавления сообщения?

Автор - seaman
Дата добавления - 23 Янв 2013 в 16:04
dostalitionДата: Ср, 23 Янв 2013, 16:29 | Сообщение # 9
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Я вижу кнопочку КОД , но не пойму после неё код вставлять , до или между двух таких ...:)
 
СообщениеЯ вижу кнопочку КОД , но не пойму после неё код вставлять , до или между двух таких ...:)

Автор - dostalition
Дата добавления - 23 Янв 2013 в 16:29
seamanДата: Ср, 23 Янв 2013, 16:35 | Сообщение # 10
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Как же Вы на Юнити3д ру сумели код вставить?
Почти на всех форумах это делается одинаково. Пишешь код, выделяешь, нажимаешь кнопку. Что тут еще можно придумать?
 
СообщениеКак же Вы на Юнити3д ру сумели код вставить?
Почти на всех форумах это делается одинаково. Пишешь код, выделяешь, нажимаешь кнопку. Что тут еще можно придумать?

Автор - seaman
Дата добавления - 23 Янв 2013 в 16:35
dostalitionДата: Ср, 23 Янв 2013, 17:04 | Сообщение # 11
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
:))) Дело в том, что Я, за 27 лет, впервые( пару дней назад) зарегистрировался на форуме smile Не было до этого необходимости. Вот здесь залип и ещё на одном по Юне. Так вот на том форуме , когда Я нажимаю кнопку кода, появляется две рамки , между которыми Я и вставляю скрипт, а тут - одна, вот Я и запутался smile А что нужно скрипт выделять, а потом нажимать кнопку - вообще не знал smile НЕ ВИНИТЕ, исправлюсь :))
 
Сообщение:))) Дело в том, что Я, за 27 лет, впервые( пару дней назад) зарегистрировался на форуме smile Не было до этого необходимости. Вот здесь залип и ещё на одном по Юне. Так вот на том форуме , когда Я нажимаю кнопку кода, появляется две рамки , между которыми Я и вставляю скрипт, а тут - одна, вот Я и запутался smile А что нужно скрипт выделять, а потом нажимать кнопку - вообще не знал smile НЕ ВИНИТЕ, исправлюсь :))

Автор - dostalition
Дата добавления - 23 Янв 2013 в 17:04
seamanДата: Ср, 23 Янв 2013, 20:40 | Сообщение # 12
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
А по теме то поняли?
В енумераторах return; использовать нельзя. Нужно yield return null; Это, кстати, не правило Юнити, а правило шарпа.
 
СообщениеА по теме то поняли?
В енумераторах return; использовать нельзя. Нужно yield return null; Это, кстати, не правило Юнити, а правило шарпа.

Автор - seaman
Дата добавления - 23 Янв 2013 в 20:40
dostalitionДата: Ср, 23 Янв 2013, 22:50 | Сообщение # 13
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Заменил RETURN на yield return null , но что-то не срабатывает всё-равно ... В итоге сделали с кентом вот так
Код
using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {
   
  public bool VIDIT;
  public bool check;//показатель того, что пошел отсчёт времени после исчезновения цели
   
  public Transform target;
   
  public float time_ISCHEZ;
   
  void OnTriggerStay(Collider other) {
   if (other.gameObject.name != "Player1")
    return;
    
   var layerMask = 1 << 9 | 1 << 8;
    
      if (other.gameObject.name == "Player1" && !Physics.Linecast (transform.position, target.position, layerMask))
   {              
             VIDIT = true;
    check = false;
     
   }
           
        else if (!check){ //т.е. check = false
    time_ISCHEZ = Time.time;//записываем в time_ISCHEZ время на момент исчезновения
    check = true;
   }
         
        
  }
   
  void OnTriggerExit(Collider other) {
    
        if (other.gameObject.name == "Player1" && !check)
    
        time_ISCHEZ = Time.time;
   check = true;
           
          }
   
  public void Update () {
   if (check && Time.time - time_ISCHEZ > 2)
   {
    VIDIT = false;
    check = false;
   }
  }
   

   
}
всё работает, но вариант с елд Мне больше нравился, проще как-то ... smile Благодарю за внимание smile

Добавлено (23.01.2013, 22:50)
---------------------------------------------
И , наконец-то, научился ПРАВИЛЬНО код тут вставлять ! :)))

 
СообщениеЗаменил RETURN на yield return null , но что-то не срабатывает всё-равно ... В итоге сделали с кентом вот так
Код
using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {
   
  public bool VIDIT;
  public bool check;//показатель того, что пошел отсчёт времени после исчезновения цели
   
  public Transform target;
   
  public float time_ISCHEZ;
   
  void OnTriggerStay(Collider other) {
   if (other.gameObject.name != "Player1")
    return;
    
   var layerMask = 1 << 9 | 1 << 8;
    
      if (other.gameObject.name == "Player1" && !Physics.Linecast (transform.position, target.position, layerMask))
   {              
             VIDIT = true;
    check = false;
     
   }
           
        else if (!check){ //т.е. check = false
    time_ISCHEZ = Time.time;//записываем в time_ISCHEZ время на момент исчезновения
    check = true;
   }
         
        
  }
   
  void OnTriggerExit(Collider other) {
    
        if (other.gameObject.name == "Player1" && !check)
    
        time_ISCHEZ = Time.time;
   check = true;
           
          }
   
  public void Update () {
   if (check && Time.time - time_ISCHEZ > 2)
   {
    VIDIT = false;
    check = false;
   }
  }
   

   
}
всё работает, но вариант с елд Мне больше нравился, проще как-то ... smile Благодарю за внимание smile

Добавлено (23.01.2013, 22:50)
---------------------------------------------
И , наконец-то, научился ПРАВИЛЬНО код тут вставлять ! :)))


Автор - dostalition
Дата добавления - 23 Янв 2013 в 22:50
HunjethДата: Ср, 23 Янв 2013, 23:39 | Сообщение # 14
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Код
using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {
      public bool VIDIT;
      public Transform target;
        
      IEnumerator OnTriggerStay(Collider other) {
          if (other.gameObject.name == "Player1" && Physics.Linecast(transform.position, target.position, 1<<9|1<<8) == false) {
              VIDIT = true;
              }else if (VIDIT == true) {
              yield return new WaitForSeconds(3);
              VIDIT = false;
          }
      }
      IEnumerator OnTriggerExit(Collider other) {
          if (other.gameObject.name == "Player1" && VIDIT == true) {
              yield return new WaitForSeconds(3);
              VIDIT = false;
          }
      }
}


Сообщение отредактировал Hunjeth - Ср, 23 Янв 2013, 23:51
 
Сообщение
Код
using UnityEngine;
using System.Collections;

public class ZRENIE : MonoBehaviour {
      public bool VIDIT;
      public Transform target;
        
      IEnumerator OnTriggerStay(Collider other) {
          if (other.gameObject.name == "Player1" && Physics.Linecast(transform.position, target.position, 1<<9|1<<8) == false) {
              VIDIT = true;
              }else if (VIDIT == true) {
              yield return new WaitForSeconds(3);
              VIDIT = false;
          }
      }
      IEnumerator OnTriggerExit(Collider other) {
          if (other.gameObject.name == "Player1" && VIDIT == true) {
              yield return new WaitForSeconds(3);
              VIDIT = false;
          }
      }
}

Автор - Hunjeth
Дата добавления - 23 Янв 2013 в 23:39
dostalitionДата: Чт, 24 Янв 2013, 00:56 | Сообщение # 15
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Благодарю smile Попробовал, но что-то не так ... Как-то моб дёргается при беге ... Hunjeth, Я так понял, что Ты убрал это
Код
if (other.gameObject.name != "Player1")  
                          return
из скрипта и поэтому возникают проблемы ...
 
СообщениеБлагодарю smile Попробовал, но что-то не так ... Как-то моб дёргается при беге ... Hunjeth, Я так понял, что Ты убрал это
Код
if (other.gameObject.name != "Player1")  
                          return
из скрипта и поэтому возникают проблемы ...

Автор - dostalition
Дата добавления - 24 Янв 2013 в 00:56
HunjethДата: Чт, 24 Янв 2013, 01:09 | Сообщение # 16
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
да когда тип функции IEnumerator то в ней не должно быть return

Сообщение отредактировал Hunjeth - Чт, 24 Янв 2013, 01:09
 
Сообщениеда когда тип функции IEnumerator то в ней не должно быть return

Автор - Hunjeth
Дата добавления - 24 Янв 2013 в 01:09
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025