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)

Evgen 27.03.2011 17:17

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

Сообщение от pax (Сообщение 183905)
т.е. как нельзя?

Ну в смысле, размер изменять нельзя (Read Only). По крайней мере я не нашел как поменять размер heightmap.

http://unity3d.com/support/documenta...tmapWidth.html

Цитата:

TerrainData.heightmapWidth
var heightmapWidth : int
Description

Width of the terrain in samples (Read Only).

pax 27.03.2011 19:34

Ответ: Фак по Юнити.
 
Читайте справку внимательнее http://unity3d.com/support/documenta...esolution.html

Pan89 01.05.2011 21:46

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

using UnityEngine;
using System.Collections;

public class WaterMesh : MonoBehaviour {
    private Mesh mesh;
    private Vector3[] vertices;
    private float deltaTime;

    void Start() {
        mesh = GetComponent<MeshFilter>().mesh;
        vertices = mesh.vertices;
        deltaTime = 0.0f;
    }

    void Update() {
        int numberVertex = 0;
        while (numberVertex < vertices.Length) {
            vertices[numberVertex].y = Mathf.Sin(deltaTime + numberVertex);
            numberVertex++;
        }

        deltaTime += Time.deltaTime;
    }
}

Почему такой скрипт не работает?

pax 01.05.2011 21:57

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

Сообщение от Pan89 (Сообщение 187188)
Почему такой скрипт не работает?

Забыл поставить в Update
PHP код:

mesh.vertices vertices


Pan89 01.05.2011 22:21

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

Сообщение от pax (Сообщение 187189)
Забыл поставить в Update
PHP код:

mesh.vertices vertices


Хмм.. Спасибо, помогло.
Но почему именно так работает?

pax 01.05.2011 22:29

Ответ: Фак по Юнити.
 
Потому что ты получил копию массива вершин, чтобы отобразить их - тебе надо их "вернуть". Mesh их снова скопирует себе и проверит в добавок.
В справке же примеры есть: http://unity3d.com/support/documenta...ence/Mesh.html

Pan89 01.05.2011 22:36

Ответ: Фак по Юнити.
 
Буду внимательнее читать документацию.

Nuprahtor 08.06.2011 09:18

Ответ: Фак по Юнити.
 
http://entitycrisis.blogspot.com/201...occlusion.html
Increpare на форуме тигсурса выложил сию ссылку. Фальшивый вертексный эмбиент окклюжн - для настоящих инди-мэнов! (не проверял, но, думаю, должно быть красиво и дешево)

pax 08.06.2011 10:09

Ответ: Фак по Юнити.
 
Красиво будет, если очень много вершин в модели. Для низкополигональных проще использовать лайтмэпу.

SaM_ 16.06.2011 19:11

Ответ: Фак по Юнити.
 
Объясните как пользоваться функцией типа Random. Что бы при определенном действии случайно выбиралась одна из заранее заданных форм. Например, при передвижении игрока, включалась Одна из Нескольких анимаций.

Lestar 16.06.2011 19:23

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

int variable = UnityEngine.Random.Range(0, 5);
switch(variable)
 {
    case 0:
        //играем анимацию 1
    break;
  ..............
      case 5:
        //играем анимацию 6
    break;
  }


SaM_ 18.06.2011 23:58

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

