Skip to main content

Aframe Systems and Networked-Aframe

This week saw less direct contribution to the project, and had a greater testing and learning component to it.  Most of my time in the past week was devoted to a different Aframe project that involved a multi-user interaction with a cooperative and competitive component.  I used this project as a guinea pig to test out Networked-Aframe and some more 'advanced' Aframe design patterns (~25 hours).

Networked-Aframe is a framework built on top of Aframe that integrates WebSockets and component syncing to streamline the process of creating multi-user Aframe projects.  The main feature of Networked-Aframe we are interested in was the voice chat support, as we feel it could be a great feature to have for playing the game with friends remotely.  However, I also set out to see if there are other features in the framework that could be useful in developing our project.  An element I did find useful was component syncing, which uses HTML <template/> tags to create entities that have their components synced across all clients.  Only the 'position' and 'rotation' components are synced by default, but implementing custom components is quite simple, as shown below.

NAF.schemas.add({
  template: '#avatar-template',
  components: [
    'position',
    'rotation',
    'scale',
    {
      selector: '.hairs',
      component: 'show-child'
    },
    {
      selector: '.head',
      component: 'material',
      property: 'color'
    },
  ]
});  

The above code, taken from the Networked Aframe GitHub, shows the implementation for syncing the custom 'show-child' component, as well as the 'material' component.  However, due to the nature of our project, where each player will be in their own environment and will not need synced entities, using Networked Aframe just for voice chat may be overkill.

Finally, I also took the time to experiment with the Aframe systems element.  Systems provide overarching management and services to the entire application, and they are often used to manage the game state or NPC elements of games.  These systems rely on events to communicate with various components in the application.  My first attempt was not wholly successful, but I figured out a lot of does-and-don'ts for when it comes time to implement such systems in Build-A-Furniture

Comments

Popular posts from this blog

Sprint 4 - Alpha Presentation and Furniture

This week, the team presented our proposal for our project as well as demonstrated the alpha build. In its current state, the living room and warehouse environments are at their most primitive states and will be developed further over time. In future plans, I will have to redesign the living room to allocate more space to the user. It's currently too small and claustrophobic, which makes it difficult for a VR user to have enough building space. I spent the days prior to the presentation polishing the design comps then producing OBJ files of the environments to insert into A-Frame. I did this by going back and forth between a-frame and Maya and resizing the scene until it was the ideal size. This way, Mitchell is able to simply drag and drop the obj into the project without having to tweak the transformations (~5hrs). Table Model with UVs Chair Model with UVs Shelf Model with UVs After the presentations, I began working on modelling the 3 pieces of furniture that pl...

Storyboard and Physical Layout

I finished up on some graphical elements for the user interaction specification component of the proposal due this coming Friday. This includes the storyboard panels and the physical layout diagram. As I was researching Oculus Rift physical setups, I had to determine how many sensors we would need for our game. I believe that 2 sensors will be sufficient, since we do not need a true 360 degrees experience as the Builder player will primarily be focused on the 180 degree space in front of them (i.e. the fireplace, the TV, and building the furniture). Our game is not an action packed game with any running or shooting. Of course, the player will still be able to fully look around but they shouldn't have a great need to move in the other 180 degrees of space. This would also take into consideration accessibility to our game, because it costs extra to buy a third sensor (the Rift only comes with 2) as well as requiring adapters and wire extensions. I spent about 4 hours researching ...

Building the Shelf and Chairs

With the final submission looming closer, most of my effort was directed at replacing some hard-coded game-play functionality with dynamic data from the Builder and Finder systems (~3 hours), assisting my team with issues they encountered (~2-3 hours), and getting the shelf and chair ready to be built by the players (~8 hours). The Builder and Finder systems still had a few hard-coded values from the Beta build of the project that were specific to constructing the table, so I worked on replacing those with the data that is contained in the instructions arrays that Priscilla and Maxime created this week.  I was initially have problems accessing this array before I discovered that JavaScript arrays can be accessed by string, which simplified it a lot.  Below is an example of the before and after of this process. // Before socket . on ( 'setFurn' , function ( data ) { this . current = data . id ; // Where data.id was always "table" this . step = ...