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)

pax 25.01.2013 12:19

Ответ: Вопросы от новичка
 
ScriptableObject + CustomEditor попробовал?

seaman 25.01.2013 13:53

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

ScriptableObject + CustomEditor попробовал?
Не, ну это то работает. Создаем ScriptableObject, создаем из него ассет. смотрим инспектор для него. Видим и свои добавки и дефолтный, если надо. Все ОК.
Хотелось несколько иного. Например есть 3ds файл. Хотелось бы для него написать инспектор аналогичный инспектору fbx файла. (Это чисто пример, но понятно что хочется).
Сейчас нужно или из контекстного меню или из меню сверху запускать импортер такого файла, открывать в импортере отдельное окно с настройками импорта...

pax 25.01.2013 15:35

Ответ: Вопросы от новичка
 
да, так я импортер b3d писал ага, тоже бы хотелось, но к сожалению не нашел как сделать

WISHMASTER35 26.01.2013 16:20

Ответ: Вопросы от новичка
 
Почитал про PropertyDrawer.
Классно. Интересно, что можно помечать переменные своим атрибутом и создать для своего атрибута этот PropertyDrawer. Как в примере с RangeAttribute.
Но вот чего я не понял, это почему все рисуется через EditorGUI, а не EditorGUILayout! Если я правильно понял, то рисовать можно только в одну строку. Сильно не разгонишься!!!!!!!!!!!!!!!!!!!

seaman,
Цитата:

Не этим. Я же написал - TextureImporter
Это я ссылку перепутал))

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

seaman 26.01.2013 17:04

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

в твоем примере шрифт грузится просто в статическую ссылку?
У меня шрифт не ttf, а атлас типа:

Он создается в спецпрограмме, которая кроме такого атласа создает описание его - список литер с координатами и еще некоторыми параметрами. Вот это описание я и гружу. В описании есть имя текстуры атласа. Так что при парсине можно привязать такой битмапфонт к текстуре. После загрузки создается структура с описанием фонта и внутри с описанием каждой литеры. Эта структура сохраняется (либо в файл своего формата в папку Resources, либо вообще в базу данных - по необходимости). Рантайм по описанию создается текстура с нужным текстом. Текстура накладывается куда нужно.

WISHMASTER35 26.01.2013 17:14

Ответ: Вопросы от новичка
 
Я когда-то тоже делал свой шрифт. Сделал ScriptableObject и сделал для него инспектор в котором была кнопочка импорта моего формата. Т.е. нажимал эту кнопочку, выбирал мой файл и его данные грузились в мой ассет, после чего файл можно было даже удалить) Хотя в билд он и не должен был попадать т.к. ссылок на него нету. Не очень удобно, но работало.

Я имел ввиду куда твой FontImport.ImportFont сохраняет загруженные данные? Просто в статическую ссылку? Или GO со шрифтом в сцене создает?
[UPDATE]
Подожди, OnPostprocessAllAssets вызывается в редакторе, а не на старте сцены?

seaman 26.01.2013 17:40

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