function OnCollisionEnter(collision Collision) {
    for (var 
contact ContactPoint in collision.contacts) {
        
Debug.DrawRay(contact.pointcontact.normalColor.white);
    }
    if (
collision.relativeVelocity.magnitude 0.1)
        
Destroy (gameObject);


В данном случае объект, к которому применен скрипт уничтожается при столкновении с Любым другим телом.
Что изменить, что бы объект уничтожался при с столкновении с Определенным телом?

pax 19.06.2011 02:45

Ответ: Фак по Юнити.
 
Например так:
PHP код:

function OnCollisionEnter(collision Collision) { 
    for (var 
contact ContactPoint in collision.contacts) { 
        
Debug.DrawRay(contact.pointcontact.normalColor.white); 
    } 
    if (
collision.gameObject.Tag == "Player"
        
Destroy (gameObject); 


Игроку надо будет назначить тэг Player и тогда объект будет уничтожен при столкновении с игроком.

SaM_ 19.06.2011 13:35

Ответ: Фак по Юнити.
 
Спасибо, работает. Хотя, мне кажется, что будет лучше, если тег объекта будет с маленькой буквы. У меня скрипт заработал только при таком условии. :dontknow:
Как сделать задержку выполнения действия после столкновения?

pax 19.06.2011 13:36

Ответ: Фак по Юнити.
 
Что-то вроде:
PHP код:

var time float 2;

function 
OnCollisionEnter(collision Collision) { 
    for (var 
contact ContactPoint in collision.contacts) { 
        
Debug.DrawRay(contact.pointcontact.normalColor.white); 
    } 
    if (
collision.gameObject.Tag == "Player"
        
Invoke ("DestroySelf"time ); 
}  

function 
DestroySelf(){
   
Destroy (gameObject); 



SaM_ 19.06.2011 14:26

Ответ: Фак по Юнити.
 
Возник еще один вопрос :rolleyes:

Как поменять значение переменной через определенный промежуток времени после старта? (Использую js)

pax 19.06.2011 14:34

Ответ: Фак по Юнити.
 
Ну очевидно жеж из предыдущего примера:
PHP код:

var time float 2;
var 
mayVar int 1;

function 
Start() { 
    
Invoke ("ChangeValue"time ); 
}  

function 
ChangeValue(){
   
mayVar 2;


или

PHP код:

var time float 2;
var 
mayVar int 1;

function 
Start() { 
    yield 
WaitForSeconds(time);
    
mayVar 2;



Lestar 19.06.2011 14:36

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

var my_TIme float;
var 
my_Variable :float=5;

function 
Update ()
{
   
my_Time=Time.time ;

   if(
my_Time>=30)
    {
       
my_Variable=15
    }


В зависимости от нужды вместо Time.time использовать Time.timeSinceLevelLoad .
P.S. Pax,мне кажется ему еще рановато делегаты использовать :)

SaM_ 19.06.2011 14:58

Ответ: Фак по Юнити.
 
Lestar, я js только вчера начал учить, мне многое еще рано :-)

И все же не могу я разобраться:
PHP код:

var apple Rigidbody;
var 
time :  float;
var 
float 1//Начальное значение переменной "x", как я понял?


function Update ()
{
   
time=Time.timeSinceLevelLoad;

   if(
time>=1)
    {
      
Random.Range(521);
     }
      if(
time>=30)
    {
       
Random.Range(16);
     }
}




InvokeRepeating("LaunchProjectile"2, (x)); //"x" - та самая переменная, обозначающая промежуток между спавнами

function LaunchProjectile () 
{
instance Instantiate(apple,transform.positiontransform.rotation);
instance.velocity transform.TransformDirectionVector300) );




Вот мой скрипт спавна. Что не так? Ибо изменение колва спавнющихся объектов со временем не меняется, хотя игра запускается.

pax 19.06.2011 15:06

Ответ: Фак по Юнити.
 
По приведенному примеру можно сделать так:

PHP код:

var time float 2;
var 
float 1;

function 
Start() { 
    yield 
WaitForSeconds(1);
    
Random.Range(521); 
    yield 
WaitForSeconds(29);
    
Random.Range(16); 


А вообще строка
PHP код:

InvokeRepeating("LaunchProjectile"2, (x)); 

выполняется только один раз

Я бы переписал скрипт так:

PHP код:

var apple Rigidbody;
var 
time :  float;
var 
float 1//Начальное значение переменной "x", как я понял?


function Start() { 
    yield 
WaitForSeconds(1);
    
Random.Range(521); 
    yield 
WaitForSeconds(29);
    
Random.Range(16); 
}  

Invoke("LaunchProjectile"x); //"x" - та самая переменная, обозначающая промежуток между спавнами

function LaunchProjectile () 
{
  
instance Instantiate(apple,transform.positiontransform.rotation);
  
instance.velocity transform.TransformDirectionVector300) );
  
Invoke("LaunchProjectile"x);


Хотя на js это может выглядеть так, я js плохо знаю для unity, лучше C#:
PHP код:

var apple Rigidbody;
var 
time :  float;
var 
float 1//Начальное значение переменной "x", как я понял?

Invoke("LaunchProjectile"x); //"x" - та самая переменная, обозначающая промежуток между спавнами

yield WaitForSeconds(1);
Random.Range(521); 
yield 
WaitForSeconds(29);
Random.Range(16); 

function 
LaunchProjectile () 
{
  
instance Instantiate(apple,transform.positiontransform.rotation);
  
instance.velocity transform.TransformDirectionVector300) );
  
Invoke("LaunchProjectile"x);



Lestar 19.06.2011 15:22

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

var apple Rigidbody;
var 
time :  float;
var 
next_Instans float 0;
var 
float 1

function 
Update ()
{
   
time=Time.timeSinceLevelLoad;

   if(
time<30)
    {
      
Random.Range(521);
    }
     else
    {
       
Random.Range(16);
    }

     if(
time>=next_Instans)
     {
         
LaunchProjectile ();
         
next_Instans+=x;
     }
}

function 
LaunchProjectile () 
{
instance Instantiate(apple,transform.positiontransform.rotation);
instance.velocity transform.TransformDirectionVector300) );


P.S. Не очень красиво,но для новичка будет проще разобраться в алгоритме.Я тоже предпочитаю C# и если начинать,то начинать его учить.

pax 19.06.2011 15:30

Ответ: Фак по Юнити.
 
@Lestar На сколько я понимаю - изменить время инстансирования надо всего два раза - через 1 секунду после старта и через 30.
Код:
PHP код:

if(time>=1
    { 
      
Random.Range(521); 
    } 
      if(
time>=30
    { 
       
Random.Range(16); 
    } 

Вызывает смену времени, записанное в переменную столько раз, сколько кадров пройдет с первой секунды

Lestar 19.06.2011 15:40

Ответ: Фак по Юнити.
 
Немного изменил для красоты код.
@Pax,а я так понял,что до 30 секунд рандом между инстансами один,после 30 секунд рандом между инстансами другой.Пускай SaM_ пояснит тогда.

SaM_ 19.06.2011 16:20

Ответ: Фак по Юнити.
 
Lestar, в моем случае переменная "x" обозначает промежуток времени между спавном. Не важно что спавнится - но чем этого больше, тем сложней играть. То есть промежуток между спавнами может быть от 5 до 20. Через 30 секунд уровень сложности повышается и промежуток может быть от 1 до 5. Как-то так. :)

Кстати, огромное спасибо за помощь. На других форумах обычно молчат или кричат, что вопросы глупые. :crazy:

pax 19.06.2011 16:24

Ответ: Фак по Юнити.
 
Тогда я бы предложил такой вариант:
PHP код:

var apple Rigidbody;
var 
time :  float;
var 
float 1//Начальное значение переменной "x", как я понял?

Invoke("LaunchProjectile"x); 

function 
LaunchProjectile () 
{
  
instance Instantiate(apple,transform.positiontransform.rotation);
  
instance.velocity transform.TransformDirectionVector300) );
  if(
Time.timeSinceLevelLoad <30)
     
Invoke("LaunchProjectile"Random.Range(521));
  else
     
Invoke("LaunchProjectile"Random.Range(16));



Lestar 19.06.2011 16:26

Ответ: Фак по Юнити.
 
Что такое x я вижу.Вопрос в том,она рандомно генедиться до и после 30-ти секунд по одному разу или нет.То есть следующий инстанс будет через тот же промежуток времени или генерим х снова.

SaM_ 19.06.2011 16:26

Ответ: Фак по Юнити.
 
pax, твой последний способ не очень подойдет, ибо:
PHP код:

var apple Rigidbody;
var 
time :  float;
var 
next_Instans float 0;
var 
float 1

function 
Update ()
{
   
time=Time.timeSinceLevelLoad;



   if(
time>=1)
    {
      
Random.Range(0.0141);
    }
    
       if(
time>=30)
    {
      
Random.Range(0.0131);
    }

      if(
time>=60)
    {
       
Random.Range(0.0121);
    }
    
          if(
time>=180)
    {
       
Random.Range(0.0116);
       }
         if(
time>=300)
    {
       
Random.Range(0.0111);
       }
       
          if(
time>=420)
    {
       
Random.Range(0.016);
    }
    
          if(
time>=480)
    {
       
Random.Range(0.013);
    }
    



     if(
time>=next_Instans)
     {
         
LaunchProjectile ();
         
next_Instans+=x;
     }
}

function 
LaunchProjectile () 
{
instance Instantiate(apple,transform.positiontransform.rotation);
instance.velocity transform.TransformDirectionVector300) );



pax 19.06.2011 16:29

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

SaM_ 19.06.2011 16:31

Ответ: Фак по Юнити.
 
И что в итоге выйдет? Как это будет выглядеть в игре? Что-то не пойму. Уже потестил - вроде нормально.

pax 19.06.2011 16:32

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

pax 19.06.2011 16:37

Ответ: Фак по Юнити.
 
Вот еще пример:
PHP код:

var apple Rigidbody;
var 
time :  float;
var 
float 1//Начальное значение переменной "x", как я понял?

Invoke("LaunchProjectile"x); 

function 
LaunchProjectile () 
{
  
instance Instantiate(apple,transform.positiontransform.rotation);
  
instance.velocity transform.TransformDirectionVector300) );

  
time=Time.timeSinceLevelLoad

  if(
time>=480)
  {
     
Invoke("LaunchProjectile"Random.Range(0.013));
  }
  else if (
time>=420
  { 
     
Invoke("LaunchProjectile"Random.Range(0.016));
  } 
  else if (
time>=300
  { 
     
Invoke("LaunchProjectile"Random.Range(0.0111));
  } 
  else if (
time>=180
  { 
     
Invoke("LaunchProjectile"Random.Range(0.0116));
  } 
  else if (
time>=60
  { 
     
Invoke("LaunchProjectile"Random.Range(0.0121));
  } 
  else if (
time>=30
  { 
     
Invoke("LaunchProjectile"Random.Range(0.0131));
  } 
  else
  {
     
Invoke("LaunchProjectile"Random.Range(0.0141));
  }



SaM_ 19.06.2011 20:26

Ответ: Фак по Юнити.
 
В бесплатной версии Unity возможно как-то реализовать динамическую тень? Может скрипт есть какой нибудь?

pax 19.06.2011 20:34

Ответ: Фак по Юнити.
 
Нет, только фейковую.

Lestar 19.06.2011 22:12

Ответ: Фак по Юнити.
 
http://www.youtube.com/watch?v=e7NUXuyHv6E

L-ee-X 20.06.2011 16:41

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

Сообщение от SaM_ (Сообщение 192209)
Lestar, я js только вчера начал учить, мне многое еще рано :-)

И все же не могу я разобраться:
PHP код:

var apple Rigidbody;
var 
time :  float;
var 
float 1//Начальное значение переменной "x", как я понял?


function Update ()
{
   
time=Time.timeSinceLevelLoad;

   if(
time>=1)
    {
      
Random.Range(521);
     }
      if(
time>=30)
    {
       
Random.Range(16);
     }
}




InvokeRepeating("LaunchProjectile"2, (x)); //"x" - та самая переменная, обозначающая промежуток между спавнами

function LaunchProjectile () 
{
instance Instantiate(apple,transform.positiontransform.rotation);
instance.velocity transform.TransformDirectionVector300) );




Вот мой скрипт спавна. Что не так? Ибо изменение колва спавнющихся объектов со временем не меняется, хотя игра запускается.

Если ты его только начал изучать, то мне кажется, что до программирования игр, а тем более на Unity3D еще далеко... Подучи синтаксис языка, научись работать с классами, объектами, полями и т. д. Только потом садись за Unity3D, и только тогда не будешь задавать глупых вопросов... В Unity3D очень хорошая справка, достаточно только уметь обращаться с ООП и Unity для тебя станет раем ;) Дерзай ;)

is.SarCasm 23.06.2011 20:13

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

var mycamera:GameObject;
var Distance=10;
function Update () {
mycamera.transform.position.y = transform.position.y + Mathf.Sin(mycamera.transform.rotation.x)* Distance;
mycamera.transform.position.z = transform.position.z + Mathf.Cos(mycamera.transform.rotation.x)* -Distance;
}
По сути работает правильно. ТО ест ькамера движется как нода и дистанция соблюдается, но какого то хера время от времени меняется знак О_О
То есть например сначало при 30 градусах камера идёт вверх, а потом при 30 идет вниз. Короче загрузите, посмотрите

pax 23.06.2011 21:31

Ответ: Фак по Юнити.
 
Зачем так кричать? :)
PHP код:

var mycamera:GameObject;
var 
Distance=10;
function 
Update () {
mycamera.transform.position.transform.position.Mathf.Sin(mycamera.transform.rotation.Mathf.Deg2Rad)* Distance;
mycamera.transform.position.transform.position.Mathf.Cos(mycamera.transform.rotation.Mathf.Deg2Rad)* -Distance;



is.SarCasm 23.06.2011 22:37

Ответ: Фак по Юнити.
 
а ты сам пробувал что получилось? Теперь камера вообще стоит на месте, потому что результать произвидения: mycamera.transform.rotation.x * Mathf.Deg2Rad = 0.000**
я говорю о том что камера сначала двигается как надо (смотриш вниз = идеш вверх), а потом наоборот (смотриш вниз = идеш вниз) и сменяют они лруг друга постоянно по хрен знает какой причине

Lestar 23.06.2011 22:55

Ответ: Фак по Юнити.
 
Ты к Vector3 прибавляешь Quaternion .Это верно?

P.S.Сплю,проехали.

pax 24.06.2011 04:23

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

Сообщение от is.SarCasm (Сообщение 192843)
а ты сам пробувал что получилось?

Нет, потому что задача не описана, какой вопрос, такой и ответ. Я посчитал что ты используешь градусы, вместо радиан, а на самом деле, ты использовал компонент кватерниона (как написали выше), который не несет полезной информации о повороте отдельно.

Комментарии:

1. Что такое нода?
2. Использование компоненты кватерниона бессмысленно.
3. Использовать даже компоненту transform.eulerAngles.x было бы не правильно, так как ее значение может прыгать (прыгает в зависимости от общего поворота модели), это не тоже самое что и в блице или 3ds max. Возможно угол стоит вручную считать для данной задачи (неизвестно какой).
4. Использовать в функциях Mathf.Sin/Mathf.Cos/и т.д. нужно радианы, а transform.eulerAngles возвращает градусы (Quaternion возвращает неизвестно что), т.е. transform.eulerAngles.x * Mathf.Deg2Rad.
5. В качестве mycamera в данном случае можно использовать переменную var mycamera:Transform, тогда отпадет надобность получать трансформ камеры каждый раз, т.к. это немного медленная операция.

Если исправить на использование "правильного" угла, то скрипт мог бы выглядеть так:
PHP код:

var mycamera:Transform;
var 
Distance=10;
function 
Update () {
var 
mycamera.eulerAngles.Mathf.Deg2Rad;
mycamera.position.transform.position.Mathf.Sin(x)* Distance;
mycamera.position.transform.position.Mathf.Cos(x)* -Distance;


Но вероятность, что камера иногда будет скакать остается.

is.SarCasm 24.06.2011 10:29

Ответ: Фак по Юнити.
 
Спасибо, понятия не имел что мне возвращают квате...ны
Ну тогда в скрипте поворота камеры считать "отдельно" градусы.
А как может зависеть один угол от другово?

Taugeshtu 24.06.2011 14:37

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

А как может зависеть один угол от другово?
Если повернуть объект на 180 градусов по оси Y, потом ещё на 90 по оси X, то вполне возможно что юнити пересчитает углы поворота в более удобное для человека представление (может оказаться, что это то же самое, что 0, 0, -90; в коде я с таким не сталкивался, а вот в редакторе - полно такого)

pax 24.06.2011 14:42

Ответ: Фак по Юнити.
 
Это из-за процесса конвертации Quaternion => EulerAngles и обратно.

cahekp 25.06.2011 18:06

Ответ: Фак по Юнити.
 
Привет всем.

Изучал сегодня postprocess эффекты для Юнити, посмотрел на Grayscale Image Effect, и вдруг я подумал... Помните "Город грехов"? Там была такая стильная черная-белая картинка с ярко-выраженными красными объектами...

Так вот, можно ли дополнить этот эффект, чтобы он не действовал на объекты с определенными, допустим, тегами? То есть, например, задаем какому-нибудь объекту (допустим, красному галстуку) тэг "AlwaysColored", и всё, Grayscale Image Effect больше не обесцвечивает этот объект, он всегда остается красным галстуком. Вот.

Nuprahtor 25.06.2011 18:08

Ответ: Фак по Юнити.
 
Зачем я прочитал предыдущее сообщение :(

Nuprahtor 25.06.2011 19:04

Ответ: Фак по Юнити.
 
А по теме - вот ссылки для размышления. Не проверял.
http://forum.unity3d.com/threads/890...TY-SHADER-quot
http://answers.unity3d.com/questions...one-color.html

cahekp 26.06.2011 20:23

Ответ: Фак по Юнити.
 
Ага, отлично.
Решил, что подобный эффект можно сделать двумя камерами. Первая рендерит всё без, допустим, "красных объектов", а вторая - только "красные" (такие объекты лежат на отдельном слое, контролирую через "Culling Mask"). "Clear Flags" у второй камеры - "Don't Clear". Depth значения первой и второй камеры - 1 и 2 соответственно. Всё хорошо.
Но!

1) Если к первой камере применить "Grayscale Image Effect", а вторую отключить - увидим только серую часть изображения. Отлично, так и должно быть, эффект работает. Но если включить вторую, то вся серость куда-то пропадает. Пост-процесс эффект для первой камеры не выполняется. Нехорошо это. Почему так происходит?

2) Ладно, допустим, пост-процесс эффекты выполняются только для последней по Depth значению камеры, если они лежат ровно "друг на друге". Хорошо. Тогда рендер первой камеры вместе со всеми наложенными на нее эффектами можно запихнуть в "Target Texture". Вопрос: как эту текстуру можно использовать в качестве бэкграунда для второй камеры? Или можно решить это дело другим путем?

3) И последнее: как в Юнити можно оперировать с буфером глубины? Можно ли перекинуть буфер глубины с одной камеры на буфер глубины другой?

4) Ну и самое последнее: как бы Вы делали подобный эффект (с условием, конечно, что все текстуры - цветные)?

