Страница 4 из 11

Re: Antares VIZIO

СообщениеДобавлено: 25 дек 2010, 22:00
gnoblin
+1 вариант SmoothLookAt блока, теперь с одним дополнительным блоком чтобы указать какой трансформ будет смотреть на target.
(у меня граф почему-то не одевается на камеру...)

Вообще, custom block это круто!

Синтаксис:
Используется csharp
using Antares.Vizio.Runtime;
using UnityEngine;

[VisualLogicBlock("Smooth Look At", "Custom Blocks", ParentName = "Camera-Control")]
public class SmoothLookAtBlock : LogicBlock
{
    [Parameter(VariableType.In, typeof(Transform), Name = "Looker Transform")]
    public Variable looker;

    [Parameter(VariableType.In, typeof(Transform), Name = "Target Transform")]
    public Variable target;

    [Parameter(VariableType.In, typeof(bool), Name = "Smooth")]
    public Variable smooth;

    [Parameter(VariableType.In, typeof(float), Name = "Damping", DefaultValue = 6f)]
    public Variable damping;

    [Parameter(VariableType.Out, typeof(string), Name = "Error")]
    public Variable error;

    [EntryTrigger]
    public void In()
    {
        Transform targ = target.Value as Transform;

        if (targ != null)
        {
            Transform thisTransform = looker.Value as Transform;//Component.transform;

            if ((bool)smooth.Value)
            {
                // Look at and dampen the rotation
                var rotation = Quaternion.LookRotation(targ.position - thisTransform.position);
                thisTransform.rotation = Quaternion.Slerp(thisTransform.rotation, rotation, Time.deltaTime * (float)damping.Value);
            }
            else
            {
                // Just lookat
                thisTransform.LookAt(targ);
            }

            ActivateTrigger();
        }
        else
        {
            error.Value = "Target is NULL";
            ActivateTrigger("Error");
        }
    }


    public override void Awake()
    {
       Transform targ = target.Value as Transform;

        if (targ != null)
        {
            Transform thisTransform = looker.Value as Transform;
            // Make the rigid body not change rotation
            if (thisTransform.rigidbody)
                thisTransform.rigidbody.freezeRotation = true;
        }
    }

    public override void OnInitializeDefaultData()
    {
        RegisterOutputTrigger("Exit");
        RegisterOutputTrigger("Error");
    }

}

Re: Antares VIZIO

СообщениеДобавлено: 25 дек 2010, 22:09
gnoblin
Только вот втыркивать этот блок, мне кажется, нужно в активатор LateUpdate() а не просто Update() (popcorn1)

Re: Antares VIZIO

СообщениеДобавлено: 25 дек 2010, 22:31
gnoblin
Новый кастом блок MouseOrbit

mouse_orbit.png


Синтаксис:
Используется csharp
using Antares.Vizio.Runtime;
using UnityEngine;

[VisualLogicBlock("Mouse Orbit", "Custom Blocks", ParentName = "Camera-Control")]
public class MouseOrbitBlock : LogicBlock
{
    [Parameter(VariableType.In, typeof(Transform), Name = "Looker Transform")]
    public Variable looker;

    [Parameter(VariableType.In, typeof(Transform), Name = "Target Transform")]
    public Variable target;

    [Parameter(VariableType.In, typeof(float), Name = "Distance", DefaultValue = 10f)]
    public Variable distance;
    [Parameter(VariableType.In, typeof(float), Name = "xSpeed", DefaultValue = 250f)]
    public Variable xSpeed;
    [Parameter(VariableType.In, typeof(float), Name = "ySpeed", DefaultValue = 120f)]
    public Variable ySpeed;
    [Parameter(VariableType.In, typeof(float), Name = "yMinLimit", DefaultValue = -20f)]
    public Variable yMinLimit;
    [Parameter(VariableType.In, typeof(float), Name = "yMaxLimit", DefaultValue = 80f)]
    public Variable yMaxLimit;

    [Parameter(VariableType.Out, typeof(string), Name = "Error")]
    public Variable error;

    //[Parameter(VariableType.In, typeof(float), Name = "x")]
    private float x = 0.0f;

    //[Parameter(VariableType.In, typeof(float), Name = "y")]
    private float y = 0.0f;

    [EntryTrigger]
    public void In()
    {
        Transform targ = target.Value as Transform;

        if (targ != null)
        {
            Transform thisTransform = looker.Value as Transform;//Component.transform;

            x += Input.GetAxis("Mouse X") * (float)xSpeed.Value * 0.02f;
            y -= Input.GetAxis("Mouse Y") * (float)ySpeed.Value * 0.02f;

            y = ClampAngle(y, (float)yMinLimit.Value, (float)yMaxLimit.Value);

            Quaternion rotation = Quaternion.Euler(y, x, 0);
            Vector3 position = rotation * (new Vector3(0.0f, 0.0f, -(float)distance.Value)) + targ.position;

            thisTransform.rotation = rotation;
            thisTransform.position = position;

            ActivateTrigger();
        }
        else
        {
            error.Value = "Target is NULL";
            ActivateTrigger("Error");
        }
    }

    public override void Awake()
    {
        Transform targ = target.Value as Transform;

        if (targ != null)
        {
            Transform thisTransform = looker.Value as Transform;

            Vector3 angles = thisTransform.eulerAngles;
            x = angles.y;
            y = angles.x;

            // Make the rigid body not change rotation
            if (thisTransform.rigidbody)
                thisTransform.rigidbody.freezeRotation = true;
        }
    }

    public override void OnInitializeDefaultData()
    {
        RegisterOutputTrigger("Exit");
        RegisterOutputTrigger("Error");
    }

    static float ClampAngle (float angle, float min, float max)
    {
            if (angle < -360)
                    angle += 360;
            if (angle > 360)
                    angle -= 360;
            return Mathf.Clamp (angle, min, max);
    }
}

Re: Antares VIZIO

СообщениеДобавлено: 25 дек 2010, 22:59
gnoblin
SmoothFollowBlock

smooth_follow.png


Синтаксис:
Используется csharp
using Antares.Vizio.Runtime;
using UnityEngine;
/*
This camera smoothes out rotation around the y-axis and height.
Horizontal Distance to the target is always fixed.

There are many different ways to smooth the rotation but doing it this way gives you a lot of control over how the camera behaves.

For every of those smoothed values we calculate the wanted value and the current value.
Then we smooth it using the Lerp function.
Then we apply the smoothed values to the transform's position.
*/

[VisualLogicBlock("Smooth Follow", "Custom Blocks", ParentName = "Camera-Control")]
public class SmoothFollowBlock : LogicBlock
{
    [Parameter(VariableType.In, typeof(Transform), Name = "Looker Transform")]
    public Variable looker;

    // The target we are following
    [Parameter(VariableType.In, typeof(Transform), Name = "Target Transform")]
    public Variable target;

    // The distance in the x-z plane to the target
    [Parameter(VariableType.In, typeof(float), Name = "Distance", DefaultValue = 10f)]
    public Variable distance;

    // the height we want the camera to be above the target
    [Parameter(VariableType.In, typeof(float), Name = "Height", DefaultValue = 5f)]
    public Variable height;

    [Parameter(VariableType.In, typeof(float), Name = "Height Damping", DefaultValue = 2f)]
    public Variable heightDamping;

    [Parameter(VariableType.In, typeof(float), Name = "Rotation Damping", DefaultValue = 3f)]
    public Variable rotationDamping;

    [Parameter(VariableType.Out, typeof(string), Name = "Error")]
    public Variable error;

    [EntryTrigger]
    public void In()
    {
        Transform targ = target.Value as Transform;

        // Early out if we don't have a target
        if (targ != null)
        {
            Transform thisTransform = looker.Value as Transform;//Component.transform;
       
            // Calculate the current rotation angles
                float wantedRotationAngle = targ.eulerAngles.y;
                float wantedHeight = targ.position.y + (float)height.Value;
                       
                float currentRotationAngle = thisTransform.eulerAngles.y;
                float currentHeight = thisTransform.position.y;
               
                // Damp the rotation around the y-axis
                currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, (float)rotationDamping.Value * Time.deltaTime);

                // Damp the height
                currentHeight = Mathf.Lerp (currentHeight, wantedHeight, (float)heightDamping.Value * Time.deltaTime);

                // Convert the angle into a rotation
                Quaternion currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);
               
