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 06.08.2011 02:30

Ответ: Фак по Юнити.
 
Можно динамически менять меш колайдер.Но я так подозреваю это выльется в геморой,повышение системных требований и долго и нудно отлавливаемые баги.Тем более что меш коллайдер не всегда работает так как нужно.Я бы эту фичу исключил.

SaM_ 06.08.2011 12:47

Ответ: Фак по Юнити.
 
Как раз таки это не просто фича, я не игру делаю, а именно физику шини, так что исключить не могу :D
Кстати, что за weel collid, это просто круглая пластина?

Lestar 06.08.2011 13:10

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

Сообщение от SaM_ (Сообщение 198224)
Кстати, что за weel collid, это просто круглая пластина?

Коллайдер,учитывающий трение,качение,массу колеса.

SaM_ 06.08.2011 13:17

Ответ: Фак по Юнити.
 
А его возможно как-то растянуть? Что бы он стал полноценным col для колеса.

Lestar 06.08.2011 13:32

Ответ: Фак по Юнити.
 
Есть Car Tutorial официальный.Можно реализацию там посмотреть.Я в работе с колесами не сталкивался.

SaM_ 06.08.2011 16:36

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

Lestar 06.08.2011 21:08

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

#Test 06.08.2011 23:02

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

Сообщение от SaM_ (Сообщение 198249)
Где можно найти какие нибуть уроки по использованию PhysX в Unity?

Можно попробовать полистать форум, может что найдется подходящее

http://unity3d.ru/distribution/viewforum.php?f=89

Также Car Tutorial все-таки глянуть, как сказал Lestar

CarTutorial

SaM_ 06.08.2011 23:09

Ответ: Фак по Юнити.
 
Test, часа 4 подряд по форуму лазил :B Я так понял, разработчики самого Unity там тоже сидят и помогают новичкам.

Как сделать, что бы collider обновлялся постоянно?

Lestar 07.08.2011 00:14

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

var _time;
var 
_timeCalc;
var 
_delta_Time;

function 
Update () 

  
SuperFunk();
}
function 
SuperFunk()
{
  
_delta_Time Time.time _time;
  if (
_delta_Time >= 1)
      {
         
_time Time.time;
         
_timeCalc++;
         if (
_timeCalc%3==0// Вызываем через каждые 3 секунды
          
{
                     
// Тело самого метода
          
}


P.S. Такое ощущение,что выше написанное я для себя писал.Колайдер нельзя обновить.Нужно его дестроить и добавить новый.С меш коллайдером ничего хорошего не выйдет.Нужно делать сложный свой из примитивов.

SaM_ 07.08.2011 00:39

Ответ: Фак по Юнити.
 
А зачем ты ставишь '_' перед названиями переменных? Это дает что-то, или просто?
К сожалению, не очень понял как работает твой скрипт, в моём случае сделал попроще:

PHP код:

if (state == 0) {

    
GetComponent(MeshCollider).sharedMesh mesh
        
state 1;

         
transform.collider.convex true;
       
    }
    if (
state == 1) {
 
    
GetComponent(MeshCollider).sharedMesh mesh
    
state 0;
        
         
transform.collider.convex true;
    
      
    } 

Таки collider Можно обновлять, я заметил это, когда запустив проект перешел на сцену и начал щелкать на настройки collider'a, после каждого их изменения он обновляется.
В данном случае я меняю значения convex, не смотря на то, что везде стоит true, каждый раз, когда эта функция вызывается col обновляется.

Lestar 07.08.2011 00:48

Ответ: Фак по Юнити.
 
Для удобства
PHP код:

_variable  //privat переменные
variable   // public переменные 


SaM_ 07.08.2011 13:40

Ответ: Фак по Юнити.
 
В 3Dmax есть такая функция - smooth.
Можно ли как-то сделать такое в самом Unity?

Lestar 07.08.2011 14:09

Ответ: Фак по Юнити.
 
Сгладить что?
Настройки сглаживания изображения можно выставить в Edit-Project Settings-Quality.

Lestar 07.08.2011 14:13

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

SaM_ 07.08.2011 14:45

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

Lestar 07.08.2011 16:15

Ответ: Фак по Юнити.
 
Использовать шейдер.

SaM_ 08.08.2011 15:10

Ответ: Фак по Юнити.
 
Lestar, никак не могу разобратся с твоим скриптом, почему выдает ошибку???

PHP код:

function Update() {
renderer.enabled true;
var 
mesh MeshMeshRenderer.mesh;
var 
colors Color[] = mesh.colors;

for (var 
i=0;i<colors.Length;i++) 
{
  var 
_color Color colors[i];
  
_color.1.0;  
  
colors[i] = _color;
}
mesh.colors colors;  


Код:

(2,31): BCE0019: 'mesh' is not a member of 'UnityEngine.MeshRenderer'.

Lestar 08.08.2011 16:17

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

mesh Mesh=  MeshFilter.mesh


SaM_ 08.08.2011 16:59

Ответ: Фак по Юнити.
 
А теперь выдает такую ошибку:
Код:

BCE0020: An instance of type 'UnityEngine.MeshFilter' is required to access non static member 'mesh'.
Попробовал перед 'var' дописать 'static' - та же ошибка :C

Lestar 08.08.2011 17:31

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

m_Filter :MeshFilter  gameObject.GetComponent(MeshFilter);
mesh Mesh=  m_Filter.mesh

В конце логики не забыть добавить
PHP код:

m_Filter.mesh=mesh

P.S.Я даю логику,а не готовое решение.

IGR 17.08.2011 12:32

Ответ: Фак по Юнити.
 
у мя тут вопросик по ригидбоди !!

вообщем мне нужно постоянно вращять объект с ригидбоди с вкл. гравитацией вокруг оси допустим У !!
пробовал transform.Rotate и rigidbody.MoveRotation !!
transform.Rotate - вообще не вращяется,
rigidbody.MoveRotation - вращяется, но как только достиг земли (под действием гравитации) перестает вращение (т.е. как бы нет трения, а стоит фиксировано)
есче было бы неплохо сделать (если возможно), допустим я его швырнул с помощью компонента drag rigidbody то что бы в полете, когда он крутится и меняет положение. он еще дополнительно и крутился по своей оси У !!
надейсь понятно написал !!
подскажите куда копать !!

Lestar 18.08.2011 02:47

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

Сообщение от IGR (Сообщение 199144)
вообщем мне нужно постоянно вращять объект с ригидбоди с вкл. гравитацией вокруг оси допустим У !!

Ригидбоди повесить на думик.Обьект чалдом к думику и вращать.

Andvrok 10.10.2011 08:53

Ответ: Фак по Юнити.
 
Вопрос: если залить туманом все окружающее пространство, как сделать определенный объект видимым сквозь него?

Lestar 10.10.2011 12:21

Ответ: Фак по Юнити.
 
Отрендерить его отдельной камерой.

pax 10.10.2011 12:26

Ответ: Фак по Юнити.
 
Исправить шейдер, поставить Fog {Mode = Off}

Lestar 10.10.2011 12:46

Ответ: Фак по Юнити.
 
Я так понимаю это сработает если туман делаем через Fog ,но не через партиклы.

pax 10.10.2011 12:51

Ответ: Фак по Юнити.
 
Если будут партиклы, то объект стоит отрисовать после них. Это можно установить в шейдере указав очередь прорисовки через тег Queue
http://unity3d.com/support/documenta...haderTags.html

Andvrok 10.10.2011 20:34

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

Сообщение от pax (Сообщение 205280)
Если будут партиклы, то объект стоит отрисовать после них. Это можно установить в шейдере указав очередь прорисовки через тег Queue
http://unity3d.com/support/documenta...haderTags.html

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

pax 10.10.2011 21:16

Ответ: Фак по Юнити.
 
Скачиваешь шейдеры http://unity3d.com/support/resources...ilt-in-shaders
выбираешь нужный, добавляешь/изменяешь тег на "Queue" = "Transparent+1", это значит, что объект будет отрисован в очереди после прозрачных объектов (частицы вроде как-раз к ним относятся).

Andvrok 10.10.2011 21:27

Ответ: Фак по Юнити.
 
Так этот шейдер вроде как будет применятся не только к нужному мне объекту, или я чего-то не понимаю?

pax 10.10.2011 21:29

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

Andvrok 11.10.2011 09:10

Ответ: Фак по Юнити.
 
Еще один ламерский вопрос:
Вот взял я стандартный Diffuse:
Код:

Shader "RandomShader" {
Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

CGPROGRAM
#pragma surface surf Lambert

sampler2D _MainTex;
fixed4 _Color;

struct Input {
        float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutput o) {
        fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
        o.Albedo = c.rgb;
        o.Alpha = c.a;
}
ENDCG
}

Fallback "VertexLit"
}

И куда мне здесь воткнуть Fog {Mode = Off}?
Пробовал гуглить, ничего не вышло

pax 11.10.2011 09:12

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

Shader "RandomShader" {
Properties {
    
_Color ("Main Color"Color) = (1,1,1,1)
    
_MainTex ("Base (RGB)"2D) = "white" {}
}
SubShader {
    
Tags "RenderType"="Opaque" }
    
Fog {Mode Off}
    
LOD 200

CGPROGRAM
#pragma surface surf Lambert

sampler2D _MainTex;
fixed4 _Color;

struct Input {
    
float2 uv_MainTex;
};

void surf (Input INinout SurfaceOutput o) {
    
fixed4 c tex2D(_MainTexIN.uv_MainTex) * _Color;
    
o.Albedo c.rgb;
    
o.Alpha c.a;
}
ENDCG
}

Fallback "VertexLit"


если посмотреть шейдер Font, то найдешь там много других тегов, кроме Fog

Andvrok 11.10.2011 09:16

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

Если бы не пробовал, не писал бы, что не получилось

pax 11.10.2011 09:19

Ответ: Фак по Юнити.
 
Я походу ошибся, а вы справку не читаете )
В общем там равно не нужно )

Вся информация про туман тут: http://unity3d.com/support/documenta...ts/SL-Fog.html

Andvrok 11.10.2011 09:22

Ответ: Фак по Юнити.
 
Все работает, все замечательно. А в справку я полез, но если бы я там что-то почерпнул, я бы не обращался с помощью.

Lowlet 03.11.2011 20:13

Ответ: Фак по Юнити.
 
Никак не могу понять принцип наследования классов.Разъясните пожалуйста

pax 03.11.2011 20:40

Ответ: Фак по Юнити.
 
В Unity или в C#?

Lowlet 03.11.2011 20:57

Ответ: Фак по Юнити.
 
Желательно конечно в Unity...

pax 03.11.2011 21:22

Ответ: Фак по Юнити.
 
Относительно Unity все просто:
1. Основное наследование идет от UnityEngine.Object (рассматриваем иерархию классов в справке http://unity3d.com/support/documenta...hierarchy.html ) Этот объект дает основным объектом игрового мира (текстуры, модели, скрипты, материалы, шейдеры, компоненты) возможность иметь имя, возможность быть выгруженными из памяти (Destroy), а так же возможность поиска игровых объектов по типу.
2. От него наследуются все объекты, которые в той или иной степени являются ресурсами. Как я уже писал - это материалы, модели, шейдеры, текстуры, скрипты, компоненты и т.д.
3. От него же наследуется в конечном итоге и класс MonoBehaviour, который является основой скриптов в Unity. Он содержит основные методы для работы с компонентами объекта, на который устанавливается скрипт, получает от игрового движка сообщения, которые можно обрабатывать. Информацию о сообщениях можно получить здесь: http://unity3d.com/support/documenta...Behaviour.html
На js наследование скрипта от MonoBehaviour выполняется не явно, т.к. класс генерируется по имени файла. В C# наследование выполнено явно и по умолчанию при создании скрипта создается класс - наследник MonoBehaviour
PHP код:

using UnityEngine;

public class 
MyClassMonoBehaviour 
{



4. Наследование в справке отображает раздел Inherited members для каждого класса. Открыв описание класса MonoBehaviour так же можно посмотреть, какие возможности он получил от классов, наследником которых он является.
5. Еще один основной класс, который так же унаследован в от UnityEngine.Object - является GameObject, это второй основной объект Unity, который является основной составляющей сцены. Он может иметь компоненты и скрипты. Скрипты могут работать с GameObject через свойство this.gameObject

Lowlet 03.11.2011 23:19

Ответ: Фак по Юнити.
 
PAX,спасибо за ответ.Еще вопрос:есть скрипт c названием proba_2
PHP код:

public var info String;
public var 
value String;

function 
OnGUI ()
{
   var 
plr gameObject.Find("Player");
   var 
inv plr.GetComponent(proba_1);
   
   if (
GUI.Button(Rect(0,0,100,100),"Запилить"))
   {
      
inv.Add(info,value);
   }


a также с названием proba_1 :
PHP код:

var arr String[];

class 
MyClass
{
var 
info String;
var 
value String;
}

function 
Add(info Stringvalue String)
{
   var 
= new MyClass ();
   
i.info info;
   
i.value value;
   
Add(i);
}

function 
Add (MyClass)
{
   for( var 
0arr.length++ )
   {
      
Add(k.info,k.value);
   }


Пытаюсь переменные из первого скрипта добавить в массив во втором,но не выходит.Подскажите пожалуйста,что делаю не так?

pax 03.11.2011 23:25

Ответ: Фак по Юнити.
 
Эм... что-то странно это дело выглядит и я на js не программирую.
Странно потому что в обоих функция Add вызывается так же функция Add - перекрестная рекурсия получается... Unity не падает?

Lowlet 03.11.2011 23:49

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

Сообщение от pax (Сообщение 208215)
Эм... что-то странно это дело выглядит и я на js не программирую.
Странно потому что в обоих функция Add вызывается так же функция Add - перекрестная рекурсия получается... Unity не падает?

извините ,не знал..
Нет,компилируется нормально,никаких ошибок не выбивает

pax 03.11.2011 23:58

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

using System.Collections.Generic;
using UnityEngine;

public class 
Proba_1 MonoBehaviour
{
    public List<
MyClassarr = new List<MyClass>();

    public class 
MyClass
    
{
        public 
string info;
        public 
string value;
    }

    public 
void Add(string infostring value)
    {
        var 
= new MyClass();
        
i.info info;
        
i.value value;
        
Add(i);
    }

    public 
void Add(MyClass k)
    {
        
arr.Add(k);
    }


Proba_2.cs
PHP код:

using UnityEngine;

public class 
Proba_2 MonoBehaviour
{
    public 
string info;
    public 
string value;

    
void OnGUI()
    {
        var 
plr GameObject.Find("Player");
        var 
inv plr.GetComponent<Proba_1>();

        if (
GUI.Button(new Rect(00100100), "Запилить"))
        {
            
inv.Add(infovalue);
        }
    }



pax 04.11.2011 00:07

Ответ: Фак по Юнити.
 
Работа со списками на js
PHP код:

import System;
import System.Collections.Generic;

var 
myList: List.<int>;

function 
Update () {
 
myList.Add(123);



Lowlet 04.11.2011 00:07

Ответ: Фак по Юнити.
 
Cпасибо большое,будем разбираться)))

Amatsu 06.11.2011 13:40

Ответ: Фак по Юнити.
 
Очень тупой вопрос. Какие 3д-форматы понимает юнити? Есть ли какой-то конвертер из сторонних форматов в родной для юнити?

pax 06.11.2011 13:51

Ответ: Фак по Юнити.
 
FBX - родной формат, можно в проект кидать непосредственно max файл, тогда Unity сама запустит макс в фоновом режиме и конвертирует файл сама в FBX.

Внизу табличка: http://unity3d.com/unity/editor/importing

Так же вроде поддерживается нативно COLLADA

Amatsu 06.11.2011 14:03

Ответ: Фак по Юнити.
 
Спасибо. Поставлю сегодня макс
Ах да, еще вопрос. Для макса нужно ставить какой-нибудь плагин экспорта?

pax 06.11.2011 14:06

Ответ: Фак по Юнити.
 
Скорее всего хватит штатного, но можно обновить, если надо http://usa.autodesk.com/adsk/servlet...12&id=10775855

Amatsu 06.11.2011 14:40

Ответ: Фак по Юнити.
 
Удачно, оказывается милка давно умеет экспортить в этот формат. Причем даже с группами, материалами и анимацией. Просто замечательно

Amatsu 07.11.2011 11:28

Ответ: Фак по Юнити.
 
Еще пара вопросов:
1) есть ли в юнити аналог pivot, к которому можно было бы привязать другую модель или такой же pivot? Чтобы допустим вращать главный pivot по оси Y, а привязанную к нему модель - по оси Z.
2) Какой командой можно получить сущность в иехархии модели (аналог команды FindChild из блитца). Загрузил модель своего кораблика из Kefir Fighter, Юнити так же видит в браузере, что у модели есть все чайлды, которые я ему задал в милке. С теми же именами. Как их получить в коде?

Lestar 07.11.2011 19:18

Ответ: Фак по Юнити.
 
1)Чтобы приаттачить один обьект к другому делаем
PHP код:

obj1.transform.parent=transform 

Мне удобнее вращать через Transform.eulerAngles .Можно и через Transform.RotateAround .Через кватернионы лично мне никак не удобно.
Вращаем вокруг оси Y
PHP код:

void Update()
{
  var 
objAngels=transform.eulerAngles ;
  
objAngels.y+=2f;
  
transform.eulerAngles objAngels;


Чтобы вращать чалд ,сначала его ищем через Transform.Find ,а затем вращаем по такой же логике как и выше.
PHP код:

Gameobject objChild;

void Start()
{
  
objChild=transform.Find("obj/obj1/_child")
}
void Update()
{
  var 
objAngels=objChild.transform.eulerAngles ;
  
objAngels.z+=2f;
  
objChild.eulerAngles objAngels;


2) Если я правильно понял,то через Transform.Find по имени и согласно иерархии чалдов.

pax 07.11.2011 19:50

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

Для изменения трансформации в локальных координатах используются свойства transform.localPosition, transform.localRotation, transform.localScale, transform.localEulerAngles

Пивот - это пустой объект. Создать в редакторе - GameObject->Create Empty, создать в коде
PHP код:

var pivot = new GameObject("myPivot");
// закрепим установку парентов
this.transform.parent pivot.transform


Amatsu 08.11.2011 16:51

Ответ: Фак по Юнити.
 
А в чем преимущество этих кватернионов перед обычными командами трансформации (поворота, движения и т.д.)?

Lestar 08.11.2011 17:28

Ответ: Фак по Юнити.
 
На мое мнение кроме гемороя манипулирования его переменными значимых отличий нет.Единственное,что в качестве аргументов в методах используються кватернионы(Instance например), а не эйлеровы углы.То есть в случае манипулирования ,через трансформ получаем лишнюю операцию.

Amatsu 08.11.2011 18:03

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

Lestar 08.11.2011 18:30

Ответ: Фак по Юнити.
 
Загрузили модель,создали префаб этой модели(я рекомендую работать именно с префабами,а не моделями).Далее инстансируем модель.
PHP код:

public GameObject newModel;

void Update()
{
   if (
Input.GetMouseButton(0))  Instantiate(newModeltransform.positiontransform.rotation);


Это должен быть GameObject.Можно сделать просто public переменную и в инспекторе перетянуть в это поле обьект.После этого к нему можно будет обращаться.Пример я написал вверху.

Amatsu 08.11.2011 19:00

Ответ: Фак по Юнити.
 
Спасибо. Я немного не то хотел.
В общем я уже выяснил, что есть метол загрузки ресурсов непосредственном в проект. Объясните плиз, на что ругается компилятор:

public GameObject go_player;
go_player = Resources.Load("Assets\models\mesh.fbx",GameObject );

pax 08.11.2011 19:58

Ответ: Фак по Юнити.
 
А где само сообщение компилятора?

По идее ты зря указал расширение ресурса да еще и не поместил ресурс в папку Resources. Вероятно должно быть так:

PHP код:

public GameObject go_player;
go_player = (GameObject)Resources.Load(@"models\mesh"typeof(GameObject)); 

При условии что папка models лежит в папке Resources.

Я например вообще не пользуюсь таким методом загрузки ресурсов. Просто незачем писать лишний код загрузки.

Lestar 08.11.2011 20:55

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

Amatsu 08.11.2011 21:15

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

pax 08.11.2011 21:30

Ответ: Фак по Юнити.
 
На Unity? Глупая контора. Лучше тогда идти программировать на чистом С++ и OpenGL или DirectX раз такие порядки.

Цитата:

Сообщение от Amatsu (Сообщение 208921)
К визуальному программированию почти не прибегают.

Кстати, визуального программирования в Unity по умолчанию нет ;)


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

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