Taugeshtu 26.06.2011 21:02

Ответ: Фак по Юнити.
 
Если не ошибаюсь, где-то в Clear Flags или нердах настройки камеры есть свистелка, которая включает запись буфера глубины для RenderTexture - остаётся убедиться, что грейскейл его не похерит, и отрисовать цветное второй камерой.

cahekp 27.06.2011 20:05

Ответ: Фак по Юнити.
 
to Taugeshtu: нашел свистелку, которая переключает буфер рендера (или как там правильно) на буфер глубины.
Вот она: myRenderTexture.format = RenderTextureFormat.Depth;

Всё работает, грейскейл не мешает. Но как мне теперь применить этот буфер ко второй камере?
Неужели придется писать отдельный шейдер, который будет смешивать 2 текстуры глубины с двумя текстурами рендера? Это мне что, как минимум 4 камеры нужно иметь? Что-то слишком уж накладно. :)

Может все-таки есть более простой путь?

SBJoker 27.06.2011 20:35

Ответ: Фак по Юнити.
 
Обычно на шейдерах пишут постэффект который обесцвечивает картинку везде кроме как на отмеченных объектах.

cahekp 27.06.2011 20:58

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

Как создать маску, по которой будет работать шейдер?

SBJoker 27.06.2011 21:14

