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)

Morganolla 16.01.2013 16:02

Ответ: Вопросы от новичка
 
А если отключить выполнение скрипта из него самого, то это будет типа:
enabled = false;
или
this.enabled = false;

???

pax 16.01.2013 16:07

Ответ: Вопросы от новичка
 
Да, так и есть, оба варианта одинаковые. this не обязательно.

WISHMASTER35 16.01.2013 17:05

Ответ: Вопросы от новичка
 
Не знаете использование в шейдере half или float влияет на скорость?

pax 16.01.2013 17:31

Ответ: Вопросы от новичка
 
Влияет, но рекомендация другая - если используешь везде half - используй half, вреда больше будет из-за конвертации из типа в тип вроде бы.

WISHMASTER35 16.01.2013 17:42

Ответ: Вопросы от новичка
 
Для текстурных координат half наверно лучше не использовать. Хотя сомневаюсь что не хватит точности даже при текстурах размером 4096.
А вот для цвета half должно хватить. По-моему там и байта хватило бы.
В я так понял CG неявная конвертация. Можно и не подозревая такого наворотить с этими типами)
Умножение float4 на float я так понимаю тоже хуже чем float4 на float4?

pax 16.01.2013 17:53

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

Сообщение от WISHMASTER35 (Сообщение 249657)
Умножение float4 на float я так понимаю тоже хуже чем float4 на float4?

Тут если надо умножить компоненты вектора на число, то все норм. Или покомпонентно перемножить два вектора наверное тоже норм.

WISHMASTER35 16.01.2013 23:58

Ответ: Вопросы от новичка
 
Написал свой Lighting.inc со вспомогательными функциями для шейдеров.
Как в нем прописать неявное свойство как _Time?
Написал uniform float3 _SunDir но что-то не работает(

seaman 17.01.2013 00:17

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

неявное свойство
Т.е. свое значение, передаваемое в шейдер?
А Вы его в шейдер то передаете? _Time за Вас передает Юнити, а Ваш _SunDir Вам придется передавать вручную - Material.SetVector.

WISHMASTER35 17.01.2013 01:18

Ответ: Вопросы от новичка
 
Я предполагал передавать так Shader.SetGlobalVector.
Когда-то тут спрашивал как нарисовать квадрат в EditorGUI.
Вот как
Код:

        public static void FillRect(Rect rect, Color color) {
                Color oldColor = GUI.color;
                GUI.color = color;
                GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
                GUI.color = oldColor;
        }

Спасибо рефрактору. Может еще и найду как список рисуется в иерархии окне сцены и асетов.
Вообще странный способ нарисовать квадрат. Могли бы и спецальную функцию для это сделать.
Зато есть функция EditorGUIUtility.DrawColorSwatch которая используется только при рисовании поля для цвета.

pax 17.01.2013 01:26

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

Сообщение от WISHMASTER35 (Сообщение 249721)
Написал свой Lighting.inc со вспомогательными функциями для шейдеров.
Как в нем прописать неявное свойство как _Time?
Написал uniform float3 _SunDir но что-то не работает(

В инклудах время объявлено так же
PHP код:

uniform float4 _Time


WISHMASTER35 17.01.2013 01:41

Ответ: Вопросы от новичка
 
pax, да я тоже там подсмотрел.

WISHMASTER35 17.01.2013 02:35

Ответ: Вопросы от новичка
 
Вложений: 1
Нарыл я метод рисование иерархии. Ну к черту в такой куче кода разбираться.
А что такое controlID? Часто вижу такое.
Еще куча каких-то методов для них типа GUIUtility.GetStateObject.

pax 17.01.2013 02:42

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

Сообщение от WISHMASTER35 (Сообщение 249740)
А что такое controlID? Часто вижу такое.

ID контрола - кнопки/текстового поля/тоггла и т.д. создается при отрисовке GUI, сам я не использовал, точнее использовал только сброс.

seaman 17.01.2013 09:24

Ответ: Вопросы от новичка
 
controlID используется например для отлова событий в конкретном элементе ГУИ
Код:

int id = GUIUtility.hotControl;
EventType type = Event.current.GetTypeForControl(id);
switch(type)
{
  case EventType.MouseDown:
...


Morganolla 17.01.2013 15:23

Ответ: Вопросы от новичка
 
Что то не получается отключить выполнение скрипта чилда (sPart.cs) в скрипте родителя (sParent.cs). Код:
Код:


public class sParent : MonoBehaviour {


        public GameObject  part;
        public sPart  sPartA ;
        void Start ()
        {
                sPartA=part.GetComponent<sPart>();
        }
       
        // Update is called once per frame
        void Update ()
        {
.................................................
            sPartA.enable=false;
........................................................

Здесь Юнити ругается на ошибки компилятора -
error CS1061: Type `sPart' does not contain a definition for `enable' and no extension method `enable' of type `sPart' could be found (are you missing a using directive or an assembly reference?)

Скрипт sPart существует и прикреплен к чилду как положено...

ВОПРОС СНЯТ - ДОСАДНАЯ ОШИБКА В НАПИСАНИИ enabled !!!

seaman 17.01.2013 15:35

Ответ: Вопросы от новичка
 
Внимательнее пишите. Нет enable, есть enabled

4yBa4Ok 17.01.2013 20:25

Ответ: Вопросы от новичка
 
Такой вопрос к знающим. Если я хочу сделать поезд, возможно ли его реализовать так: колесная пара(конвекс) через Hingle джоинт крепится к тележке, тележка к основе поезда через D6 джоинт? Или как будет лучше\ оптимизированней?

WISHMASTER35 17.01.2013 22:22

Ответ: Вопросы от новичка
 
seaman, я так понимаю можно как-то получить controlID следующего элемента?
И наверно например для GUILayout.BeginScrollView(scrollPosition) scrollPosition можно не хранить в глобальной переменной. Ведь стандартный элементы как-то хранят свои значения без глобальных переменных.
Только пока не пойму как это делается.
Update:
Не так как хотелось. controlID получается по позиции элемента т.е. до прорисовки элемента его controlID не получить((

seaman 17.01.2013 22:41

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

до прорисовки элемента его controlID не получить
Вроде бы именно так. Там как-то сложновато.
ЗЫ Вот Нео и Pax сделали Antares. Судя по посту Pax без использования controlID. Так что думаю можно не заморачиваться и работать без него.

WISHMASTER35 17.01.2013 23:09

Ответ: Вопросы от новичка
 
seaman, да можно, но лучше разобраться и упростить себе немного код. Меня задалбливает создавать глобальную переменную для scrollPosition.
Я вот теперь попробую сделать, чтобы мышкой можно было перетаскивать элементы в моем списке. Тут точно придется использовать controlID, чтобы хранить смещение элемента при драге мыши.

WISHMASTER35 18.01.2013 02:31

Ответ: Вопросы от новичка
 
Есть такая проблема. Когда мышь уходит за пределы окна, то событие EventType.MouseUp не вызывается.
Как можно определить, что мышь ушла за окно?

pax 18.01.2013 07:08

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

var screenRect = new Rect(0,0Screen.widthScreen.height);
if(!
screenRect.Contains(Input.mousePosition))
{
   
// мышь вышла за пределы



GooV 18.01.2013 15:40

Ответ: Вопросы от новичка
 
всем привет.
мне нужно написать скрипт чтобы 3rd Person Controller, вставая на движущуюся платформу ехал за ней а не тупо скользил стоя на месте, я думаю можно сделать проверкой соприкосновения контроллера с платформой, узнать её движение и присвоить ему это движения, но вот вопрос, нужно как-то сложить и его движение, ну чтобы он мог по движущейся платформе двигаться.Я прошу гайдов по изменению и складыванию движения)

pax 18.01.2013 16:04

Ответ: Вопросы от новичка
 
Скрипт вешай на платформу и пусть она двигает все что с ней соприкасается на величину своего движения.

GooV 18.01.2013 16:06

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

Я прошу гайдов по изменению и складыванию движения)
я не умею двигать и вычислять величину движения

Radnk 18.01.2013 18:29

Ответ: Вопросы от новичка
 
Сделал обычного персонажа в форме круга :-D (Скачать). Вроде бы по платформе двигается норм, но вот стоит соприкоснуться с кубом - его начинает тянуть в разные стороны. Из-за чего это может быть? :(

На самой сфере Sphere Collder, Rigdbody и скрипт.

Код:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    private Vector3 inp;
    private Vector3 delta;
    private Vector3 oldPos;
        private Vector3 gravity;
    private const float pi2 = Mathf.PI * Mathf.PI;

    public float diam = 7f;

    public float speed = 7f;

    public Transform cam;
        GameObject fire;

   
        // Use this for initialization
        void Start (){
            oldPos = transform.position;
                        Physics.gravity = new Vector3(0, -75, 0);
        }
       
        // Update is called once per frame
        void Update ()
{
        fire = GameObject.Find("fire");
        if (Input.GetButtonDown("Jump")){   
        fire.particleEmitter.emit = true;
        diam = 10f;
    speed = 10f;
        }
        if (Input.GetButtonUp("Jump")){
fire.particleEmitter.emit = false;
                diam = 4f;

    speed = 4f;
        }
            inp.x = Input.GetAxis("Horizontal");
            inp.z = Input.GetAxis("Vertical");
        }
    void FixedUpdate()
                {
                       
        Vector3 cp = transform.position - cam.position;
        cp.y = 0f;
        transform.Translate(Quaternion.LookRotation(cp) * inp * speed * Time.deltaTime, Space.World);
        delta = oldPos - transform.position;

        float ang = Mathf.Sin(delta.magnitude / diam / pi2) * Mathf.Rad2Deg;
        transform.RotateAround(Vector3.Cross(delta, Vector3.up), ang);
        oldPos = transform.position;
   
}
}


pax 18.01.2013 21:44

Ответ: Вопросы от новичка
 
Вот в этом туторе была реализация платформ на сколько я помню http://u3d.as/content/unity-technolo...r-tutorial/3yF

Radnk 19.01.2013 00:09

Ответ: Вопросы от новичка
 
мне не очень помогла эта ссылка :dontknow:

seaman 19.01.2013 00:18

Ответ: Вопросы от новичка
 
А эта:
http://unity3d.ru/distribution/viewtopic.php?f=11&t=430

Radnk 19.01.2013 00:28

Ответ: Вопросы от новичка
 
Перевод я начал искать еще как первую ссылку дали. )))

Но я не могу понять почему персонажи тянет в разные стороны. (Может проблема в скрипте (хз из за чего это может быть)).

seaman 19.01.2013 01:15

Ответ: Вопросы от новичка
 
Вот это для меня странно:
Код:

transform.RotateAround(Vector3.Cross(delta, Vector3.up), ang);
В мануале есть функция только с тремя параметрами. У Вас тут два. В движке есть функция с двумя параметрами, но она не документирована. И на самом деле я ее не понимаю. Вектор проходящий через точку однозначно определяет ось вращения. Просто вектор - нет.

Но вот из-за чего шар тянет непонятно. Как будто после соударения на него постоянно действует сила отталкивания от куба.

Radnk 19.01.2013 01:48

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

Например: Character Controller и Sphere Collider

WISHMASTER35 19.01.2013 02:09

Ответ: Вопросы от новичка
 
Radnk, у тебя на сфере есть RigidBody? Зачем тогда двигать через transform?
Вообще написать свой Character обычным коллайдером нормально не получится. Не сможешь точно определить чарактер на полу или со стеной столкновение.
Разве какие-то дополнительные касты использовать.

Что это за метод http://docs.unity3d.com/Documentatio...orControl.html ? Ничего не написано.

Radnk 19.01.2013 02:14

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

Сообщение от WISHMASTER35 (Сообщение 249913)
Radnk, у тебя на сфере есть RigidBody?

Да.

Цитата:

Сообщение от WISHMASTER35 (Сообщение 249913)
Зачем тогда двигать через transform?

А как правильно ? :rolleyes:

WISHMASTER35 19.01.2013 02:53

Ответ: Вопросы от новичка
 
Radnk, rigidbody.MovePosition. Но он тоже работает не очень и может дрожать при коллизии.
Лучше всего двигать через AddForce, но для Character'а это не подойдет.

mauNgerS 19.01.2013 12:16

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

Сamera=CreateCamera(pivot)
PositionEntity Сamera,12,25,0

Создать камеру относительно объекта (pivot - родитель для Camera)
Задать позицию для камеры, опять же относительно родителя.

seaman 19.01.2013 13:02

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

Что это за метод http://docs.unity3d.com/Documentatio...orControl.html ? Ничего не написано.
И без описания понятно. Выдает какое событие ввода (EventType) произошло для данного контрола. Если ничего не протизошло - выдаст EventType.Ignore
Цитата:

Создать камеру
Код:

GameObgect newCamera = new GameObject("NewCamera");
newCamera.AddComponent<Camera>();
newCamera.transform.position = pivot.transform.position;
newCamera.transform.parent = pivot.transform;
newCamera.transform.localposition = new Vector3(12,25,0);


4yBa4Ok 19.01.2013 16:47

Ответ: Вопросы от новичка
 
Ребят, а как можно сделать нечто похожее на поезд? Теория интересует)

WISHMASTER35 19.01.2013 17:46

Ответ: Вопросы от новичка
 
seaman, тогда спрошу по другому. Когда Event.current.GetTypeForControl и просто Event.current.type выдаст разные типы?
Я считал что событие одно для всего окна, а не для каждого элемента.

4yBa4Ok, думаю лучше всего тупо заставить его двигаться по своему пути.
Ты бы уточнил на сколько наворочено надо. Может ты его хочешь подрывать, и тп? А может надо чтобы просто двигался как по анимации.

4yBa4Ok 19.01.2013 17:54

Ответ: Вопросы от новичка
 
Моя идея была такова: колесная пара через джоинт крепится к тележке, а тележка тоже через джоинт крепится к основе поезда)

seaman 19.01.2013 19:02

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

Когда Event.current.GetTypeForControl и просто Event.current.type выдаст разные типы?
Как я понимаю когда событие произошло над другим контролом. GetTypeForControl вернет Ignore, Event.current.type вернет тип события.
Нужно проверять!

WISHMASTER35 19.01.2013 19:28

Ответ: Вопросы от новичка
 
seaman, Ignore будет, допустим, если MouseUp произошел, когда мышь была за пределами окна. А когда событие было использовано другим контролом, то будет Used.
Ладно, буду сравнивать, если пойму, то отпишусь.

GooV 19.01.2013 21:52

Ответ: Вопросы от новичка
 
Люди подскажите пожалуйста уроков по движению, не могу с ним разобраться.Нужно не просто движение а чтобы можно было его узнавать и присваивать другому объекту, если это возможно). Заранее благодарю.

pax 19.01.2013 22:26

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

using UnityEngine;

public class 
MovementMonoBehaviour
{
    public 
Vector3 lastPos;
    public 
Vector3 movement Vector3.zero;

    public 
Start()
    {
       
_lastPos transform.position;
       
movement Vector3.zero;
    }

    public 
LateUpdate()
    {
       var 
newPos transform.position;
       
movement transform.position _lastPos ;
       
_lastPos transform.position;
    }



4yBa4Ok 19.01.2013 22:34

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

pax 19.01.2013 23:09

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

Сообщение от 4yBa4Ok (Сообщение 249977)
хингл джой

:-D Если не знаешь как произносится, лучше пиши оригинальный термин Hinge Joint.

Двигаться - приложи к телу силу.

WISHMASTER35 20.01.2013 00:12

Ответ: Вопросы от новичка
 
pax, в английском не угадаешь как правильно произносится)
Гугл воспроизводит Hinge хендж. Хотя обычно i читается как а и получилось бы Хайндж.

seaman 20.01.2013 00:27

Ответ: Вопросы от новичка
 
i в закрытом слоге читается как и. Гугл так и произносит.

Radnk 20.01.2013 01:04

Ответ: Вопросы от новичка
 
Ребята, помогите исправить ошибку (Скриншот). :rolleyes:

Раньше был пробел в скрипте. Я его убрал, но как видно карявенько, :-D потому что при нажатии пробела теперь мячик не прыгает, но вылазит какая то ошибка. :SOS: :SOS: :SOS:

Вот скрипт :rolleyes:

Код:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    private Vector3 inp;
    private Vector3 delta;
    private Vector3 oldPos;
        private Vector3 gravity;
    private const float pi2 = Mathf.PI * Mathf.PI;

    public float diam = 7f;

    public float speed = 7f;

    public Transform cam;
        GameObject fire;

   
        // Use this for initialization
        void Start (){
            oldPos = transform.position;
                        Physics.gravity = new Vector3(0, -75, 0);
        }
       
        // Update is called once per frame
        void Update ()
{
        fire = GameObject.Find("fire");
        if (Input.GetButtonDown("Jump")){   
        fire.particleEmitter.emit = true;
        diam = 10f;
    speed = 10f;
        }
        if (Input.GetButtonUp("Jump")){
fire.particleEmitter.emit = false;
                diam = 4f;

    speed = 4f;
        }
            inp.x = Input.GetAxis("Horizontal");
            inp.z = Input.GetAxis("Vertical");
        }
    void FixedUpdate()
                {
                       
        Vector3 cp = transform.position - cam.position;
        cp.y = 0f;
        transform.Translate(Quaternion.LookRotation(cp) * inp * speed * Time.deltaTime, Space.World);
        delta = oldPos - transform.position;

        float ang = Mathf.Sin(delta.magnitude / diam / pi2) * Mathf.Rad2Deg;
        transform.RotateAround(Vector3.Cross(delta, Vector3.up), ang);
        oldPos = transform.position;
   
}
}


pax 20.01.2013 01:12

Ответ: Вопросы от новичка
 
Либо fire не находит, либо на fire нет particleEmitter

Radnk 20.01.2013 01:25

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

Сообщение от pax (Сообщение 250013)
Либо fire не находит, либо на fire нет particleEmitter

Понял в чем дело (правда частично) :)

mepihin 20.01.2013 01:42

Ответ: Вопросы от новичка
 
а кто может кинуть мсылку на то как пользоваться аниматором и новыми возможностьями анимациии в юнити4???

seaman 20.01.2013 02:33

Ответ: Вопросы от новичка
 
https://www.youtube.com/watch?v=Xx21y9eJq1U или тут:
http://video.unity3d.com/video/73620...anim-animation

https://www.youtube.com/watch?v=Z9iUm2llVPc
https://www.youtube.com/watch?v=iAwRSL5VnXY
https://www.youtube.com/watch?v=sy1SmNWQzUA
http://u3d.as/content/unity-technolo...ple-scenes/3Bs
https://www.assetstore.unity3d.com/#/content/5330
Ну еще можно это посмотреть:
http://gcup.ru/forum/59-29382-1

pie 20.01.2013 11:26

Ответ: Вопросы от новичка
 
Всем привет! Возник вопрос по ГУИ. Конкретно есть два типа скрола.
Первый VerticalScrollbar: Как его значение можно использовать для прокрутки информации в BeginVertcal?
Второй BeginScrollView: Как его расположить слева? По умолчанию он всегда встает справа.

pax 20.01.2013 11:53

Ответ: Вопросы от новичка
 
1. Посчитать как-то размер контента, в начале вертикала поставить GUILayout.Space(с отрицательным значением скролла).
2. Никак, если только нарисовать тоже самое с оффсетом влево (GUILayout.Space), чтобы все что первое было нарисовано было скрыто группой или area, а второе видно было так, чтобы был скрыт скрол и скрол применять от первого прохода, а но не сохранять (во загнул)

mauNgerS 20.01.2013 14:02

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

PHP код:

float targetDistanceMin=0.1f;
Vector3 groundPoint;
Vector3 direction;
float distance;
        
Ray ray camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
Physics.Raycast(rayout hit);
groundPoint hit.point;

if (
Input.GetMouseButton(0))
{
    
direction groundPoint targetCam.transform.position;
    
distance direction.magnitude;
    if (
distance targetDistanceMin)
    {
        
targetCam.transform.position += direction.normalized * (distance targetDistanceMin)*0.03f;
    }            


камера с опозданием следует за мышкой.

Вопрос в том, как ограничить движение камеры?

На блице я сравнивал координаты х камеры и х предельного положения, также по z. НО НА ЮНИТИ ВЕКТОРА:4to: Как мне сравнить координаты?
Или здесь есть какой-то иной способ?

pax 20.01.2013 14:30

Ответ: Вопросы от новичка
 
Разность векторов это разница координат. Т.е. можешь вычесть один вектор из другого, получишь вектор разницы. Его компоненты можешь проверять. По сути вычитание и сложение векторов это покомпонентное сложение или вычитание координат в блице. Т.е. тут все проще в качестве записи математики.

mauNgerS 20.01.2013 14:38

Ответ: Вопросы от новичка
 
Ещё вопрос. Можно ли с помощью осей сделать, чтобы объект всегда смотрел на мышь.

Или же тут нужно что-то вроде transform.LookAt(target);

pax 20.01.2013 15:00

Ответ: Вопросы от новичка
 
Лук Эт лучше всего.

WISHMASTER35 20.01.2013 20:07

Ответ: Вопросы от новичка
 
Нельзя как-то заставить это работать без создания специального класса?
float? offset = (float?) GUIUtility.GetStateObject( typeof(float?), items.GetHashCode() );
Изменение offset не сохраняется(
Или может есть класс - контейнер для float или просто для типа?

mauNgerS 20.01.2013 22:54

Ответ: Вопросы от новичка
 
1. Можно ли как-то в юнити при загрузке развернуть оси модели.

Ситуация такая:
Есть модели. Их оси x, y, z смотрят не туда, куда нужно.
В результате кое что можно исправить, развернув модель где на 90, где на 180...
А вот если применить тот же LookAt то он направляет модель по её осям и коэффициент там прибавить некуда.

2. Есть ли простая команда, чтобы инвертировать нормали?

WISHMASTER35 20.01.2013 22:57

Ответ: Вопросы от новичка
 
mauNgerS, т.е. при импорте модели? К сожалению нельзя.

mauNgerS 20.01.2013 23:10

Ответ: Вопросы от новичка
 
Тогда как сделать чтобы LookAt направлял к примеру не ось x, а ось z???

WISHMASTER35 21.01.2013 00:02

Ответ: Вопросы от новичка
 
Что значит ошибка?
Getting control 1's position in a group with only 1 controls when doing mouseDown
Aborting

mauNgerS, lookAt направляет на точку, а не на ось.


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

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