Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 22.08.2012, 07:43   #601
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Сообщение от WISHMASTER35 Посмотреть сообщение
изучаю злых роботов. там все построенно на посылке сообщений с помощью SignalSender. вроде бы и удобно т.к. не надо создавать много скриптов, а один настраивать можно, чтобы при каких-то событиях он еосылал обьектам сообщения(например при взломе компа открывать двери и др) но пока разобрался что куда сообщения посылает пол дня прошло.
вот думаю как хорошо было бы, если в юнити был такой тип в который можно было записать ссылку на скрипт и метод. и конечно в инспекторе выводился бы список методов скрипта из которых можно было бы выбирать нужный. а то одну букву неправильно напишешь и ж@п@.
думаю это было бы и не сложно сделать, но создать свой инспектор для простого класса нельзя(
никому такая идея не приходила?
Так жеж это просто: obj.GetType().GetMethods()
где obj это скрипт.
Скрипт типа Component, имя метода - string. При старте получить метод по имени если надо вызывать через MethodInfo, если через мессаджи, то не надо. Делал много таких инспекторов в Antares Universe.


Сообщение от Gector Посмотреть сообщение

GameObject cube;
GameObject cube2;
cube = GameObject.Find("Cube");
cube2 = GameObject.Find("Cube2");
Лучше так не делать каждый кадр, ибо поиск по имени - сложная операция. Вынеси это в Start если кубы не заменяются новыми со временем.

Сообщение от Костян Посмотреть сообщение
Это прикол Unity что оно не вызывает OnCollision*** если ригид кинематический???
Если кинематический и сталкивается с коллайдером или другим кинематическим телом - вероятно да.
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 22.08.2012 в 11:34.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (22.08.2012)
Старый 22.08.2012, 17:57   #602
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Вопросы от новичка

Сообщение от pax Посмотреть сообщение
Лучше так не делать каждый кадр, ибо поиск по имени - сложная операция. Вынеси это в Start если кубы не заменяются новыми со временем.
Моя забыть...
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 18:38   #603
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений
(для 64 пользователей)
Ответ: Вопросы от новичка

Добрый день. Решил сделать какую нибудь небольшую казуалку. Хотелось сделать все на GUI без лишних объектов. Возник вопрос по "тыку" по гемам. Как определить по какой текстурке ткнули мышкой?
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 22:06   #604
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

pie, проверяй попала ли мышь в rect твоей текстуры. вообще gui для этого не очень годится. хотч в 4й версии он уже навеоно батчится.
pax, вот именно что я не пойму как в инспекторе изменить поле, чтобы при нажатии на него было не редактирование строки, а выподал список методов скрипта. но как я понимаю такое не сделать. хотя еще можно было бы сделать, если можно было бы сделать инспектор не для скрипта, а для обычного класса. в данном случае класса SignalSender.

что вы за инспекторы в своей вселенной делаете? давно интересно было. можешь не очень тяжелый скрин сделать, а то инет мобильный.
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 01:23   #605
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений
(для 64 пользователей)
Ответ: Вопросы от новичка

Спасибо. На wiki нашел шейдер Planet. Вроде бы все хорошо, но не хватает бампа. Не могли бы Вы помочь прикрутить бамп к этому шейдеру?

Shader "planets"
{
    Properties
    {
        _MainTex("Texture (RGB)", 2D) = "black" {}
        _Color("Color", Color) = (0, 0, 0, 1)
        _AtmoColor("Atmosphere Color", Color) = (0.5, 0.5, 1.0, 1)
        _Size("Size", Float) = 0.1
        _Falloff("Falloff", Float) = 5
        _FalloffPlanet("Falloff Planet", Float) = 5
        _Transparency("Transparency", Float) = 15
        _TransparencyPlanet("Transparency Planet", Float) = 1
    }
   
	SubShader
    {
        Pass
        {
            Name "PlanetBase"
            Tags {"LightMode" = "Always"}
            Cull Back
           
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
               
                #pragma fragmentoption ARB_fog_exp2
                #pragma fragmentoption ARB_precision_hint_fastest
               
                #include "UnityCG.cginc"
               
                uniform sampler2D _MainTex;
                uniform float4 _MainTex_ST;
                uniform float4 _Color;
                uniform float4 _AtmoColor;
                uniform float _FalloffPlanet;
                uniform float _TransparencyPlanet;
               
                struct v2f
                {
                    float4 pos : SV_POSITION;
                    float3 normal : TEXCOORD0;
                    float3 worldvertpos : TEXCOORD1;
                    float2 texcoord : TEXCOORD2;
                };

                v2f vert(appdata_base v)
                {
                    v2f o;
                   
                    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                    o.normal = v.normal;
                    o.worldvertpos = mul(_Object2World, v.vertex).xyz;
                    o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                   
                    return o;
                }
              
                float4 frag(v2f i) : COLOR
                {
                    i.normal = normalize(i.normal);
                    float3 viewdir = normalize(_WorldSpaceCameraPos-i.worldvertpos);
                   
                    float4 atmo = _AtmoColor;
                    atmo.a = pow(1.0-saturate(dot(viewdir, i.normal)), _FalloffPlanet);
                    atmo.a *= _TransparencyPlanet*_Color;
               
                    float4 color = tex2D(_MainTex, i.texcoord)*_Color;
                    color.rgb = lerp(color.rgb, atmo.rgb, atmo.a);
               
                    return color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);
                }
            ENDCG
        }
   
        Pass
        {
            Name "AtmosphereBase"
            Tags {"LightMode" = "Always"}
            Cull Front
            Blend SrcAlpha One
           
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
               
                #pragma fragmentoption ARB_fog_exp2
                #pragma fragmentoption ARB_precision_hint_fastest
               
                #include "UnityCG.cginc"
               
                uniform float4 _Color;
                uniform float4 _AtmoColor;
                uniform float _Size;
                uniform float _Falloff;
                uniform float _Transparency;
               
                struct v2f
                {
                    float4 pos : SV_POSITION;
                    float3 normal : TEXCOORD0;
                    float3 worldvertpos : TEXCOORD1;
                };

                v2f vert(appdata_base v)
                {
                    v2f o;
                   
                    v.vertex.xyz += v.normal*_Size;
                    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                    o.normal = v.normal;
                    o.worldvertpos = mul(_Object2World, v.vertex);
                   
                    return o;
                }
              
                float4 frag(v2f i) : COLOR
                {
                    i.normal = normalize(i.normal);
                    float3 viewdir = normalize(i.worldvertpos-_WorldSpaceCameraPos);
                   
                    float4 color = _AtmoColor;
                    color.a = pow(saturate(dot(viewdir, i.normal)), _Falloff);
                    color.a *= _Transparency*_Color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);
                    return color;
                }
            ENDCG
        }
    }
   
    FallBack "Diffuse"
}
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 11:05   #606
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений
(для 64 пользователей)
Ответ: Вопросы от новичка