Ответ: Фак по Юнити.
 
Юзайте шейдер в материале... отрисовывая объект он будет этот избранный объект обесцвечивать.

Taugeshtu 27.06.2011 21:15

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

Как создать маску, по которой будет работать шейдер?
Рендер с shaderReplacement. Пишешь шейдер, который рисует чёрный или белый в зависимости от флага; флаги шейдеров на объектах ставит скрипт, который делает эту маску (по тегу)

Nuprahtor 27.06.2011 21:50

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

Юзайте шейдер в материале... отрисовывая объект он будет этот избранный объект обесцвечивать.
Вот это хороший совет. При таком подходе без RTT и производительность будет выше

SaM_ 02.07.2011 20:47

Ответ: Фак по Юнити.
 
Думаю всем известна демка на офф сайте Unity, где пчела летит средь растений и деревьев. Как реализовать такую фокусировку камеры, что бы объекты на заднем плане мутнели, а один предмет выделялся?

Lestar 02.07.2011 22:06

Ответ: Фак по Юнити.
 
http://unity3d.ru/distribution/viewt...8%D0%B5#p13342

ARA 02.07.2011 22:41

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

Сообщение от SaM_ (Сообщение 194007)
Думаю всем известна демка на офф сайте Unity, где пчела летит средь растений и деревьев. Как реализовать такую фокусировку камеры, что бы объекты на заднем плане мутнели, а один предмет выделялся?

