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=15809)

mauNgerS 27.01.2013 12:01

Ответ: Вопросы от новичка
 
Добавил систему частиц командой: Create Other=>Particle System.
Настроил как мне нужно, сделал префаб.
На этот префаб повешал скрипт.

PHP код:

public class Zipper MonoBehaviour {
    public 
Vector3 groundPoint;

    
void Start () {
        
groundPoint=Player.targetP;
    }
    
    
void Update () {
        
float targetDistanceMin=0.1f;
        
Vector3 direction;
        
float distance;

        
direction groundPoint transform.position;
        
distance direction.magnitude;
        if (
distance targetDistanceMin)
        {
            
transform.position += direction.normalized * (distance targetDistanceMin)* Time.deltaTime*2.0f;
        }
        else
        {
            
Destroy(gameObject);
        }
    }


Суть такая: из другого скрипта префаб получает цель и летит до неё, когда долетит удаляется.

Однако когда префаб долетает до цели он не удаляется (в иерархии тоже), частицы продолжают генерироваться. Если же вместо системы частиц использовать другой префаб, например сделанный из модели, то всё работает как надо.

Вопрос, почему так? Что не верно?

seaman 27.01.2013 12:40

Ответ: Вопросы от новичка
 
Может DestroyImmediate поможет?
Еще можно попробовать выключить партиклы перед удалением типа ParticleSystem.Stop

WISHMASTER35 27.01.2013 13:57

Ответ: Вопросы от новичка
 
mauNgerS, ты уверен, что дестрой вызывается?

seaman 27.01.2013 14:02

Ответ: Вопросы от новичка
 
Кстати,-да. Может размер объекта на котором частицы велик? Тогда расстояние до цели никогда не станет меньше targetDistanceMin. Вставьте дебаг рядом с destroy

mauNgerS 27.01.2013 15:56

Ответ: Вопросы от новичка
 
Спасибо, всё верно проблема была в расчёте дистанции.

Другой вопрос.
Как в этом же скрипте использовать ParticleSystem.Stop, ParticleSystem.Play и т.д.?
Чёт не получается.

WISHMASTER35 27.01.2013 16:08

Ответ: Вопросы от новичка
 
mauNgerS, в смысле не получается?
Черт!!! Редактирование файла в юнити похоже никак не сделать. И все из-за того, что после сохранения файла через NET'овский класс File, юнити видет не оригинал, а свою кэшированную копию.
А AssetDatabase.Refresh() просто виснет на моем измененном ассете. Да и если бы не вис, то долго работал.

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

mauNgerS 27.01.2013 16:14

Ответ: Вопросы от новичка
 
Цитата:

mauNgerS, в смысле не получается?
Нужно сначала что-то типа GetComponent<ParticleSystem>???

И ещё изменение прозрачности можно сделать только анимированной текстурой? Или есть параметр alpha?

WISHMASTER35 27.01.2013 16:33

Ответ: Вопросы от новичка
 
Цитата:

Нужно сначала что-то типа GetComponent<ParticleSystem>???
Необязательно.
Можно обращаться через particleEmitter и particleSystem.

Понял почему у меня моя сериализация иногда сбрасывалась.
Юнити после компиляции почему-то сбрасывает мой не сериализованный список. А мой редактор в OnDisable сериализует список.
Вообщем черт знает как это все сделать.
UPDATE
Все разобрался. Пока все нормально.
Достаточно загружать свою сериализацию в OnEnable скрипта ScriptableObject.
А сохранять можно в OnDisable редактора.

Lestar 27.01.2013 16:40

Ответ: Вопросы от новичка
 
2.Color (r , g , b , a) , где a- альфа

WISHMASTER35 27.01.2013 19:51

Ответ: Вопросы от новичка
 
Интересно как юнити определяет, что какой-то файл был изменен в браузере винды?
Как бы файл переписать, чтобы юнити это заметил и перекэшировал сам.

Разобрался с сохранением файла. Все работает, если сохранять по нажатию кнопки, а не в OnDisable. Не очень хорошо т.к. можно забыть нажать на кнопку или тупо нечаянно переключится на другой объект и все потерять. Не понятно почему в OnDisable нельзя делать импорт файла.
Код:

        private void Save() {
                string projectPath = Application.dataPath;
                projectPath = projectPath.Substring(0, projectPath.Length-"Assets".Length);
                string path = projectPath+AssetDatabase.GetAssetPath(asset);
               
                File.WriteAllText(path, text, Encoding.ASCII);
                AssetDatabase.ImportAsset( AssetDatabase.GetAssetPath(asset) );
        }

Но может есть какие-то идеи как дать понять юнити, что файл изменен?

Левша09 28.01.2013 16:04

Ответ: Вопросы от новичка
 
Просьба не закидывать помидорами. Подскажите, пожалуйста, как выключить/включить светильник?

pax 28.01.2013 16:06

Ответ: Вопросы от новичка
 
PHP код:

if(Input.GetKeyDown(KeyCode.Space))
       
light.enabled = !light.enabled


Левша09 28.01.2013 16:19

Ответ: Вопросы от новичка
 
Pax, спасибо.

Radnk 28.01.2013 16:44

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Левша09 (Сообщение 250950)
Просьба не закидывать помидорами.

Тут так делать не принято ;)

mauNgerS 28.01.2013 18:12

Ответ: Вопросы от новичка
 
Вновь вопрос.

PHP код:

public Vector3 CameraPick() 
{
    
Vector3 groundPoint;
    
RaycastHit hit;
        
    
Ray ray targetCam.camera.ScreenPointToRay(Input.mousePosition);
    
Physics.Raycast(rayout hit);
    
groundPoint hit.point;
    return 
groundPoint;


Так я узнаю координаты точки под мышкой, а как узнать в какой объект я попал.


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

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