Skip to main content

Pluggable AI via ScriptableObjects in Unity3d

I mentioned before that I was studying the pluggable AI tutorials, and still am. Can't say I fully get the idea, but yesterday I managed to assemble a little test, modify the original code, and improve it. I strongly recommend that you watch this conference (and the tutorials):



The tutorial uses an StateManager class which deals with updating the states (states are ScriptableObjects, which lacks the Update() method) and also serves as a repository to keep information. ScriptableObjects should not keep entity related info, as all the entities would be sharing the same object and thus, that would be a problem. Any data needed in states, decisions or actions should be provided by the state manager, so, each entity has one. An state has an action and a decision. Depending of the decision being true or false, it can transition to other two states. That's all... mostly.

The main advantage is modularity. I can write specific states and actions for each NPC, but of course, the ideal is to share as much states, decisions and actions as possible among the entities. These AI components can be assigned from the editor to the entities, could be a bit confusing, but it is not super complex.

In my little test, I added code to keep a list of flags, so the NPC greets the player when sees it, but doesn't keeps greeting again and again, until 5 seconds later, when the flag expires. I am still thinking how to implement a combat system, maybe this weekend I will solve that.

Comments

Popular posts from this blog

Isometric camera with Godot

Took some effort and some of my sleep hours, but at last, I made it. Here is my first videotutorial: implementing an isometric camera in 3D, with Godot. Useful if you want to emulate the look of old classics like Fallout 2, but with some extra features. Considering that my voice is not so nice, and my english pronounciation is even worse, I also added texts to help you underestand what Im saying. You will also notice some background noise, but cant do anything to solve that. Any suggestion is welcome. Expect another tutorial soon.... or sor tof. This time, will be about my AI system.

Unity3d isometric camera tutorial

I had pending this since a month ago, so Im forcing myself to post it today. The goal is to provide a fully functional isometric like system that you can use with few or none modifications in your own game. So, lets get started. Start Unity3d and in your scene, add an empty GameObject, we will call it target . Create a camera object and drag it to target to make it child. The result looks like this: Now select Camera and set the values to this: For a true isometric like feeling, ortho projection is essential. You could use perspective, but it is not the same. Play with Size to suit your needs (we will be using this later, when implementing zoom). Now, lets create an script named CameraController, or whatever, and drag it to target GameObject. Lets implement scrolling, the easier part: go to Update() and add the following code: if (Input.GetKeyDown(KeyCode.W)) {             dir = UP;         } e...

Tutorial: building a modular character

Building character models with body parts have been an obsession for me in the last weeks. I have googled, asked, googled, and asked again, played with Unity3d editor, tested code, and so on. You can see the result of my work in the previous post . First of all, I have to say that what I achieved is mostly derived from this thread and the sample posted there. My code is a copy&paste of that sample. Also, you can find a more extense solution in this Gamedev.net forum thread . First, lets start with the model, which obviously, is divided in the required sections. Lets say we have head, torso and legs. Each part must be exported to a separate fbx file, but it must include the skeleton. Then, export the skeleton without geometry to another fbx. Im going to assume that you want to instantiate all components, and even player, at runtime, from a  C# script (no Unity editor involved, except for creating prefab an position marker), so, we will place the sections, the skeleton and ...