static public class CustomFonts
{
    private static readonly ChrDesc _nullChar = new ChrDesc(' ', new Rect(0,0,0,0), new Point(0,0), 0);
    public static void AddChangeFont(CustomFont cf)
    {

Там производится сохранение добавляемого/меняемого шрифта (CustomFont). FontImport.ImportFont после парсинга просто вызывает AddChangeFont, передавая ему только что созданный фонт.
Рантайм читаем сохраненный CustomFont и передаем его в
Код:

static public class CreateGo
{
    static public GameObject GoFromText(string text, CustomFont font, int lineSpacing, QuadInfo info, Camera guicam)
    {

Он создает GameObject. Меш - плейник, текстура материала создается из текста string text в самом CustomFont есть:
Код:

    public static Texture2D CreateTextToTexture(string text, Point textPos, Size textureSize, float scale, int lineSpacing)
    {

Соответственно можно не создавать ГО, а просто создать нужную текстуру и наложить ее на любой обхект

WISHMASTER35 26.01.2013 23:54

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

seaman 27.01.2013 00:22

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

Подожди, OnPostprocessAllAssets вызывается в редакторе, а не на старте сцены?
Конечно. Когда суешь в проект какой-то файл,- Юнити пытается его импортировать. По окончании импорта и вызывается OnPostprocessAllAssets. В него передается ссылка на файлы, которые Юнити импортировала.

WISHMASTER35 27.01.2013 00:59

Ответ: Вопросы от новичка
 
Кстати, свою сериализацию можно сделать с помощью BinaryFormatter, который хорошо работает с полиморфизмом. А полученный массив байт сохранит уже сериализатор юнити. Только загружать\сохранять придется вручную.
Код:

        public static T Load<T>(byte[] data) {
                MemoryStream stream = new MemoryStream(data);
                BinaryFormatter bf = new BinaryFormatter();
                T obj = (T)bf.Deserialize(stream);
                stream.Close();
                return obj;
        }
       
        public static byte[] Save(object obj) {
                MemoryStream stream = new MemoryStream();
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(stream, obj);
                byte[] data = stream.ToArray();
                stream.Close();
                return data;
        }

А вот XmlSerializer плохо работает с полиморфизмом( А хотелось сделать свой читабельный xml формат.

Но может и к лучшему) Наверно лучше создавать свой формат, а не пользоваться сериализаторами. Буду теперь свой xml формат придумывать и писать для него import/export:)

Только не пойму TextAsset редактировать вообще нельзя?

seaman 27.01.2013 01:01

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

Только не пойму TextAsset редактировать вообще нельзя?
Вспомнил я, что Pax говорил, что делал это для Антарес. Полез в него. Откопал. Делаем так:
Код:

[CustomEditor(typeof(TextAsset))]
public class GobInspector : Editor
{
    public override void OnInspectorGUI()
    {
        GUI.enabled = true;
            GUILayout.Label("This is a Label in a Custom Editor");
            if(GUILayout.Button("Probe")) Debug.Log("PROBE");
        }
}


LLI.T.A.L.K.E.R. 27.01.2013 01:05

Ответ: Вопросы от новичка
 
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 33 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

WISHMASTER35 27.01.2013 01:14

Ответ: Вопросы от новичка
 
seaman, так и знал, что gui где-то должно отключаться, но забыл где)
LLI.T.A.L.K.E.R., тут делают игры, а не ломают их.
Кстати, конечно сцена там простая, но я сначала подумал, что то реальные фото)

LLI.T.A.L.K.E.R. 27.01.2013 01:33

Ответ: Вопросы от новичка
 
Написал ему на почту, либо если его знаете - сообщите.
Просто, только второй раз пользуюсь отправкой электронного письма.

seaman 27.01.2013 01:34

Ответ: Вопросы от новичка
 
LLI.T.A.L.K.E.R Из вебсборки выдрать ресурсы достаточно легко. Из стендэлон нет. Если невмоготу - 3dripper в руки - и работать. Но вообще то такое и новичок может сам сделать. Ни моделек ни текстур крутых я там не увидел.

LLI.T.A.L.K.E.R. 27.01.2013 01:45

Ответ: Вопросы от новичка
 
seaman
http://www.playnoread.com/game_zarulem.php
я хочу быстренько сделать игру - с ресурсами туго.
просто увидел видео обзор на неё, а в ней физики нет вообще

http://gamejolt.com/data/games/10779...Player.unity3d

seaman 27.01.2013 02:16

Ответ: Вопросы от новичка
 
Машинка
Уверен, что это Вам не поможет. Быстренько только кошки родятся.
Хотя сделать такую машинку нужно где-то полчаса работы.

pax 27.01.2013 09:52

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

Сообщение от WISHMASTER35 (Сообщение 250816)
А вот XmlSerializer плохо работает с полиморфизмом( А хотелось сделать свой читабельный xml формат.

Прочитай полностью, особенно третий пост

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;


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

pax 28.01.2013 18:18

Ответ: Вопросы от новичка
 
hit.collider.gameObject.transform.rigidbody и т.д. )

Morganolla 28.01.2013 21:48

Ответ: Вопросы от новичка
 
Можно ли к одному объекту прикрепить несколько звуков, которые могут проигрываться даже одновременно? Я что то запутался в аудиосорсах и аудиоклипах...)
К одному объекту можно прикрепить только один аудиосорс?
Если несколько , то как их идентифицировать?
Насколько я понял клип можно переприсвоить данному аудиосорсу в процессе игры - audio.clip = otherClip;
а старый клип будет продолжать звучать?

WISHMASTER35 29.01.2013 01:19

Ответ: Вопросы от новичка
 
А нету метода который бы округлял число не до ближайшего целого, а до какого-то числа кратного n?
Т.е. это
result = x - x%n;
Только в более элегантной форме?
В Math столько перегрузок Round, но похоже все не то, что хотелось бы)

