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)

Lestar 26.01.2013 02:58

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

Andvrok 26.01.2013 03:00

Ответ: Фак по Юнити.
 
Ну я передаю координаты в OnSerializeNetworkView(), этого недостаточно? Самое интересное то, что в редакторе всё работает без ошибок.

Lestar 26.01.2013 03:43

Ответ: Фак по Юнити.
 
Достаточно. Передаешь и читаешь?

Andvrok 26.01.2013 03:51

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

Andvrok 11.02.2013 05:49

Ответ: Фак по Юнити.
 
Уважаемые гуру юнити, и с# в частности. Ни у кого нет желания написать краткий фак по андроиду, либо перевести яваскрипты с standart mobile assets на си-шарп и прокоментировать? Нет, перевести с явы на си-шарп я и сам могу, но хотелось бы разобраться полностью в особенностях написания приложения для смартфона. Курение мануалов даётся со скрипом. Был бы весьма признателен, да и в копилке уроков не помешало бы.

burovalex 21.02.2013 23:06

Ответ: Фак по Юнити.
 
Начал писать LOD, блин, я начинаю влюбляться в юнити, знаю 5% движка, а уже чтото получается )
Написал 3-х ступенчатый LOD, конечно дорабатывать еще надо, но не сегодня (поздновато)

PHP код:

using UnityEngine;
using System.Collections;

public class 
LOD MonoBehaviour {
    public 
Mesh meshHiPolymeshMidPolymeshLowPoly;
    public 
int lodLevelcurrentLodLevel;
    public 
float distanceHiPolydistanceMidPoly;
    public 
float distance;
    public 
Camera thisCamera;
    
// Use this for initialization
void Start () 
    {
    if (
meshHiPoly!=null) {lodLevel++;} 
    if (
meshMidPoly!=null) {lodLevel++;}
    if (
meshLowPoly!=null) {lodLevel++;}
    
//защита от криворукости )
    
if (lodLevel==&& meshLowPoly!=null) {meshMidPoly=meshLowPolymeshLowPoly=null;}
    if (
lodLevel==&& meshLowPoly!=null) {meshHiPoly=meshLowPolymeshLowPoly=null;}
    if (
lodLevel==&& meshMidPoly!=null) {meshHiPoly=meshMidPolymeshMidPoly=null;}    
    
thisCamera Camera.main;
    }
    
    
// Update is called once per frame
void Update () 
    {
    
distance Vector3.Distance(transform.position,thisCamera.transform.position);
    if (
distance<distanceHiPoly && currentLodLevel!=1)
        {
        
currentLodLevel=1;
        
GetComponent<MeshFilter>().mesh meshHiPoly;
        }
    if (
distance<distanceMidPoly && distance>distanceHiPoly && currentLodLevel!=2)
        {
        
currentLodLevel=2;
        
GetComponent<MeshFilter>().mesh meshMidPoly;
        }
    if (
distance>distanceMidPoly && currentLodLevel!=3)
        {
        
currentLodLevel=3;
        
GetComponent<MeshFilter>().mesh meshLowPoly;
        }
    }



Сделал чтобы пользователь ложил меши сам, но косяк в том, что материалы должны быть разные.
Наверное самый простой вариант это префабы ложить?
И еще вопрос, как можно сделать такой же скроллер дистанций как в Про версии LOD'a ?
А еще как можно достать уровень графики, ну чтобы знать fantastic она или normal..?

Также, если у меня чтото сильно коряво, пишите!

pax 21.02.2013 23:24

Ответ: Фак по Юнити.
 
1. Материал назначить renderer.sharedMaterial = myMaterial;
2. Для того чтобы написать скроллер надо писать кастомный редактор своего скрипта (компонента).
3. http://docs.unity3d.com/Documentatio...lityLevel.html

burovalex 22.02.2013 09:34

Ответ: Фак по Юнити.
 
Вложений: 1
Вопрос появился, по поводу маски, но нарыл ответ, опять же спасибо тебе )
Нашел в одном ответе ты дал ссылку на шейдер маски, вот только там очень не хватает выбора основного цвета. У меня текстуры почти одинаковым цветом.
Помои плиз, можно же как то палитру туда загнать, как например в диффузе, я бы сам с удовольствием сделал, но до CG мне еще очень далеко, я немного только в HLSL работал.

