forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

Andvrok 02.03.2011 08:58

Ответ: Фак по Юнити.
 
По первому вопросу разобрался, спасибо.

По второму:
Код:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnTriggerStay(Collider other) {
        if (other.attachedRigidbody)
            other.attachedRigidbody.AddForce(Vector3.up * 10);
       
    }
}

А если у меня коллайдер не ригидбоди?

pax 02.03.2011 10:19

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Andvrok (Сообщение 181117)
А если у меня коллайдер не ригидбоди?

В функцию передается коллайдер, находящийся в триггере, по нему можно получить GameObject или другой компонент этого объекта. Вот с ними и выполняйте операцию снижения здоровья.

Справка для примера, в ней что-то типа эффекта воздушной подушки или вентилятора вверх описано. Это не значит, что надо делать все как в примере.

Andvrok 02.03.2011 15:19

Ответ: Фак по Юнити.
 
Опробовал способ с OnTriggerStay - ничего не получилось. Для проверки кода создал сферу-триггер, прицепил ей тот же скрипт - все работает как надо. Видимо для партиклов нужен особый подход..

pax 02.03.2011 15:36

Ответ: Фак по Юнити.
 
Ну все правильно, ставь объект пустышку со сферическим коллайдером в место костра и все. Это истинный путь джедая )

Andvrok 02.03.2011 15:39

Ответ: Фак по Юнити.
 
Повесил на партиклы скрипт
Код:

public GameObject go;

        void Start () {
                Instantiate(go,transform.position,transform.rotation);
        }

Вроде работает :)

Новый вопрос теперь: как перемещать партиклы?

pax 02.03.2011 18:05

Ответ: Фак по Юнити.
 
Ну у каждого GO есть трансформ, если менять его позицию (transform.position) то объект будет перемещаться в пространстве...

Andvrok 02.03.2011 22:14

Ответ: Фак по Юнити.
 
Если бы все было так просто, я бы не спршивал :( Пытаюсь перемещать с помощью transform.Translate - результат нулевой.

pax 02.03.2011 22:16

Ответ: Фак по Юнити.
 
Все достаточно просто. Скрипт перемещения висит на объекте с частицами?

Andvrok 02.03.2011 22:21

Ответ: Фак по Юнити.
 
Не совсем. Частицы создаются инстантиатом со скрипта на игроке, следовательно перемещение тоже там.

Если быть точнее - нужно реализовать 'фаерболл', создающийся инстантиатом в префабе игроке и летящий по форварду, правда как реализовать в таком случае обработку коллизии фаерболла со стеной я в непонятках :(

Пробовал разобрать на примере РПГ с некоторого примера, но там создается ригидбоди, а партиклы создаются уже при столкновении, но не делать же фаерболл ригидбодом?

Ригидбоди то можно толкнуть силой :(

pax 02.03.2011 22:27

Ответ: Фак по Юнити.
 
Столкновения можно посчитать кастом. Все еще не вижу проблем. Вешайте скрипт перемещения на партиклы, туда же скрипт проверки столкновений. Лучше это в один скрипт объединить.

Andvrok 02.03.2011 22:35

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 181200)
Столкновения можно посчитать кастом.

Ссылочку на референс, пожалуйста, что за касты такие.

pax 02.03.2011 22:38

Ответ: Фак по Юнити.
 
Пожалуйста, но можно и поучиться пользоваться справкой и поиском в ней ;)
http://unity3d.com/support/documenta...e/Physics.html
http://unity3d.com/support/documenta...s.Raycast.html
и другие касты, выбирай, которые лучше подойдут.

Evgen 12.03.2011 14:46

Ответ: Фак по Юнити.
 
Вложений: 1
Возможно ли сделать такой шейдер который заменял бы в текстуре все пикселы определенного цвета (например белого r=255 g=255 b=255) на тот который указан в anyobject.renderer.material.color.

Ну или иначе говоря:
Когда мы меняем цвет через renderer.material.color вся текстура изменяет свой цвет.
А нужно, чтобы цвет изменялся только у былых пикселей.

pax 12.03.2011 14:52

Ответ: Фак по Юнити.
 
самый простой способ - сделать у текстуры альфаканал (если конечно он не используется) и значение альфы использовать для интерполирования цвета от цвета текстуры до указанного цвета. Если альфаканал используется, то можно взять еще одну текстуру, и использовать какой-то ее канал для данной задачи. Писал как-то похожий шейдер:
PHP код:

Shader "Masked/Diffuse" {
    
Properties {
        
_Color ("Color"Color) = (1,1,1,1
        
_MainTex ("Base (RGB)"2D) = "white" {}
        
_Mask ("Mask (Grayscale)"2D) = "black" {}
    }
    
SubShader {
        
Tags "RenderType"="Opaque" }
        
LOD 200
        
        CGPROGRAM
        
#pragma surface surf Lambert

        
sampler2D _MainTex;
        
sampler2D _Mask;
        
float4 _Color;

        
struct Input {
            
float2 uv_MainTex;
            
float2 uv_Mask;
        };

        
void surf (Input INinout SurfaceOutput o) {
            
half4 c tex2D (_MainTexIN.uv_MainTex);
            
float m tex2D (_MaskIN.uv_Mask).r;
            
o.Albedo =  (1-m)*c.rgb m*_Color.rgb;
            
o.Alpha c.a;
        }
        
ENDCG
    

    
FallBack "Diffuse"



Evgen 12.03.2011 15:08

Ответ: Фак по Юнити.
 
Спасибо Pax. Я в шейдерах ничего не смыслю.
А можно что то типа:
if(color=(255,255,255)color=materal.color;
чтобы обойтись без текстуры маски.


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

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