И еще один вопрос. Вот скрипт: http://pastebin.com/ym0jxeHx.
Вроде все правильно. В первый раз местами кубы меняются. А при попытке снова поменять местами кубы выскакивает ошибка якобы я удалил нужный объект и его нет, но на самом деле он есть. (MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.)

Ругается на строчку GameObject gem = (GameObject)Instantiate(grid[i, j]);
Миниатюры
Нажмите на изображение для увеличения
Название: Unity 2012-08-25 12-26-34-25.jpg
Просмотров: 1014
Размер:	41.5 Кб
ID:	17498  Нажмите на изображение для увеличения
Название: Unity 2012-08-25 12-26-39-92.jpg
Просмотров: 1010
Размер:	68.8 Кб
ID:	17499  Нажмите на изображение для увеличения
Название: Unity 2012-08-25 12-26-51-59.jpg
Просмотров: 1043
Размер:	19.3 Кб
ID:	17500  
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 16:42   #607
Radnk
ПроЭктировщик
 
Аватар для Radnk
 
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений
(для 54 пользователей)
Ответ: Вопросы от новичка

Что лучше одна большая модель или много маленьких?
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 18:15   #608
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

много моделей - много дравколлов. хотя совсем мелкие модели сбатчатся, если материал один. но на это тоже время уйдет.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Radnk (25.08.2012)
Старый 25.08.2012, 18:35   #609
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений
(для 64 пользователей)
Ответ: Вопросы от новичка