mauNgerS 29.01.2013 06:59

Ответ: Вопросы от новичка
 
Через скрипт создаю несколько кубиков. Кубики - это клоны заранее сделанного префаба. На этом префабе висит скрипт управления.

Суть в том что при отнимании жизни кубик удаляется.
Жизнь объявлена public static int boxlife=1;

Отнимание жизни происходит в другом скрипте.

Когда происходит отнимание жизни у нужного кубика, то жизнь отнимается сразу у всех кубиков, и все удаляются.

Может ли быть причина в том что жизнь объявлена как static?

pax 29.01.2013 09:07

Ответ: Вопросы от новичка
 
Morganolla
Самый простой способ. Но можно несколько AudioSource на один объект повесить для одновременного проигрывания.

Цитата:

Сообщение от mauNgerS (Сообщение 251029)
Может ли быть причина в том что жизнь объявлена как static?

Да именно в этом причина. Статическая переменная это единственная переменная - в блице глобальная.

Левша09 29.01.2013 12:32

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

Сообщение от Radnk (Сообщение 250957)
Тут так делать не принято ;)

Ну раз тут так не принято, может ткнете носом в хорошую инструкцию по размещению веб сборок?

pax 29.01.2013 12:35

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

Сообщение от Левша09 (Сообщение 251040)
Ну раз тут так не принято, может ткнете носом в хорошую инструкцию по размещению веб сборок?

Вэб билд создает два файла - html и unity3d, достаточно эти два файла скопировать на хостинг или например dropbox, и открыть в браузере ссылку на html файл. Никаких заморочек.

А вообще все что касается вэб плеера находится тут: http://docs.unity3d.com/Documentatio...eployment.html

Левша09 29.01.2013 15:21

Ответ: Вопросы от новичка
 
Ну видимо до меня ну Очень туго доходит.
Дропбоксом не пользовался, попробовал через гугл диск, лажа какая-то.
HTML открывается только на редактирование.
Куда еще можно залить?

pax 29.01.2013 15:22

Ответ: Вопросы от новичка
 
сейчас вроде новый обменник появился кроме дропбокса - mega, можно попробовать на нее. Дропбокс достаточно просто.

WISHMASTER35 29.01.2013 17:58

Ответ: Вопросы от новичка
 
DropBox для синхронизации, а не для сайтов и подобного. Там вроде бы есть ограничения трафика.
Кто-то писал, что это хороший сайт http://3owl.com/

Okay 29.01.2013 22:19

Ответ: Вопросы от новичка
 
Проблема в цикле. Из-за него зависает unity при запуске игры
Код:

       
while(!controller.isGrounded)
{
        animation.CrossFade("jump");
}


Okay 29.01.2013 22:43

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

Сообщение от Okay (Сообщение 251090)
Проблема в цикле. Из-за него зависает unity при запуске игры
Код:

       
while(!controller.isGrounded)
{
        animation.CrossFade("jump");
}


А все понял. Использовал цикл в Update()

UPD: показалось... Все еще жду помощи

seaman 29.01.2013 23:29

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

DropBox для синхронизации, а не для сайтов и подобного
А никто вроде про сайт не спрашивал. Спрашивали про выкладывание веб сборок.
Имхо: Если просто показать - лучше всего дропбокс. Если для распространения - или AssetStore, или Kongregate или свой выделенный/виртуальный сервер.

seaman 29.01.2013 23:31

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

Все еще жду помощи
Зачем в while это? У Вас что анимация не зацикленная?

Okay 29.01.2013 23:43

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

Сообщение от seaman (Сообщение 251103)
Зачем в while это? У Вас что анимация не зацикленная?

Дело в том, что стандартная анимация в Character Controller не работает. Пришлось свой скрипт писать.
Код:

#pragma strict

var runclip : AnimationClip;
var idleclip : AnimationClip;
var jumpclip : AnimationClip;
var fight1clip : AnimationClip;

var spawnGO : GameObject;

function Start ()
{
        animation.AddClip(runclip, "run");
        animation.AddClip(idleclip, "idle");
        animation.AddClip(jumpclip, "jump");
        animation.AddClip(fight1clip, "fight1");

}

function Update ()
{
        var controller : CharacterController = GetComponent(CharacterController);
        if(Input.GetAxis("Vertical") || Input.GetAxis("Horizontal"))
        {
                if(controller.isGrounded)
                {
                        animation.CrossFade("run");
                }
        }
        if(!Input.GetAxis("Vertical") && !Input.GetAxis("Horizontal") && !Input.GetKey(KeyCode.LeftControl))
        {
                if(controller.isGrounded)
                {
                        animation.CrossFade("idle");
                }
        }
        while(controller.isGrounded != controller.isGrounded)
        {
                animation.CrossFade("jump");
        }

        if(Input.GetKey(KeyCode.LeftControl))
        {
                if(!animation.IsPlaying("jump") && !animation.IsPlaying("run"))
                {
                        animation["fight1"].speed = 8;
                        animation.CrossFade("fight1");
                }
        }
        if(transform.position.y < -10)
        {
                var ygo = spawnGO.transform.position.y;
                var xgo = spawnGO.transform.position.x;
                var zgo = spawnGO.transform.position.z;
                transform.position = Vector3(xgo,ygo,zgo);
        }
}

Такие вот дела...

seaman 29.01.2013 23:53

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

стандартная анимация в Character Controller не работает
Это не понятно.
А на вопрос Вы не ответили - зачем в while? Один раз запустить анимацию - и пусть она сама воспроизводится.

pax 30.01.2013 00:02

Ответ: Вопросы от новичка
 
вместо while - if

Okay 30.01.2013 00:04

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

Сообщение от seaman (Сообщение 251112)
Это не понятно.
А на вопрос Вы не ответили - зачем в while? Один раз запустить анимацию - и пусть она сама воспроизводится.

У меня в Юнити в скрипте не работает анимация. То есть если повесить на объект скрипт Character Controller и закинуть анимации в инспекторе, то они работать не будут. Если запустить один раз при прыжке, то есть баг: Допустим анимация длится 5 секунд, а я за 3 секунды запрыгнул на объект, то при следующем прыжке анимация прыжка воспроизводится не будет. Поэтому нужно сделать проверку на "На граунде игрок или нет", чтобы она воспроизводилась постоянно

Okay 30.01.2013 00:10

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

        if(Input.GetKey(KeyCode.Space))
        {
                if(!controller.isGrounded)
                {       
                        animation.CrossFade("jump");       
                }
              }

Сделал вот так. Тестил минуты 2-3. Багов не наблюдаю с воспроизведением анимации

Левша09 30.01.2013 09:55

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

Сообщение от seaman (Сообщение 251102)
А никто вроде про сайт не спрашивал. Спрашивали про выкладывание веб сборок.
Имхо: Если просто показать - лучше всего дропбокс. Если для распространения - или AssetStore, или Kongregate или свой выделенный/виртуальный сервер.

А смотря что подразумевается под "показать", я имел в виду показать в браузере, чтобы не отправлять полный билд коллегам.
Я может не понимаю механизма. Если даю ссыль на unity файл, то у некоторых открывается нормально. А вот ссыль на html не работает.
Посмотрел на юнити.ру, там размещают юнити файл лежащий на дропбоксе, но насколько я понял у них веб плеер к сайту прикручен.

mauNgerS 30.01.2013 11:52

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

PHP код:

public class Zipper MonoBehaviour {
    public 
Box box;
    public 
Vector3 groundPoint;
    
    
void Awake () {
        
box GetComponent<Box>();
    }
    
    
void Update () {
        print (
box.boxswith);
    }


Нужно обратится к скрипту Box и получить из него переменную boxswith

Первый скрипт висит на одном объекте, второй на другом

Проблема в том что оба объекта загружаются по ходу выполнения программы и клонов объектов много. Объекты со скриптом Box это цели, а с другим скриптом пули.

Код который приведен выше даёт NullReferenceException: Object reference not set to an instance of an object
Zipper.Update () (at Assets/Scripts/Zipper.cs:40) на эту строчку print (box.boxswith);

Как вообще реализовать общение скриптов, когда много клонов объектов?

Lestar 30.01.2013 12:08

Ответ: Вопросы от новичка
 
Если пули, через коллизию. Если в общем, по какому либо атрибуту, например по имени. Стрелять физическими пулями решение с огромным количеством проблем.

mauNgerS 30.01.2013 12:41

Ответ: Вопросы от новичка
 
Объекты по которым стреляю у меня статичны, я могу найти по позиции.

Но почему код приведённый выше вызывает ошибку.
По идее он должен написать значение boxswith всех клонов.

pax 30.01.2013 12:46

Ответ: Вопросы от новичка
 
не должен, т.к. GetComponent получает скрипт с текущего объекта

mauNgerS 30.01.2013 12:54

Ответ: Вопросы от новичка
 
Т.е. по ходу выполнения программы он пробегает по всем объектам, а доступ я получаю к скрипту объекта который был последним?

Как тогда выбрать нужные мне скрипт, ведь объекты отличаются только содержимым переменных в скрипте (жизнь, позиция). Или при создании объекта давать разные имена (ололо1, ололо2 ... и т.д.)

Тогда как выбрать объект по имени? (помогите кодом)

pax 30.01.2013 13:06

Ответ: Вопросы от новичка
 
Нет, скрипт Zipper принадлежит конкретному объекту, и GetComponent получает скрипты с этого объекта. По имени искать GemeObject.Find(), но может тебе что-то проще подойдет? Опиши задачу более подробно.

mauNgerS 30.01.2013 13:25

Ответ: Вопросы от новичка
 
Задача такая:
Объект Box на нём скрипт Box - это заранее сделанный префаб, клоны которого расставляются по карте
GameObject inst = (GameObject)Instantiate(Resources.Load("Prefabs/Box", typeof(GameObject)));

Затем игрок стреляет по этим клонам. При выстреле создаётся клон другого префаба
GameObject inst = (GameObject)Instantiate(Resources.Load("Prefabs/Particles/Zipper", typeof(GameObject)));

На объекте Zipper весит скрипт Zipper. При попадании в объект Box у Box отнимается жизнь (если ноль то удаляется) а объект Zipper удаляется.

Объектов Box много и объектов Zipper много.

Как хочу сделать (пока не получается)
Zipper получает позицию Box. По позиции находится тот Box на который нацелен Zipper (объект Box статичен). При попадании у нужного Box отнимается жизнь.

Когда я делал жизнь как static всё работало, только жизнь была одна на все Box...

pax 30.01.2013 14:01

Ответ: Вопросы от новичка
 
Короче задача в момент выстрела или в момент попадания определить в какой Box попал. Попробуй почитать мой тутор про змейку. Там есть поедание еды через столкновение. Я думаю тебе похожий способ подойдет. Если определить можно в момент выстрела, то здесь поможет Raycast.

Lestar 30.01.2013 14:03

Ответ: Вопросы от новичка
 
Стрельни лучем, если игрок попал по цели, определяй время через которое пуля должна войти в цель, дальше два направления или через эту дельту времени инстансь пулю в точке, куда ты попал и через коллизию с целью вызывай логику или пускай пулю и с задержкой дельта вызывай на ней логику. Не знаю насколько динамичная у тебя сцена, и нужна ли видимость полета пули.

Up. Pax за тобой не успеешь))

Morganolla 30.01.2013 14:26

Ответ: Вопросы от новичка
 
рах
попробовал применить
audio.PlayClipAtPoint(clip, new Vector3(5, 1, 2));
выдается ошибка -
Assets/aScripts/sAnimator.cs(269,23): error CS0176: Static member `UnityEngine.AudioSource.PlayClipAtPoint(UnityEngi ne.AudioClip, UnityEngine.Vector3)' cannot be accessed with an instance reference, qualify it with a type name instead

В чем дело?

Lestar 30.01.2013 14:40

Ответ: Вопросы от новичка
 
AudioSource добавил?


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

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