                // Set the position of the camera on the x-z plane to:
                // distance meters behind the target
                thisTransform.position = targ.position;
                thisTransform.position -= currentRotation * Vector3.forward * (float)distance.Value;

                // Set the height of the camera
            Vector3 pos = thisTransform.position;
                pos.y = currentHeight;
            thisTransform.position = pos;
               
                // Always look at the target
                thisTransform.LookAt (targ);

            ActivateTrigger();
        }
        else
        {
            error.Value = "Target is NULL";
            ActivateTrigger("Error");
        }
    }

    public override void OnInitializeDefaultData()
    {
        RegisterOutputTrigger("Exit");
        RegisterOutputTrigger("Error");
    }

}

Re: Antares VIZIO

СообщениеДобавлено: 26 дек 2010, 01:22
gnoblin
Хочется сделать на кастомблоках что-то такое:

lerpz3.png

Re: Antares VIZIO

СообщениеДобавлено: 26 дек 2010, 06:55
gnoblin
скрипт -> граф

graph1.png


Синтаксис:
Используется csharp
var mySound : AudioSource;
var go : GameObject;

function Update() {
if (Input.GetKeyDown("f")) {
   mySound.Play();
   go.SetActiveRecursive(!go.active);
 
   }
}

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 29 дек 2010, 05:43
Neodrop
Вспомогательный визард для кастомных блоков.

Изображение

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 29 дек 2010, 13:07
Neodrop
Протестировано на iOS.
Полёт нормальный.

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 31 дек 2010, 00:33
set_smok
Всех с наступающим!!! А можно узнать приблизительную дату выхода Antares VIZIO, и если не секрет, сколько она будет стоить! :D Всегда было желание научиться програмить, но увы! А с этим делом, самая тема!!! :)

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 31 дек 2010, 14:04
Neodrop
Если успеем - к февралю. Стоить недорого.

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 01 янв 2011, 12:13
FunnyAlien
Помню такое вроде задевалось в конференции, но спрошу еще раз.
Для блондинок данный компонент будет легок? Сразу говорю, блондинка я только в программировании, остальное все хорошо.
А куплю обязательно, такие вещи не валяются на дороге :)

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 02 янв 2011, 11:22
set_smok
FunnyAlien писал(а):А куплю обязательно, такие вещи не валяются на дороге :)

Поддерживаю!!!

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 02 янв 2011, 23:19
Neodrop
Сейчас не очень прост, потому что нужно понимать, что делаешь. Чем дальше, тем проще будет, по мере накопления Smart блоков - реализующих сразу комплекс действий. К примеру, слежение за целью или движение к цели или т.п.

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 03 янв 2011, 11:58
set_smok
Это реально то что нужно, тем кто не владеет или владеет не в совершенстве языками программирования!!! За такое не жалко денег отдать!!! А к ней будут туторы прилагаться!? Об интерфейсе можно в письменном виде, а остальное в видео и конечно же хотелось бы с закадровыми комментариями разработчика :-bd Главное что бы после этого вас из-за бугра не перекупили!? А то мол, давайте у нас [unity 3D] (на нас) поработайте!
В любом случае вы делаете большую и правильную работу! Буду ждать!!! (3A4OT)

Re: Antares VIZIO (Визуальный Редактор Логики)

СообщениеДобавлено: 07 янв 2011, 21:28
PAX
В новой версии будет возможность создавать кастомные инспекторы для смарт-блоков. Некий аналог класса Editor в Unity:
Синтаксис:
Используется csharp
using Antares.Vizio.Editor;
using UnityEngine;

[CustomInspector(typeof(Antares.Vizio.Blocks.GenericBlockTest))]
public class TestInspector : LogicBlockInspector
{
    public override void OnInspectorGUI()
    {
        GUILayout.Label("Hello Universe!");
    }
}  


Результат:
Изображение

Это позволит создавать свой интерфейс для управления блоками.