Четверг, 14 Ноября 2024, 10:54

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как создать контроллер анимации через код? [РЕШЕНО]
dzrone3488Дата: Пятница, 04 Января 2019, 23:12 | Сообщение # 1
участник
Сейчас нет на сайте
В игре будет возможность создавать своих персонажей загружая кадры и настраивая скорость. Все существующие персонажи сделаны путём индивидуального контроллера. Как создать контроллер для нового персонажа через код? Как сохранять я в принципе понимаю (при условии если есть возможность создать программно)

Вот код с Scripting API:
Код

using UnityEngine;
using UnityEditor;
using UnityEditor.Animations;
using System.Collections;

// Create a menu item that causes a new controller and statemachine to be created.

public class SM : MonoBehaviour
{
    [MenuItem("MyMenu/Create Controller")]
    static void CreateController()
    {
        // Creates the controller
        var controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath("Assets/Mecanim/StateMachineTransitions.controller");

        // Add parameters
        controller.AddParameter("TransitionNow", AnimatorControllerParameterType.Trigger);
        controller.AddParameter("Reset", AnimatorControllerParameterType.Trigger);
        controller.AddParameter("GotoB1", AnimatorControllerParameterType.Trigger);
        controller.AddParameter("GotoC", AnimatorControllerParameterType.Trigger);

        // Add StateMachines
        var rootStateMachine = controller.layers[0].stateMachine;
        var stateMachineA = rootStateMachine.AddStateMachine("smA");
        var stateMachineB = rootStateMachine.AddStateMachine("smB");
        var stateMachineC = stateMachineB.AddStateMachine("smC");

        // Add States
        var stateA1 = stateMachineA.AddState("stateA1");
        var stateB1 = stateMachineB.AddState("stateB1");
        var stateB2 = stateMachineB.AddState("stateB2");
        stateMachineC.AddState("stateC1");
        var stateC2 = stateMachineC.AddState("stateC2"); // don’t add an entry transition, should entry to state by default

        // Add Transitions
        var exitTransition = stateA1.AddExitTransition();
        exitTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TransitionNow");
        exitTransition.duration = 0;

        var resetTransition = rootStateMachine.AddAnyStateTransition(stateA1);
        resetTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "Reset");
        resetTransition.duration = 0;

        var transitionB1 = stateMachineB.AddEntryTransition(stateB1);
        transitionB1.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "GotoB1");
        stateMachineB.AddEntryTransition(stateB2);
        stateMachineC.defaultState = stateC2;
        var exitTransitionC2 = stateC2.AddExitTransition();
        exitTransitionC2.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TransitionNow");
        exitTransitionC2.duration = 0;

        var stateMachineTransition = rootStateMachine.AddStateMachineTransition(stateMachineA, stateMachineC);
        stateMachineTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "GotoC");
        rootStateMachine.AddStateMachineTransition(stateMachineA, stateMachineB);
    }
}


А вот и ссылка на Scripting API


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone



Сообщение отредактировал dzrone3488 - Суббота, 05 Января 2019, 02:03
masb8ly-GCДата: Пятница, 04 Января 2019, 23:28 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Если я Вас верно понял, то Вам сюда.

Backend Developer ESIS
Client Side Developer Room8Studio
Technical Leader Lucid Reality Labs
Chief Technology Officer The Intruders
Chief Technology Officer RoyalePlay Games
drcrackДата: Суббота, 05 Января 2019, 01:51 | Сообщение # 3
старожил
Сейчас нет на сайте
Насколько я знаю, вне Unity никак. Это все запекается-оптимизируется при сборке и нет никакого способа получить доступ к оригинальному графу или создать новый
Как костыль, можно использовать AnimatorOverrideController, ссылка в предыдущем посте, но там даже скорость нельзя поменять, не говоря уже о более сложных вещах

Цитата
Вот код с Scripting API:

попробуй собрать игру, оно не соберется) потому что using UnityEditor


Сообщение отредактировал drcrack - Суббота, 05 Января 2019, 02:21
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг