Code Monkey home page Code Monkey logo

alensia's Introduction

Alensia

Programmer friendly framework to build RPG style games on Unity engine.

Development is on hold indefinitely since Jan., 2018. Please read the Status section below.

Motivation

I've been writing business applications in Scala and Java for quite a long time, but I always wanted to create my own game someday.

I had thought I'll never be able to do that until I discovered Unity is freely available on Linux (which has been my main OS since 2001), and supports C# as its main language. So I was like "Why not?" and decided to give it a try.

But even though I could grasp basics of Unity and C# without too much trouble, I soon realized that it requires certain changes in my attitude, or mentality to follow the way that is recommended by tutorials or any other material I could find on the internet.

As a programmer, I cannot but think that the most important parts of any system I build to be the code itself. I believe that class hierarchies are the conceptual models which represent the system as a coherent whole, for example, and reading API documentation is the best way to figure out any project, and the likes.

However, with Unity, you are supposed to purchase a bunch of items from Asset Store and throw them into your game objects and configure them via GUI. Then you can fill in the gaps with 'scripts' which are often monolithic, heavyweight classes that cannot be instantiated outside the Unity runtime, or be easily reused without copy pasting the source.

As such, you are actually discouraged from designing a coherent structure with class hierarchies, and it's not easy to follow commonly regarded best practices in programming, like 'programming to interfaces, rather than implementations', or preferring POCOs to improve testability, and etc.

I'm not saying the Unity's way is inherently bad. But at least for those people who have strong programming background and intend to create a game on their own, I thought there coud be a better way for them to utilize their knowledge.

Requirements

  • Unity 2017.1 with .NET 4.6 API compatibility (Change in Player Settings).
  • Zenject 5.3.0 or later.
  • UniRx (Requires ENABLE_MONO_BLEEDING_EDGE_EDITOR, and ENABLE_MONO_BLEEDING_EDGE_STANDALONE scripting symbol).
  • UMA (Optional) Used for UMA integration API and demo.
  • Reorderable List

The demo requires Standard Assets package to run, but strafing moves(A and D key) won't work as intended, because it does not provide any suitable animations.

Status

Development is on hold indefinitely, since I decided to move to Godot engine and start over. I already started a new project named Alley Cat to continue pursuing my goal.

You can read about my motivation of the decision here, if you like.

For historic purposes, you can see how the development had been going from the official forum thread or the project's YouTube channel.

FAQ

What is 'Alensia' anyway?

Sorry, I have no idea. The name just came up to my mind.

Isn't there everything you need on Asset Store already? Are you really that poor so you can't affford to buy anything?

As I've written my motivation above, I wanted to make a foundation on which I can build my game in a way that I feel the most comfortable and intuitive.

In a word, it's a 'programmer's framework', for those who prefer writing codes to tweaking GUIs like me.

Besides that, there are not many options if you want to make an open source game, as only a few items on Asset Store supports such an usage.

So, as a supporter of open source movement, I want to help people creating open source games, and also hope that my project would benefit from contributions by similar minded people in future.

So, it's just a framework then? Where's the real game?

I'm planning to create one based on this framework, but haven't decided what exactly would it be yet. So I just decided to create a generic framework first, so I can build upon it later.

When can I expect to see it finished, or at least become remotely usable?

Maybe in next 10 years? (I hope Unity will still be there then.)

Feedback

Other than using the issue tracker at the project page, You can visit the official forum thread here and leave your comments.

License

This project is provided under the terms of Apache License, Version 2.0.

alensia's People

Contributors

mysticfall avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alensia's Issues

Feature `expression bodied members' cannot be used because it is not part of the C# 4.0 language specification

Full error

Assets/Alensia/Core/Locomotion/AnimatedLocomotion.cs(14,46): error CS1644: Feature `expression bodied members' cannot be used because it is not part of the C# 4.0 language specification

One of many errored lines.

        public bool UseRootMotionForRotation => _settings.UseRootMotionForRotation;

How do I make it work with Unity? Can we have How to install/run section in readme.md please.

Consider moving UI resources to AssetBundle

Currently, all UI resources like themes, icons, or component prefabs reside in a Resources folder, which is considered a discouraged practice by Unity.

We should consider moving them to other locations like an AssetBundle, for instance.

Provide character customization API and demo

With prototype UI and UMA integration API in place, now we can start implementing necessary features to create and customize characters, with which we can also create a demo scene, similar to what is provided by UMA package.

It's also advisable to make the API as generic as possible, so that we can integrate with other character systems, like Morph3D's, for instance.

Dump Signal in favor of IObservable

Even though Signal supports UniRx by default, it proved to be quite cumbersome to declare them as dependencies, especially when there are more than one instances that use them as events.

So, it seems to be better to provide a unified method for handling events based on UniRx.

Fix delay before opening main menu

Currently, there's a noticeable delay before the main menu shows up for the first time. We need to profile the process to see if there's potential bottleneck and remove the overhead.

Review usage of virtual methods

In some cases, such methods that perform crucial functionalities (i.e. releasing a resource) are marked as virtual, making extending classes susceptible to introduce unexpected errors.

We need to review such cases, so to make it sure all the classes are extensible without being fragile from such changes.

New UI API based on uGUI

Even though we already have a prototype implementation for an API wrapper around IMGUI, its future seems to be unclear as it's been superseded by the new, game object based uGUI, which also might be a better choice for building in-game UI elements.

So, we need a new API layer for uGUI, which would provide a tight integration with other parts of the platform.

The current requirements and planned features are:

  • It should supports top level windows (popups, draggable windows, and etc).
  • UI elements should be skinnable.
  • Interactive elements should expose Rx/Signal based events.
  • It should provide a streamlined workflow, using both Zenject and prefabs.
  • It should be easy to compose more complex components (i.e. tabbed panel) from smaller ones.

Create API for inventory and equippable items

We need a set of API that deals with managing inventory, and equippable items. Converting a few standard UMA wardrobes into equippable items could be a good place to start.

As always, the API should not directly rely on, or assume any UMA specific features to function

Make array type properties reorderable in inspector

Write a custom property drawer or an editor for array/list types that can rearrange/insert/delete items. Currently, items in style definition assets are automatically sorted on update to workaround (i.e. rename an item to the last and resize the list to delete it) this limitation, but it's unintuitive and error prone.

Consider using ReorderableList to implement this feature:

Design basic API structure to handle interacting with in game objects

We need a common API to handle interactions with in-game objects, like opening a door or picking up an object.

For starters, it might be possible to generalize the existing IHighlightable and IInteratable API so that it can also be used with 3D game objects.

We can use them to implement a prototype interaction API that tracks nearby objects in camera viewport and hightlight them and show proper labels.

Split scene level installer into smaller parts

To make it easier to compose and reuse installer components, we need to replace the current monolithic scene installer class into smaller parts.

This way, it might even be possible to provide ready to use installers as prefabs for commonly used features.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.