forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Уроки (http://forum.boolean.name/forumdisplay.php?f=145)
-   -   Переход с Blitz3D на Unity3D. (http://forum.boolean.name/showthread.php?t=13540)

Crayzi 18.12.2010 19:22

Ответ: Переход с Blitz3D на Unity3D.
 
1. Возможно ли создавать объекты и присваивать им переменные в ручную?
2. Как будет выглядеть на Юнити простенький блитз код типа:
Код:

Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0
cube=CreateCube()
PositionEntity cube,0,0,5
While Not KeyDown( 1 )
RenderWorld
Flip
Wend
End


Ну или примерно чтото типо этого, но без расставления объектов в ручную.

pax 18.12.2010 19:30

Ответ: Переход с Blitz3D на Unity3D.
 
1. Да
2. Все описанное можно создать в редакторе (сцена). Подробнее можно почитать в моем первом уроке.

Кодом C#:
PHP код:

using UnityEngine;

public class 
NewBehaviourScript MonoBehaviour
{


    
void Start()
    {
        
// Graphics3D 640,480 
        
Screen.SetResolution(640480false);

        
// camera=CreateCamera() 
        
Camera myCamera = new GameObject("Camera").AddComponent<Camera>();

        
// light=CreateLight() 
        
Light myLight = new GameObject("Light").AddComponent<Light>();

        
//RotateEntity light,90,0,0 
        
myLight.transform.rotation Quaternion.Euler(9000);

        
//cube=CreateCube() 
        
GameObject cube GameObject.CreatePrimitive(PrimitiveType.Cube);

        
//PositionEntity cube,0,0,5 
        
cube.transform.position = new Vector3(0,0,5);

    }


    
void Update()
    {
        
//While Not KeyDown( 1 ) 
        //RenderWorld 
        //Flip 
        //Wend 
        //End
        
if(Input.GetKeyDown(KeyCode.Escape))
        {
            
Application.Quit();
        }

    }


Повесить такой компонент на пустой объект в сцене.

pax 18.12.2010 19:42

Ответ: Переход с Blitz3D на Unity3D.
 
Добавил кодом

Crayzi 18.12.2010 19:45

Ответ: Переход с Blitz3D на Unity3D.
 
Цитата:

Сообщение от pax (Сообщение 172345)
1. Да
2. Все описанное можно создать в редакторе (сцена). Подробнее можно почитать в моем первом уроке.

Кодом:
PHP код:

using UnityEngine;

public class 
NewBehaviourScript MonoBehaviour
{


    
void Start()
    {
        
// Graphics3D 640,480 
        
Screen.SetResolution(640480false);

        
// camera=CreateCamera() 
        
Camera myCamera = new GameObject("Camera").AddComponent<Camera>();

        
// light=CreateLight() 
        
Light myLight = new GameObject("Light").AddComponent<Light>();

        
//RotateEntity light,90,0,0 
        
myLight.transform.rotation Quaternion.Euler(9000);

        
//cube=CreateCube() 
        
GameObject cube GameObject.CreatePrimitive(PrimitiveType.Cube);

        
//PositionEntity cube,0,0,5 
        
cube.transform.position = new Vector3(0,0,5);

    }


    
void Update()
    {
        
//While Not KeyDown( 1 ) 
        //RenderWorld 
        //Flip 
        //Wend 
        //End
        
if(Input.GetKeyDown(KeyCode.Escape))
        {
            
Application.Quit();
        }

    }




Премного благодарен, теперь я понял что Юнити не такой уж и монстр, каким мне показался после блитца)))
П.с. А все команды действий над объектами пишутся в таком духе "cube.transform.действие"?

pax 18.12.2010 19:57

Ответ: Переход с Blitz3D на Unity3D.
 
Цитата:

Сообщение от Crayzi (Сообщение 172348)
П.с. А все команды действий над объектами пишутся в таком духе "cube.transform.действие"?

Это объектно-ориентированное программирование.
У объекта cube, типа GameObject есть свойство transform типа Transform, которое отвечает за трансформации объекта в 3d. У компонента Transform есть так же свойства отвечающие каждое за свое. Например свойства rotation типа Quaternion отвечает за вращение.

Т.е.
PHP код:

myLight.transform.rotation Quaternion.Euler(9000); 

можно понимать как
PHP код:

[Объект Light].[Свойство transform].[Свойство rotation] = 
   [
Создать новый объект вращения на основе углов Эйлера (Quaternion.Euler(9000)] 

т.е. любой объект имеет свойства и методы. Свойства могут быть другими объектами, которые так же могут иметь свойства и методы и т.д.

Если представить что типы(Type) в Blitz3D это объекты, то ихние поля - это свойства, которые могут иметь как свои свойства, так и методы. В проем как и внутри типа могут быть созданы методы.

Crayzi 18.12.2010 20:23

Ответ: Переход с Blitz3D на Unity3D.
 
Вопрос, а почему нельзя сразу после создания переменной изменить ее значение(я эксперементировал с тем кодом какой ты перевел с блитца)? У мну компиллер ругается чёто, зато если в "подфункции" менять значение RS то все ок.
Код:

public float RS=5;
RS=50;

П.с. Я так понял что "public" означает что я создал глобальную переменную или же это не так? Как создать локальную/глобальную переменную?

pax 18.12.2010 20:31

Ответ: Переход с Blitz3D на Unity3D.
 
Это от привычки к тому, что везде можно писать команды. Когда описывается объект - определяются его свойства и методы, а выполняются действия только в методах и конструкторах. Правда на JS можно писать код вне методов, он выполняется на старте (вместо функции Start). В C# этого нельзя сделать. Для этого у каждого компонента имеются функции Awake и Start. Awake выполняется после инициализации компонента, Start - перед первым Update.

Например нужно объекту объявить переменную life и на старте присвоить ей значение:
PHP код:

using UnityEngine;

public class 
ExampleScript MonoBehaviour
{
    public 
float life 0f// можно только проинициализировать
    //life = 100f;  - здесь будет ошибка

    
public void Start()
    {
        
life 100f// тут все OK, т.е. выполнение присвоения выполняется в теле метода Start()
    
}



В данном случае переменная life является полем объекта ExampleScript. Поля отличаются от свойств тем, что свойства при назначении значения и при считывании значения могут выполнять какие-то действия.

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

myLight.transform.rotation Quaternion.Euler(9000); 

Вызовет внутри объекта transform пересчет матрицы трансформаций, на основе которой объект будет визуализироваться, т.к. rotation - это свойство.

pepel 18.12.2010 20:44

Ответ: Переход с Blitz3D на Unity3D.
 
pax а ооп везде одинаковое? нанпример название свойств и т.д.
если например взять с++ и какойнить двиг к нему

pax 18.12.2010 20:47

Ответ: Переход с Blitz3D на Unity3D.
 
Свойств на С++ нет(есть на CLR - C++.Net но я практически на нем не программировал). С точки зрения С++ это две функции. Например свойство rotation на С++ было бы записано двумя функциями
Код:

void set_rotation(Quaternion newRotation)
{
  выполняемое действие
}

и
Код:

Quaternion get_rotation()
{
  выполняемое действие
  return значение;
}


pepel 18.12.2010 20:51

Ответ: Переход с Blitz3D на Unity3D.
 
дауж после блитца неудобно былобы привыкать наверно)) на с# еще куда нишло..

pax 18.12.2010 20:52

Ответ: Переход с Blitz3D на Unity3D.
 
У каждого языка свои задачи. У С++ свои преимущества, у С# свои.

В unity можно использовать функции из библиотек, написанных на С++ импортировав их в C#. Но тогда проект будет платформозависимым.

pepel 18.12.2010 21:05

Ответ: Переход с Blitz3D на Unity3D.
 
кстати юнити всегда выдает заставка с выбором разрешения(если с компа запускать) . есть функция выключения ее. или она по умолчанию компилится?

pax 18.12.2010 21:09

Ответ: Переход с Blitz3D на Unity3D.
 
Можно отключчть в настройках:




pax 18.12.2010 21:15

Ответ: Переход с Blitz3D на Unity3D.
 
Цитата:

Сообщение от pepel (Сообщение 172363)
на с# еще куда нишло..

На самом деле на C# не намного проще. Объявление свойства выглядит так:
PHP код:

public Quaternion rotation
{
   
get
   
{
     
// действие
     
return значение;
   }
   
set
   
{
     
//действие с входным значением value
   
}


Потом можно им пользоваться как полем.

pepel 18.12.2010 21:18

Ответ: Переход с Blitz3D на Unity3D.
 
ок спасибо. пока конешь не собираюсь переходить, но когданибудь это может случится)

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


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

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