Aperture DOF называется. Судя по видео, в юнити он есть/будет встроен.
http://blogs.unity3d.com/2011/06/08/...ng-for-mobile/

SaM_ 04.07.2011 14:35

Ответ: Фак по Юнити.
 
Решил побаловтся с lightmap.
Выбрал шейдер "Legacy Shaders/Lighmapped/Specular". С тенями все отлично, но "specular" не выполняет свою задачу, то есть не отражает свет как раньше. В чем может быть проблема?

Fatalix3d 04.07.2011 20:55

Ответ: Фак по Юнити.
 
LightMap beast'om пек?

SaM_ 04.07.2011 22:59

Ответ: Фак по Юнити.
 
С lightmap вопрос решен, вот исправленный шейдер:
PHP код:

Shader "Legacy Shaders/Lightmapped/Gnoblin/BumpedSpec" {
Properties {
        
_Color ("Main Color"Color) = (1,1,1,1)
    
_SpecColor ("Specular Color"Color) = (0.50.50.51)
    
_Shininess ("Shininess"Range (0.031)) = 0.078125
        _MainTex 
("Base (RGB)"2D) = "white" {}
        
_BumpMap ("Normalmap"2D) = "bump" {}
    
_LightMap ("Lightmap (RGB)"2D) = "black" {}
}

SubShader {
        
LOD 200
        Tags 
"RenderType" "Opaque" }
CGPROGRAM
#pragma surface surf BlinnPhong
struct Input {
  
float2 uv_MainTex;
  
float2 uv_BumpMap;
  
float2 uv2_LightMap;
};
sampler2D _MainTex;
sampler2D _LightMap;
sampler2D _BumpMap;
float4 _Color;
float _Shininess;

void surf (Input INinout SurfaceOutput o)
{
  
half4 tex tex2D (_MainTexIN.uv_MainTex);
  
o.Albedo tex.rgb _Color;
  
half4 lm tex2D (_LightMapIN.uv2_LightMap);
  
o.Emission lm.rgb*o.Albedo.rgb;
  
o.Gloss tex.a;
  
o.Alpha lm._Color.a;
  
o.Specular _Shininess;
  
o.Normal UnpackNormal(tex2D(_BumpMapIN.uv_BumpMap));
}
ENDCG
}
FallBack "Legacy Shaders/Lightmapped/VertexLit"



SaM_ 10.07.2011 21:06

Ответ: Фак по Юнити.
 
Как сделать, что бы предмет мог сталкиваться только с одним определенным объектом?

is.SarCasm 12.07.2011 12:58

Ответ: Фак по Юнити.
 
Реально ли использовать DrawLine в редакторе без запуска приложения?

Lestar 12.07.2011 14:06

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

Сообщение от SaM_ (Сообщение 194987)
Как сделать, что бы предмет мог сталкиваться только с одним определенным объектом?

Назначить предмету определенный тег,при столкновении проверять тег,если тег не соответствует
PHP код:

gameObject.collider.isTrigger true

Цитата:

Сообщение от is.SarCasm (Сообщение 195159)
Реально ли использовать DrawLine в редакторе без запуска приложения?

Класс Handles.DrawLine .

Taugeshtu 13.07.2011 00:27

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

Назначить предмету определенный тег,при столкновении проверять тег,если тег не соответствует
Бред. Есть плоскость - статичный коллайдер. Есть 2 ящика на ней. Один подтащили к другому, второй (на котором такой скрипт) начал падать, пока есть пересечение с другим, после чего снова стал коллайдером и куда-то вылетел из плоскости. Или застрял в ней.

Решение: начиная с 3.0 есть маски коллизий. Искать в Edit -> Project settings -> Physics (мог наврать в названиях).


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

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