Сам шейдер

PHP код:

Shader "MaskedTexture"
{
   
Properties
   
{
      
_MainTex ("Base (RGB)"2D) = "white" {}
      
_Mask ("Culling Mask"2D) = "white" {}
      
_Cutoff ("Alpha cutoff"Range (0,1)) = 0.1
   
}
   
SubShader
   
{
      
Tags {"Queue"="Transparent"}
      
Lighting Off
      ZWrite Off
      Blend SrcAlpha OneMinusSrcAlpha
      AlphaTest GEqual 
[_Cutoff]
      
Pass
      
{
         
SetTexture [_Mask] {combine texture}
         
SetTexture [_MainTex] {combine textureprevious}
      }
   }



Я понимаю что там надо считать _MainTex c инспектора, но как...
Нашел как пипетку вставить, _Color ("Main Color", Color) = (1,1,1,1)
А вот как сделать связь не могу найти

pax 22.02.2013 09:59

Ответ: Фак по Юнити.
 
В этом шейдере нет CG, тут чистый ShaderLab и следовательно это Fixed Function (OpenGL ES 1.1)

PHP код:

Shader "MaskedTexture"
{
   
Properties
   
{
      
_Color ("Main Color"Color) = (1,1,1,1)
      
_MainTex ("Base (RGB)"2D) = "white" {}
      
_Mask ("Culling Mask"2D) = "white" {}
      
_Cutoff ("Alpha cutoff"Range (0,1)) = 0.1
   
}
   
SubShader
   
{
      
Tags {"Queue"="Transparent"}
      
Lighting Off
      ZWrite Off
      Blend SrcAlpha OneMinusSrcAlpha
      AlphaTest GEqual 
[_Cutoff]
      
Pass
      
{
         
SetTexture [_Mask
         {
             
constantColor [_Color]
             
combine texture constant DOUBLE
         
}
         
SetTexture [_MainTex] {combine textureprevious}
      }
   }


DOUBLE можешь убрать если не нравится

UPD: Хотя я тут вероятно ошибся... а может и будет работать, я вроде маску покрасил и с ней скомбинировал... попробуй

burovalex 22.02.2013 10:59

Ответ: Фак по Юнити.
 
Вложений: 1
СПАСИБО ПАКС!!
Цитата:

UPD: Хотя я тут вероятно ошибся... а может и будет работать, я вроде маску покрасил и с ней скомбинировал... попробуй
Да фигня, главное суть ясна )
Сделал две версии шейдера

MaskedTexture

PHP код:

Shader "MaskedTexture"
{
   
Properties
   
{
         
_Color ("Main Color"Color) = (1,1,1,1)
      
_MainTex ("Base (RGB)"2D) = "white" {}
      
_Mask ("Culling Mask"2D) = "black" {}
      
_Cutoff ("Alpha cutoff"Range (0,1)) = 0.1
   
}
   
SubShader
   
{
      
Tags {"Queue"="Transparent"}
      
Lighting Off
      ZWrite Off
      Blend SrcAlpha OneMinusSrcAlpha
      AlphaTest GEqual 
[_Cutoff]
      
Pass
      
{
         
SetTexture [_Mask
             {
             
constantColor [_ColorMask]
             }
         
SetTexture [_MainTex
             { 
             
constantColor [_Color
             
combine texture constantprevious
             
}
      }
   }





MaskedTexture Fast

PHP код:

Shader "MaskedTexture Fast"
{
   
Properties
   
{
   
_Color ("Main Color"Color) = (1,1,1,1)
      
_MainTex ("Base (RGB)"2D) = "white" {}
      
_Mask ("Culling Mask"2D) = "black" {}
      
_Cutoff ("Alpha cutoff"Range (0,1)) = 0.1
   
}
   
SubShader
   
{
      
Tags {"Queue"="Transparent"}
      
Lighting Off
      ZWrite On
      AlphaTest GEqual 
[_Cutoff]
      
Pass
      
{
         
SetTexture [_Mask
             {
             
constantColor [_ColorMask]
             }
         
SetTexture [_MainTex
             { 
             
constantColor [_Color
             
combine texture constantprevious
             
}
      }
   }




Расскажу в чем разница, в втором варианте я оставил включенном Z-буффер и отключил альфа смешивание Blend SrcAlpha OneMinusSrcAlpha. На сколько я понимаю, таким образом должно работать быстрее, если нет, сообщите.

Слева на рисунке фаст, разница не большая, а при использовании на большом расстоянии вообще остуствует.

pax 22.02.2013 11:53

Ответ: Фак по Юнити.
 
Там вероятно я недописал во второй SetTexture
PHP код:

SetTexture [_MainTex] {combine texture previousprevious

т.е. вероятно правильно вот так
PHP код:

Shader "MaskedTexture"
{
   
Properties
   
{
      
_Color ("Main Color"Color) = (1,1,1,1)
      
_MainTex ("Base (RGB)"2D) = "white" {}
      
_Mask ("Culling Mask"2D) = "white" {}
      
_Cutoff ("Alpha cutoff"Range (0,1)) = 0.1
   
}
   
SubShader
   
{
      
Tags {"Queue"="Transparent"}
      
Lighting Off
      ZWrite Off
      Blend SrcAlpha OneMinusSrcAlpha
      AlphaTest GEqual 
[_Cutoff]
      
Pass
      
{
         
SetTexture [_Mask
         {
             
constantColor [_Color]
             
combine texture constant DOUBLE
         
}
         
SetTexture [_MainTex] {combine texture previousprevious}
      }
   }



burovalex 22.02.2013 13:16

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

PHP код:

using UnityEngine;
using System.Collections;

public class 
LOD MonoBehaviour {
    public 
GameObject prefabHiPolyprefabMidPolyprefabLowPoly;
void Start () 
    {
    
GetComponent<MeshFilter>().mesh prefabHiPoly.GetComponent<MeshFilter>().mesh;
    
GetComponent<Renderer>().material prefabHiPoly.GetComponent<Renderer>().material;


В результате в префабе слетают mesh и material. Что я не так сделал?
В коде я просто беру ссылку меша префаба и ложу в ссылку ГеймОбжекта, и то же самое с материалом.
Их как то надо копировать? А старые компоненты надо зачищать?

pax 22.02.2013 13:20

Ответ: Фак по Юнити.
 
Свойство mesh и material создают новые экземпляры объектов, которые можно менять в рантайме, но обычно это делают над объектами сцены. Для получения ресурсов без ущерба для префаба используй следующее:

PHP код:

using UnityEngine;
using System.Collections;

public class 
LOD MonoBehaviour {
    public 
GameObject prefabHiPolyprefabMidPolyprefabLowPoly;
void Start () 
    {
    
GetComponent<MeshFilter>().sharedMesh prefabHiPoly.GetComponent<MeshFilter>().sharedMesh;
    
GetComponent<Renderer>().sharedMaterial prefabHiPoly.GetComponent<Renderer>().sharedMaterial;



burovalex 22.02.2013 13:34

Ответ: Фак по Юнити.
 
Блин, Паск, ну ты точно Сэнсей!!! ))

burovalex 22.02.2013 16:42

Ответ: Фак по Юнити.
 
Опять встрял и не пойму в чем дело.
Есть два скрипта Plant, Grid. В скрипт Plant я достаю терраин из Grid

PHP код:

public class Grid MonoBehaviour {    
    public  static 
Terrain    thisTerrain;

    
void Awake () {
        
thisTerrain = (Terrain)GetComponent<Terrain>();
}} 

PHP код:

public class Plant MonoBehaviour {
void Start () 
    {
    
transform.position.= (float)Grid.thisTerrain.SampleHeight(transform.position);
}} 

А компилятор кричит что ошибка в строке transform.position.y = (float)Grid.thisTerrain.SampleHeight(transform.pos ition);

error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position'. Consider storing the value in a temporary variable

Якобы во временных переменных косяк. Но переменные то у меня не временные а публичные и thisTerrain еще и статичная

Разобрался, получается что, transfom.position.y может только хранить значение, но ложить туда нельзя??
И что изменить y, на нужное значение самый простое решение transform.position = newVector3(transform.position.x, 10 , transform.position.z); ?? :4to:


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

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