Кто нить сможет помочь с моей проблемой?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 1129
Размер:	142.8 Кб
ID:	17501  
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 22:12   #610
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Сообщение от WISHMASTER35 Посмотреть сообщение
pax, вот именно что я не пойму как в инспекторе изменить поле, чтобы при нажатии на него было не редактирование строки, а выподал список методов скрипта. но как я понимаю такое не сделать.
Элементарно:
using UnityEngine;

public class 
MethodsExample MonoBehaviour
{
    public 
string messageName "";

    
void Start()
    {

    }

    
void Update()
    {

    }

using System.Reflection;
using UnityEditor;
using UnityEngine;

[
CustomEditor(typeof(MethodsExample))]
public class 
MethodsExampleEditor Editor
{
    public 
override void OnInspectorGUI()
    {
        var 
obj = (MethodsExampletarget;

        
GUILayout.BeginHorizontal();
        
GUILayout.Label("Message");
        if (
GUILayout.Button(obj.messageName??""GUI.skin.textField))
        {
            var 
menu = new GenericMenu();

            foreach (var 
methodInfo in typeof(MethodsExample).GetMethods(
                
BindingFlags.Instance BindingFlags.Public | BindingFlags.NonPublic BindingFlags.DeclaredOnly))
            {
                var 
methodName methodInfo.Name;
                
menu.AddItem(new GUIContent(methodName), false, () => obj.messageName methodName);
            }

            
menu.ShowAsContext();
        }
        
GUILayout.EndHorizontal();
    }

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 26.08.2012, 17:16   #611
cahekp
Разработчик
 
Аватар для cahekp
 
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений
(для 883 пользователей)
Ответ: Вопросы от новичка

Сообщение от pie Посмотреть сообщение
Кто нить сможет помочь с моей проблемой?
А в чем, собственно, проблема?

Кольца должны всегда быть перпендикулярны камере?
__________________
(Offline)
 
Ответить с цитированием
Старый 26.08.2012, 20:04   #612
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Сообщение от cahekp Посмотреть сообщение
А в чем, собственно, проблема?
Проблема решена по аське.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 29.08.2012, 17:50   #613
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

pax, вот будят у меня куча скриптов, которые посылают по несколько сообщений. мне тогда для каждого скрипта делать Editor?
[System.Serializable]
public class SignalSender {
	
	public bool onlyOnce;
	public ReceiverItem[] receivers;
	private bool hasFired = false;

	
	public void SendSignals(MonoBehaviour sender) {
		if (hasFired == false || onlyOnce == false) {
			foreach(ReceiverItem receiver in receivers) {
				receiver.Send(sender);
			}
			hasFired = true;
		}
	}
	
}

[System.Serializable]
public class ReceiverItem {
	public GameObject receiver;
	public string action = "OnSignal";
	
	public void Send(MonoBehaviour sender) {
		if (receiver)
			receiver.SendMessage(action);
		else
			Debug.LogWarning("No receiver of signal \""+action+"\" on object "+sender.name+" ("+sender.GetType().Name+")", sender);
	}
}
Вот если бы для этого ReceiverItem сделать Editor, то можно было бы во всех скриптах использовать SignalSender и не делать больше Editor'ов.
(Offline)
 
Ответить с цитированием
Старый 29.08.2012, 18:05   #614
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Ты говорил про невозможность, я тебе показал что это возможно. Лень скрипты (эдиторы) писать? Так и скажи.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 29.08.2012, 19:42   #615
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Как создать инспектор для одного скрипта я знаю. Я имел ввиду как изменить поле для своего типа во всех скриптах. Либо изменить инспектор для простого класса как тот ReceiverItem.
Если бы твой пример изменял дефолтный инспектор для ВСЕХ скриптов, то еще было бы нормально.

Лень скрипты (эдиторы) писать? Так и скажи.
Если таких скриптов будет больше, чем пальцев на руку, то у меня конечно мало желания писать еще для каждого Editor'ы, а эти редакторы еще настраивать\перенастраивать при добавлении\удалении такого string messageName.
Я хотел более\менее универсальный способ.
кстати, впервые вижу такие конструкции
obj.messageName??""
() => obj.messageName = methodName
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com