forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

GooV 12.01.2013 21:51

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 249252)
В стандартном примере платформера было такое решение http://u3d.as/content/unity-technolo...r-tutorial/3yF

по нажатию кнопки ни чего не открывается(((

pax 12.01.2013 22:44

Ответ: Вопросы от новичка
 
найди проект через Unity Asset Store (Window => Asset Store)

seaman 12.01.2013 23:31

Ответ: Вопросы от новичка
 
Цитата:

по нажатию кнопки ни чего не открывается(((
Может нужна регистрация на unity3d.com? У меня все открывается.

mauNgerS 12.01.2013 23:38

Ответ: Вопросы от новичка
 
Доброго времени суток.

Интересует возможность сделать синглмеш.
Что-то типа AddMesh на блице.

В справке нашёл функцию Mesh.CombineMeshes, но не получается ей воспользоваться.

Так же в справке к данной функции указан код:
PHP код:

using UnityEngine;
using System.Collections;

[
RequireComponent(typeof(MeshFilter))]
[
RequireComponent(typeof(MeshRenderer))]
public class 
example : MonoBehaviour {
    
void Start() {
        
Component[] meshFilters = GetComponentsInChildren<MeshFilter>();
        
CombineInstance[] combine = new CombineInstance[meshFilters.length];
        
i = 0;
        while (
i < meshFilters.length) {
            
combine[i].mesh = meshFilters[i].sharedMesh;
            
combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
            
meshFilters[i].gameObject.active = false;
            
i++;
        }
        
transform.GetComponent<MeshFilter>().mesh = new Mesh();
        
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
        
transform.gameObject.active = true;
    }
} 


pax 13.01.2013 00:11

Ответ: Вопросы от новичка
 
Примерно так:
PHP код:

Mesh oneMesh = new Mesh();
Mesh otherMesh = new Mesh();
Mesh combinedMesh = new Mesh();

CombineInstance[] instances = new CombineInstance[2];

instances[0].mesh = oneMesh;
instances[0].transform = Matrix4x4.identity;

instances[1].mesh = otherMesh;
instances[1].transform = Matrix4x4.identity;

combinedMesh.CombineMeshes(instances); 


Morganolla 13.01.2013 14:16

Ответ: Вопросы от новичка
 
При переходе с С++ на С# я не совсем понимаю работу с массивами. Например в коде
Код:

public class StartAnimator : MonoBehaviour {
       
        public Transform[] ObjPos= new Transform[8];
        void Start ()
        {
                ObjPos[0].position = new Vector3(-105, 281, 0.5f); // возможно здесь ошибка !!!!
.....................................................
......................................................
.......................................................
}

я создаю массив ObjPos - ссылок на объекты Transform или сами эти объекты Transform???
Если это массив ссылок, то как создать сами объекты?
Мне нужно иметь массив объектов Transform с заданным положением в пространстве, чтобы потом присваивать их другим выборочным объектам в игре...

RegIon 13.01.2013 14:41

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Morganolla (Сообщение 249308)
При переходе с С++ на С# я не совсем понимаю работу с массивами. Например в коде
Код:

public class StartAnimator : MonoBehaviour {
   
    public Transform[] ObjPos= new Transform[8];
    void Start ()
    {
                ObjPos[0].position = new Vector3(-105, 281, 0.5f); // возможно здесь ошибка !!!!
.....................................................
......................................................
.......................................................
}

я создаю массив ObjPos - ссылок на объекты Transform или сами эти объекты Transform???
Если это массив ссылок, то как создать сами объекты?
Мне нужно иметь массив объектов Transform с заданным положением в пространстве, чтобы потом присваивать их другим выборочным объектам в игре...

Это массив ссылок на то, чего еще нет,так, как я понял, нельзя сделать объект, нужно типо так:
PHP код:

Vector3 pos=new Vector3(-105, 281, 0.5f);
ObjPos[0]  = Instance(transform,pos,transform.rotation) as Transform; 


pax 13.01.2013 14:51

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Костян (Сообщение 249310)
PHP код:

Vector3 pos=new Vector3(-105, 281, 0.5f);
ObjPos[0]  = Instance(transform,pos,transform.rotation) as Transform; 


Скорее

PHP код:

ObjPos[i] = new GameObject("MyPivot"+i).transfrom; 

А еще прокомментирую то, что если создавать массив публичным, то Unity серлиализует его. Т.е. если ты изменишь его в редакторе, то в итоге его данные будут присутствовать, а не new Transfom[8]

mauNgerS 14.01.2013 00:21

Ответ: Вопросы от новичка
 
Вот такой вод код создаёт новый гамеобжект и помещает в него все меши.

Но все меши помещаются в 0,0,0 как сохранить их положение и размер которые задаются перед соединением?


PHP код:

GameObject map1 = GameObject.CreatePrimitive(PrimitiveType.Cube);        
map1.name = "map1";        
map1.transform.position = new Vector3(0, 0, 0);
Destroy(map1.GetComponent<Collider>());
MeshRenderer mr1 = map1.GetComponent<MeshRenderer>();
mr1.material = (Material)Resources.Load("Model/Materials/wood",typeof(Material));
        
Mesh m1 = map1.GetComponent<MeshFilter>().mesh;
m1.Clear();

CombineInstance[] instances = new CombineInstance[i];
i=0;
for (
int x = 0; x < 38; x++)
{
    for (
int z = 0; z < 38; z++)
    {
        if (
LMap[x,z]<1)
        {
            
x1=x+0.5f;
            
z1=z+0.5f;
            
s1=Random.Range(0, 0.5f);
            
groundPoint = GetHeight(ref x1,ref z1);
            
GameObject inst = (GameObject)Instantiate(Resources.Load("Model/wood", typeof(GameObject)));
            
inst.transform.eulerAngles = new Vector3( Random.Range(0, 15)-90, Random.Range(0, 360), Random.Range(0, 15));
            
inst.transform.position = groundPoint;                
            
inst.transform.localScale += new Vector3(s1, Random.Range(0, 0.5f), s1);
            
Mesh me = inst.GetComponent<MeshFilter>().mesh;
            
instances[i].mesh = me;
            
instances[i].transform = Matrix4x4.identity;
            
i=i+1;
        }
    }
}
m1.CombineMeshes(instances); 


pax 14.01.2013 00:32

Ответ: Вопросы от новичка
 
вместо
PHP код:

instances[i].transform = Matrix4x4.identity; 

поставить
PHP код:

instances[i].transform = inst.transform.localToWorldMatrix; 


mauNgerS 14.01.2013 04:04

Ответ: Вопросы от новичка
 
Вложений: 1
Есть генерированный в скрипте меш.

RecalculateNormals() делает освещение правильным, расчёт тангентов делает бамп правильным.

Как на нём настроить группы сглаживания? Необходимо чтобы у всего меша была одна группа сглаживания. Без ступенек.

На блице такой же алгоритм давал необходимый результат (сразу у всего меша была одна группа сглаживания).

pax 14.01.2013 07:15

Ответ: Вопросы от новичка
 
А сразу в один меш уровень сгенерировать никак? У тебя разные вершины в точках "соединения" частей, они имеют разные нормали. Ну и рассчитываются отдельно. Если бы была одна вершина, то одна нормаль для соединения сделала бы сглаживание.

Morganolla 14.01.2013 13:56

Ответ: Вопросы от новичка
 
Как сделать некоторые глобальные данные для всего проекта, чтобы можно было передавать их между разными сценами, уровнями и т.д. ?
Сделать какой то static класс? Если можно приведите какой то пример для подробного рассмотрения...Буду благодарен :)

pax 14.01.2013 14:27

Ответ: Вопросы от новичка
 
любые статик переменные передаются между сценами, кроме объектов Unity. Чтобы передавать их между сценами используй http://docs.unity3d.com/Documentatio...royOnLoad.html

Morganolla 14.01.2013 23:24

Ответ: Вопросы от новичка
 
Добавил на сцену музыку - аудио клип и прикрепил к объекту на сцене, а она не играет. В чем может быт проблема?
Вроде все параметры выставил - Play On Awake +, Max Distance =10000 и т.д....

Вроде переформатировал в 2Д - заиграло...


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

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