2017-01-23 16 views
1

Я делаю воксельные модели, которые мне нравятся, когда я люблю pixelart. Модели, которые я хочу использовать в единстве, - очень маленькие гуманоиды и исключительно для функции.Анимированные воксели, как если бы они были 2d спрайтами в единстве3d. Есть ли лучший способ, чем это?

Поскольку я осматриваю способы анимации этих моделей вокселей, все, что я действительно вижу, это способы добавить кости/буровые установки, создавая гладкую анимацию, которая имитирует стиль воксела.

Я хотел, чтобы эти воксели анимировались так же, как 2D-спрайт анимирован. Например, моя лучшая и до сих пор единственная техника для прыжковой анимации - уничтожить стоящий воксельный объект и мгновенно создать экземпляр объекта модели воксельного прыжка, когда я нажимаю прыжок. Никакого перехода не было, просто анимация стиля старой школы; как Марио.

Мой код это будет (очевидно, не в буквальном смысле, но вы получите идею):

if (player presses jump){ 
    destroy.this.gameobject 
    instantiate prefab (jumpmanvoxelmodel) 
} 

Является ли это действительно лучший способ сделать это на единство? Я делаю каждый кадр анимации в qubicle (в настоящее время), используя постоянный воксель в качестве дочернего объекта, а затем уничтожая и создавая экземпляры различных сборников (которые служат кадрами анимации) относительно ввода пользователя.

Кто-нибудь оживляет вокселы без снаряжения? Я лаяю неправильное дерево?

Благодаря

Это то, что я имею в виду, если это неясно: https://www.youtube.com/watch?v=u2e8lfViIxg

+0

Возможно, вы столкнулись с множеством неприятных препятствий с таким подходом к созданию игрового мира - он не очень хорошо работает с ожидаемым использованием Unity. Написание собственного движка для этого было бы идеально, честно. В этом изолированном сценарии я бы сказал, что вы не должны создавать/уничтожать объекты для каждого фрейма - просто активируйте/деактивируйте их, или ваша производительность во время выполнения будет ужасно страдать. – Serlite

ответ

2

Я предлагаю вам относиться к вексельным моделям точно так же, как если бы они были 2D спрайтами. Возьмите сетку каждого кадра анимации и просто переключите сетки. Таким образом, вы не создаете мусорные предметы, которые должны собирать сборщики мусора.

Вот базовый пример, который длится от первого до последнего кадра снова и снова.

class MeshAnimation : MonoBehaviour 
{ 
    public Mesh[] frames = new Mesh[0]; 
    public float animationSpeed = .1f; 

    private float animationStartTime; 
    private int currentFrame; 

    void Start() 
    { 
     currentFrame = 0; 
     animationStartTime = Time.time; 
     UpdateMesh(); 
    } 

    void Update() 
    { 
     currentFrame = Mathf.FloorToInt((Time.time - animationStartTime)/animationSpeed); 
     currentFrame = currentFrame % frames.Length; 
     UpdateMesh(); 
    } 

    void UpdateMesh() 
    { 
     GetComponent<MeshFilter>().mesh = frames[currentFrame]; 
    } 
} 
+0

Ну ладно, поэтому вместо того, чтобы уничтожить их, просто измените их. Я попробую это, когда закончу все модели. Я думал, что уничтожить их было не так - спасибо. – PajaNBadger