The keyboard is one of the most commonly and widely used devices around the world as a form of input when interacting with computers. A keyboard is composed of buttons which are referred to as ‘keys’. The keys are arranged into five sections: Alphabetical keys, F Keys, Numerical keys, Arrow keys, and Command keys.
The advantages of a keyboard are that:
- Typing on a keyboard is fast and accurate
- Growing up people have been trained to use keyboards, so they are familiar with them
- Keyboards can come in different forms, for example, ergonomic keyboard, gaming keyboard, DVORAK keyboard
The disadvantages of a keyboard are that:
- If you are not good at touch typing, it can be more cumbersome to use
- Disabled people find it difficult and struggle to use keyboards
- Excessive use of a keyboard can lead to a health problem like repetitive strain injury which causes pain in the wrist
- It is easy to make typing errors
- Malware can be installed on devices to log keystrokes of sensitive information e.g. banking account info, passwords and credit card information
In conclusion, a keyboard is a suitable input device for people who are not disabled and are good at touch typing by practising on websites such as type racer to improve their WPM. However, If a person is excessively using a keyboard, they can develop RSI (Repetitive Strain Injury) so they may have to use a different keyboard design such as an ergonomic one which is designed to be used in a more natural way relieving the stress of the wrist.
A mouse is another one of the most commonly and widely used devices around the world as a form of input when interacting with computers. A mouse works by having a cursor on the screen which you can control by moving the mouse on your desk and then clicking and selecting items that are present on the screen.
A standard mouse is composed of two buttons (left and right) and a scroll wheel which sits in between these two buttons. Some mice, for example, a gaming mouse can have 5 buttons which are usually on the left side of the mouse.
The scroll wheel button’s function is to go up and down the page, the left button primarily allows you to select items, open them etc. The right button primarily opens a menu with relevant actions to where you clicked. If your mouse has the two extra buttons on the side the upper button is to go forward a page and the lower button is to go back a page.
Mice nowadays usually have an optical sensor which tracks the movement of the mouse which corresponds to the movement of the cursor on the screen. With most mice, you can also change the speed at which the cursor moves at by changing the mouse’s ‘DPI’ setting which stands for dots per inch which is how sensitive the mouse is to when you move it.
The advantages of using a mouse are:
- Movement flexibility – a mouse allows a user to freely move the cursor in any direction
- Mice come in different shapes and sizes to suit personal needs, e.g. Vertical ergonomic, left handed, wireless
- Ease of use – requires little practice to use as it is intuitive
The disadvantages of using a mouse are:
- Need a flat desk space with no obstructions in the way to use the mouse
- Excessive use of the mouse can cause repetitive strain injury which causes pain in the wrist
- They can get easily damaged for example damaging the wiring and they get clogged up with dirt
- If using a wireless mouse it must be recharged when it runs out of battery and some wireless mice cannot be too far away from the computer otherwise they lose signal
In conclusion, a mouse is a reliable input device for the majority of people as it is quite easy to use due to its intuitiveness and it is highly customizable for example, you can change the sensitivity you can get them made in different shapes like an ergonomic mouse or you can get it in a smaller size for people with smaller hands. However, if used too often you can get wrist injury such as RSI, the wiring gets damaged slowly over the time and decent amount of flat desk space is needed in order to utilize the mouse.
A concept keyboard which is also known as an ‘overlay’ keyboard is a specialized keyboard which has no preset/programmed keys. The keys can be reprogrammed to perform any function given to it. Usually, an overlay sheet that contains pictures or symbols is shown so the user can infer what pressing on the different keys will do.
Concept keyboards are typically used when input needs to be entered quickly and the user has a fairly limited range of choices to make, for example, a fast food restaurant like McDonalds has machines which contain an overlay keyboard to make the process of ordering faster, easier and simpler especially since there is a different language option.
Concept keyboards are also used in other locations where a normal keyboard might not be the best choice because it could get damaged or stolen, for example, at train stations the ticket machine has an overlay keyboard to speed up the process of buying a ticket instead of using a normal keyboard which over time could have its keys damaged by the multiple uses of different people.
The advantages of using a concept keyboard are:
- Allows for fast data entry through the use of symbols and pictures
- It is waterproof and damage-proof because it is a screen which is useful when being used by multiple different people
- It is tamper proof as people only have a limited range of valid options to choose from, they cannot enter something which could corrupt the system
The disadvantages of using a concept keyboard are:
- Makes the screen dirty as multiple different people use it, they leave their dirt and oils from their fingers behind
- If used excessively it can cause repetitive strain injury because it places the wrist in an unnatural position which is bad for its health
- Limited to the options shown on the overlay sheet
In conclusion, concept keyboards are ideal for when users need to perform different tasks quickly and easily because concept keyboards have symbols and pictures which users will quickly recognize and can click on which will perform a function. However, concept keyboards can make the screen that is being touched dirty, if used excessively can develop health problems such as RSI and the options are limited as to what is shown on the overlay sheet.
Voice input is software which uses speech to input data or executes commands. This works by having an input device that can take in sounds like a Microphone, then with software such as speech recognition is used to interpret what was said and then data is inputted, or a function is executed depending on what was said.
Voice input can be used to assist people who have a disability such as their body being paralyzed. With voice input you can get the system to perform functions such as opening the web browser, navigating to a page, reading out the text for you etc. This shows that voice input has made a significant effect on the way some individuals interact with computers.
The advantages of voice input are:
- Users can control devices and perform different tasks with ease
- Voice input can enter data faster than if you were to manually type it
- Automates and simplifies the process of conversations that do not require a human, for example when calling a college voice input can direct you and send you to the department you wish to speak to
The disadvantages of voice input are:
- There is a concern of the privacy of speech being recorded, people are concerned that manufacturers are recording all speech that the voice input device can pick up
- Errors and incorrect interpretations of words, sometimes the speech recognition makes an error or interprets what you said incorrectly because of your tone of voice or other factors
- Limited vocabulary, the speech recognition can only recognize words that are in its vocabulary so jargon words, abbreviations or strange words that are not in its vocabulary it will not be able to match and it will get confused
In conclusion, voice input is ideal for people who are limited in the way they can interact with computers or people who find it more efficient for a computer to recognize what they say and then the software interprets it and writes it to a document than for the person to manually type it. However, voice input has its downsides such as having a limited vocabulary, misinterpreting words and the concern of privacy of people using voice input.
A joystick is an input device which is commonly used in video games or aircraft or graphical applications. Its purpose is for controlling the way a cursor moves or a pointer on a screen. The movement of the cursor on the screen is controlled by moving the lever on the joystick.
The joystick is used a lot in situations where there is a need for accurate pointing or when precise cursor movement is needed. There are many types of joysticks, like the finger-operated joysticks, thumb-operator joysticks, hand-operated joysticks, displacement joysticks etc. Joysticks are very similar to a mouse in terms of the cursor movement and the way you use it, they also just like the mouse has buttons which are also known as triggers. The main difference between a mouse and a joystick is that the cursor continues moving in the direction that the joystick is being held in whereas on the other hand the cursor for a mouse is only moved when the mouse is moved.
The advantages of a joystick are:
- It has fast interaction as an input device which is a necessity when it comes to gaming
- It has a simple design that is intuitive and easy to use for beginners
- It is relatively cheap
The disadvantages of a joystick are:
- Entering textual or numerical data can be harder and slower than using a keyboard
- Limited directions of movement, some joystick only provide four ways of moving which are: up, down left and right
- Not robust, joysticks, when used excessively and with too much force, can break quite easily
A touch screen is a device which allows for you to enter input whilst at the same time receiving output as well from the same device. On the device, it will display your possible options as output and then by using your finger as the input you can interact with the option you selected.
Touch screens work well in places that have a menu interface, for example, at a bank cashpoint it will give you a list of options to click on and you would select the one you want to do if you clicked on the option ‘Deposit cash’ it will update the screen with new output saying something like ‘How much cash do you want to deposit?’ when you click on that the screen would update again prompting you to enter your card and money.
Touch screens are primarily used on smartphones and tablets because it is extremely simple and effective to use, you interact with each app by clicking on their icon and then the buttons inside the app. They are also used in other places like at information centres in shopping centres, ticket offices etc.
The advantages of touch screen are:
- Easy to use, extremely simple and very intuitive
- No extra peripherals are needed because it is an input and output device at the same time
- It can do more complex actions such as recognizing finger gestures to perform functions such as zooming, selecting, deleting etc.
The disadvantages of touch screen are:
- It’s not suitable when entering a large amount of data such as writing a document
- Not accurate when interacting with detailed objects by using your finger
- Exhausting when used for long periods of time
In conclusion, a touch screen is ideal for devices where it would be best for input and output to be integrated together for ease of use for example a cashpoint. However, touch screens are not ideal for all things as when entering lots of data, they are not suitable and much slower compared to using a keyboard.
Personal digital assistant
The term personal digital assistant can mean two things nowadays, virtual assistant software on devices such as Siri, Google Now, Amazon Alexa and Cortana and there is also the device PDA which is referring to the small mobile handheld device which could perform the same tasks as the virtual assistants.
A personal digital assistant is a small mobile handheld device which can do computing and store information such as reminders, calendars and phone address books. A PDA essentially works as a personal information manager. PDAs nowadays have been taken over by the more capable smartphones such as iPhones and Androids.
PDAs can connect to the internet, they have an electronic display which allows you to use the web browser to surf the internet. They also have sound drivers which allow you to store and play music on the media player application. Some PDAs use buttons which you can click on to interact with it and some use touch screen technology with is combined with a stylus to interact.
A virtual assistant which is also referred to as an AI assistant/ digital assistant is software that uses speech recognition to recognize a user is asking it to do and then completes the task for them. These tasks can range from, reading texts/emails aloud, sending text messages/ calling phone numbers, setting reminders and schedules and other tasks like checking the weather, reading out the news, getting directions etc. Virtual assistants usually require an internet connection in order to work.
The advantages of a PDA are:
- It has extensive internet connectivity, it allows you to connect with the internet almost anywhere so you can check up on emails, calls and texts
- Good for organizing, it makes people more organized as they can make notes of appointments, events and schedules
- Handwriting recognition, it can recognize your handwriting and convert it to text by using optical character recognition allowing you to quickly store things like notes
The disadvantages of a PDA are:
- Cost, it can be quite costly to buy the PDA device and on top of that a lot of PDAs also require a subscription to be paid for as well which increases the cost by even more
- Distracting, PDAs can become distracting because of its high functionality a business’ employees may get bored with their work and start playing games, surfing the web or checking texts from friends
- Fragile and easy to break, it can be quite easy to scratch the device or break the screen if not taken care of properly and a lot of PDAs are not even waterproof so even small things like the rain can harm them
In conclusion, PDAs are ideal for people who have lots of things on their agenda that they need to keep track of and remember because the PDA allows you to schedule things and set reminders for these things. However, PDAs are not ideal for people who are not good at taking care of things as they are quite delicate so they can easily be broken if not taken care of properly.
The advantages of a virtual assistant are:
- Quick at performing tasks rather than doing manually, for example, you can say ‘Hey Alexa set a reminder for tomorrow of Doctor Appointment’ and it will do it in a couple of seconds which is faster than manually going to the app, typing it out and settings the reminder date
- It can read out the text from a page, for example, you can ask Cortana to navigate to a web page on the internet and then it can read the text aloud for you, this is very useful for blind people
- Users have access to tons of knowledge by querying the virtual assistant any question and it will find an answer from the internet
The disadvantages of a virtual assistant are:
- Comprehension difficulty, sometimes the virtual assistant can have trouble understanding what you are saying, it can misinterpret what you said and give you the wrong result
- Privacy concern, people are concerned that these virtual assistants are listening in and picking up on things that are considered as red flags and reporting it to authorities
- Security issues, there are concerns of the security of these virtual assistants, for example, people could hack into your Amazon Alexa to find out your location, or if you have smart locks configured with Alexa they can hack Alexa and use it to open the locks then break into your house
In conclusion, a virtual assistant is ideal for people who want to perform simple tasks quickly like setting a reminder or asking the virtual assistant to read out information to them like the news. However, virtual assistants have its downsides as well such as incorrectly interpreting what was said and security concerns of how safe it is to have a virtual assistant like Alexa.
Digital Audio Broadcasting
Digital audio broadcasting is audio which is broadcasted from a network of transmitters worldwide. It is done by converting analog audio into a digital signal which then gets transmitted on an assigned channel in between an AM and FM frequency range. When transmitted the signal is compressed using MPEG algorithms.
It also uses digital technology which allows broadcasts to combine different radio stations together, this is referred to as multiplexing. These multiplexed radio stations then get broadcasted on a single frequency network which is highly efficient because it allows a lot more radio stations using fewer radio frequencies.
People who have radios must have a receiver which is equipped to be able to handle DAB signals.
The advantages of digital audio broadcasting are:
- Listeners have very good reception using a simple antenna
- There is no signal fading at all or interference
- It is user friendly as no station finding has to be done
The disadvantages of digital audio broadcasting are:
- High battery consumption, DAB batter is consumed rapidly
- Sound quality is not the best
- Expensive cost to transmit both analogue and digital
In conclusion, digital audio broadcasting has its advantages such as having good signal/reception anywhere with no interference/signal fading. However, it also has its disadvantages as high batter consumption limiting the amount of use and the sound quality not being its best.
A monitor also referred to as a display screen is one of the most commonly used devices for output. Monitors can come in various different sizes and shapes, usually the bigger the size the more expensive the monitor will be.
A monitor can either be an LCD or LED screen. LCD screen work by having millions of tiny dots which are formally known as pixels. These pixels each contain a red, green and blue light filter which are adjusted in order to create the correct colour to display on the screen. This works because inside of each pixel there are liquid crystals which are able to be manipulated to control how much of fluorescent tube backlight goes through to the individual RGB filters on the display.
LED screens work very similarly to LCD with one notable different which is the light source. In LED screens the pixels are provided light with LED bulbs instead, these LED bulbs can either completely fill the back of the display unit, or around the edges which can allow the screen to be even thinner.
The advantages of a monitor are:
- High resolution images
- Low power consumption, therefore, it won’t cost you lots of electricity
- Reach maximum brightness quickly, it’s easier to look at the screen without it being too dark
The disadvantages of a monitor are:
- It takes up a lot of space
- Expensive and delicate, the bigger the screen the more expensive it will be
- Health concerns with radiation and eyesight, monitors let off low frequency radiation and microwave radiation and looking at monitors for too long can be bad for your eyesight
In conclusion, monitors are ideal for people who want sharp high resolution images maybe because they are doing work that is very detailed like drawing. However, a monitor takes up a lot of space and can be quite expensive depending on its size.
Voice output which is more commonly known as text to speech (TTS for short) is a form of assistive technology which its role is to read digital text aloud to the user. Voice output works on nearly all devices including phones, laptops, personal computers etc. It can read all sorts of texts ranging from word documents to web pages.
It has customizable features such as the voice reading aloud the text, the pace at which it reads the text aloud and more. Voice output can work in many ways for example, by using a technology called optical character recognition (OCR for short) voice output can convert characters from an image into a digital text file which it can then read aloud.
There are many types of voice output such as:
- Built in TTS, this type comes with the device
- Web based TTS, this type may be present on a web browser which can be enabled or disabled
- App TTS, on tablets or phones there are apps which can be downloaded that provide TTS
- Chrome Tools, the chrome web browsers come with a built in one which can be used
- TTS software, this is software you can download onto your device which is capable of performing TTS however sometimes these can cost money because of its features but there are always free alternatives
The advantages of voice output are:
- Supports people with a disability who cannot read the text
- It helps alleviate eye strain from reading lots of text
- It can be used for listening to e-books or e-material on longer journeys
The disadvantages of voice output are:
- It can be taxing on the system because it uses a lot of computer processing
- It can struggle with pronouncing words that it’s not familiar with
- The TTS speech voice does not sound as natural as a human voice
In conclusion, voice output is very beneficial for people who have vision problems so they cannot read text however it does not sound as natural as if an actual human were to read the text aloud.
Interactive whiteboards are large screens that are the size of whiteboards and are nailed to a wall. These interactive whiteboards are usually in every school classroom and they work by being connected to the computer which is also connected to a digital projector so whatever shows up on the computer screen will be displayed on the interactive whiteboard.
Interactive whiteboards will come with pens that can be used to draw on them which allows you to interact on them making education a more interactive experience.
Digital projectors are a device which gets directly connected to a computer and then projects video output onto the interactive whiteboard. These digital projects are usually attached to a ceiling and they are fairly large in size.
The advantages of an interactive whiteboard are:
- They make a learning environment more interactive
- The large screen makes it easier for all people to visually see than if people were to squint their eyes from a far distance away at a monitor
- It is more productive
The disadvantages of an interactive whiteboard are:
- It takes up a lot of spaces
- It is quite expensive
- It requires some digital skills to setup to get working properly
In conclusion, interactive whiteboards are good as they allow students in a learning environment to have a better experience and more productive lessons but interactive whiteboards do take up a lot of space in the classroom and they are quite expensive.
In my game, we used the leap motion controller as our input device for interacting with the game and a monitor for output. Leap Motion is a device which has accurate optical hand tracking technology that tracks the movement of your hands including things like bending fingers, making fist actions etc.
I had two other peers and myself test my game and here is footage to show it.
As can be seen from the videos the game works properly with the wall being moved to a random place between a set boundary and sometimes shifted at a 45 degrees angle to make it easier to hit the wall.
If the ball goes out of its set boundaries or hits the wall it gets repositioned to its starting point.
The score works correctly by updating it depending on where you hit the wall with the ball will reward you with the corresponding amount of points.
My first initial idea of the game I was going to make was a game where there would be a target in the air and you would throw the ball at it, however, I found that it was quite difficult to pick up the ball with the leap motion hands so I just decided to make the target stay on the ground.
Here is a picture showing what my game used to look like:
And here is what it looks like now:
I first started my game by importing the Leap Motion Packages
Next, I added a Plane and a Sphere to which I scaled down to 0.1 on all axes
Then I added the Hand Models replaced the rigid hands with interaction hands and gave them both the interaction behaviour script, added the interaction manager as well and give the interaction behaviour script to it as well as the sphere.
After that I decided it would be easier If I spawned things in, adjusted their properties through scripting so I created a script called ‘Game Code’ and attached to the Main Camera.
Learning how to spawn in objects
Unity scripts are coded mainly in C# which I do not how to code in however I know the fundamentals of C++ and they are pretty similar, so it wasn’t much different/harder for me to code stuff. The first thing I wanted to do was spawn in the planes and sphere which I had no clue how to do so, therefore my first thing to do was research on google and I came across this thread which had exactly what I wanted and a bit more that I needed for later
So I typed this code out to spawn in my objects:
Learning how to change properties of objects
The next thing I needed to do was change the size, position and rotation of objects so again for all things I did I entered my question into the Google search bar and found a thread which contained more or less of what I wanted to do. https://answers.unity.com/questions/805594/how-do-i-change-an-objects-scale-in-code.html I had to change it a bit.
Here is the code I used:
For the rotation part, I had to read a bit on unity’s docs as it was slightly different from changing the position and scale of an object https://docs.unity3d.com/ScriptReference/Quaternion.html
Learning how to add and access components
Now I needed to learn how to add components such as Rigid Body, Interaction Behaviour, colliders and how to access them. With the help of this thread, I understood how to add components and access the properties of that component as well https://answers.unity.com/questions/1705765/scripting-explanation-for-accessing-components-syn.html
Here is a portion of my code for adding and accessing components:
Learning how to select objects by their tag
A crucial step that I needed to be able to do now was select game objects by their tag otherwise I would not be able to objects that are already in the scene, check which colliders are hit or reference other scripts. I found out how to do this from the documentation https://docs.unity3d.com/ScriptReference/GameObject.FindWithTag.html
A section of my code where I did this can be seen here:
Learning how to change the colours of objects and the texture of the wall to a custom picture
To make my game more vibrant and colourful I decided to make the colours of objects randomized and change whenever a point was scored. I found this thread which helped me in order to change the colours: https://answers.unity.com/questions/389027/how-do-you-change-the-color-of-an-obect-cube-cylin.html
When I was trying to load a custom texture onto my target it wasn’t loading properly so I did a bit of debugging and I found that whenever I used ‘Resources.load’ it was returning null but after browsing through a couple of threads I found out that it was because I was including the filename ‘.json’ which you are not supposed to include. These are the threads that helped me: https://answers.unity.com/questions/1411034/textasset-return-null.html
Here is some of my code that I use to change the colours and the code I use to change the texture:
Learning how to use colliders and detect collisions
At this point I had become very familiar with how to script things in unity as it followed the simple pattern of creating an object of that type, adding a component and assigning the object with its return value then using the object to access its properties. Now I needed to check if the sphere and the wall were colliding so first I added a collider component to the wall with this code:
So I had something that looked like this (the green part is the collider box):
Now I had to check for collisions which I was not sure how to do at all but I stumbled across this video on YouTube from the very popular game developer ‘Brackeys’ which really helped me:
and using the unity: docs https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html
So I started off with just a simple collision check and logging the tag of the object that was collided with which looked like this in code:
And gave out the expected result:
So now I had learnt the basics of setting up colliders and interacting with them I had to make two extra for the middle section and the inner center section which looked like this now:
And the code:
The problem I then faced was that for example let’s say my ball hit the center part, it would recognize the collision with the center part but also with the middle and outer part because the outer collider box takes up the outer, middle and center part, and then the middle collider box takes the middle and center part. Therefore, I had to think of an algorithm to solve this which I did with this code:
First I made a list where I would store the names of the tags that were collided with. Then I made a boolean called updateScore and set it to false this was important so we would only update the score once and not multiple times.
Then whenever a collision would happen the collision tags that were collided with would get added to the list. Once the object had finished colliding (exited) then I would first check that I have not already updated the score this was in order to prevent updating the score multiple times, after that, I would then do a sort of hierarchical check.
First I would check if the center part had been collided with because this is the most valuable region if I did then I increase score by 4 otherwise I move onto the middle part.
Now I will check if I had collided with the middle part because this is the second most valuable region if I did then I increase the score by 2 otherwise I check for the outer part.
Here for the outer part, I could have just put my code as an else because firstly the outer function ‘OnTriggerExit’ only gets called if a collision happens and the outer part is the only other part else that I could’ve collided with if I had not collided with the first two. However, for error checking and in the event of something that I did not account for I put the outer part in an else if and added 1 and for the else conditional I left it with an error log so I can try to figure out why an error happened.
Lastly, I change updateScore to true so we don’t update the score multiple times and I clear the lost of collisions for the next time I repeat this process. Note that in ‘onTriggerEnter’ updateScore gets set back to false so this process does happen the next time a collision happens.
And here we can see it worked:
Creating a boundary check
A feature that I decided would be extremely important to my game and to make it less annoying was to make a set of boundaries for my ball so my ball would not go too far to the left and right and not too far forwards and backwards.
So I made a conditional check that would check the position of the ball to make sure that it would not go too far on the x-axis and too far on the z-axis. A problem I faced though was that I had to make the boundaries relative to where the wall was because for example if the wall was more towards the left the boundary for the left would have to be a bit further than the wall otherwise the ball would never be able to go to the left and hit the wall
It took me a bit of time to wrap around my head because of when the x value sometimes could be negative and other times positive which would mess up the calculation, but I eventually got it and I solved it with this piece of code:
And as you can see in the video it clearly works
Resetting the ball
After the ball goes out of boundary I would reset the ball to its original position however because the ball was still spinning and moving forward the ball after being reset would just continue in the direction you last hit it in so I fixed this by freezing its rotation and position on all axes. I did it with this code:
As you can see in this video it partly fixed the problem
I forgot to add the fix for when you touch the wall which is why when the ball touches the wall in the video the ball continues in that direction but I fixed it after the video as my peer reminded me during one of the videos. I did that with this code:
Updating the Wall and making the wall move
For this part, I wanted to make the game a bit more interesting than the wall always being in the same position when you hit it. So, I used the Unity random function to reposition the wall between –1 and 1 on the x-axis. I did it with this code:
To make the game a bit harder I change the angle of the wall to 45 degrees when it is a bit further to the left to or a bit further to the right.
To make the game even more interesting I make the wall move constantly move left to right so between two points at a speed of your current score divided by 10 but this only happens when you have more than 10 points. The code for this looks like this:
It gets updated every frame to check if your score is 10 or above to then move the wall. If your score goes back below 10 then the wall stops moving.
You can see both of these work in the video
Updating scenery, regions and score
For this part, I just had to update the floor and ball colour, boundary regions and the score and the score text whenever I touch the wall. I did it with this code:
The updateWall function first checks if the score is above or equal to 10 so that when the wall is moving left to right it will be facing flat forward.
Then it checks if is a bit far to the left or a bit far to the right in which it will shift at a 45 degrees angle depending on which.
If not then it will set the angle to 0.
All of these functions get called and then the boundaries get updated for the new position of the wall the code looks like this:
If the score is ten or above then I need to make it constantly move between two points which I did with this code:
First, I check if the wall has reached the left side if it has then onto the next conditional if it has not then it will move all the way to the left which exactly is when the x-axis is –1 and then it will say it has reached the left side, but it has not reached the right side and because this process is in the update function it will get called every frame. The same process happens if the wall has not reached the right side. This worked but I ran into a problem where when the score went back below 10 the wall would carry on going to the side never stopping which can be seen in this video:
However, I fixed this by freezing its x position quickly then unfreezing
The code to do all of this in the update function looks like this:
As you can also see in the update function three other functions get called which are UpdateOuterRegion, UpdateMiddleRegion and UpdateCenterRegion which update the regions position to match the wall’s position so it works properly when the wall gets moved to a new position or when the wall is constantly moving, the code for these functions is just simply:
You can see from the videos that these all work as intended.
Quantitative measures of effectiveness
After testing it myself and getting other people to test it we more or less agreed about the effectiveness of everything.
The input speed was very fast because all you had to do to play the game was smack the ball with your hand in the direction of the wall. However, there were issues at time because of the sensor, presumably the sensor was old and dirty so sometimes it would have trouble recognising your hand and would bug out which can be seen clearly in this video:
Overall though the input was speed was good because it was very fast and easy to interact with the ball.
The throughput of the game was fast as well as with C# scripting I dynamically spawned in all the game objects in the right place to the correct scale and whenever an action would happen such as the ball going out of boundaries then the ball would instantly get reset back to its starting point. Another example is when the ball would touch the wall it would instantly reset back to its starting point then the colours of the ball and floor got updated, the score got updated and the position of the wall got randomly selected too. This is all happened quickly because functions that would check for these things were running every frame so if you had 60fps that would mean 60 times per second.
Speed of comprehension output
The speed of comprehension output is also extremely fast because my game is quite simple and intuitive, as you can see from this picture:
You see that there are a ball and a target and at the top, it tells you how many points you awarded depending on where you hit the target and your current score.
A user will process this information very fast and they will get accustomed to playing the game. The user will soon understand that they need to hit the ball by any method that works such as the back of their hand or palm of their hand and depending on where it hits the wall is how many points they will get.
Then after a few successful hits, they will process that the ball randomly changes position and sometimes angle and that there are set boundaries for the ball that will reset the ball.
Also, if the user misses, they lose a point. Then when they get to 10 points, they will process that the wall moves side to side and gets faster the higher the score they have.
The running cost of the game memory is fairly low because my game does not use as many objects and defined textures as a real world game such as a game like ‘Playerunknown’s battlegrounds’, therefore my game will not cost a lot of memory to the computer which means that even low-end computers could run it at a stable fps. However, some parts of my games code could be improved because for example, the speed at which the wall moves at when it is 10 points or above, I am constantly reassigning the speed variable as it is in the update function as can be seen here:
This is inefficient memory-wise as every frame whenever the score is 10 or above the speed variable is reassigned even though it may be reassigned with the same value, so for example if the game is being run at 60 fps, then the speed variable will get updated 60 times per a second which is completely unnecessary. I could fix this by before updating speed I check that the value I am going to assign to speed is not the same as the current speed like this. Which can be simply done like this:
Fully implemented features
All of the necessary features for my game to work have been implemented, this includes:
- Resetting the ball position when it goes out of boundary or touches the wall, I am not aware of anybody else in my class who has this feature as it seems like they have to stop and restart the game which is cumbersome and makes the input speed very slow and reduces user satisfaction
- When the ball touches the wall, it checks which part it hit and updates the score and score text with the correct number of points depending on where it hit the target
- Moving the wall to a random position after it gets hit and changing the angle sometimes to make it more interesting
- Updating the colours of the sphere and floor to signify something happened
- When the user gets to 10 points or above the wall moves left to right at a speed depending on their score so the higher their score the faster it moves
Not included features
There are some features although that I should consider including as recommended by my peers who tested the game. Such as adding more targets to the scene as it gets boring with only one target and very predictable and also doing something about when the ball is slowly moving towards the target as there is a higher success rate of hitting the wall when the wall is moving super fast left to right and the ball is slowly rolling towards it.
Comparison with my old game
The idea of this game is essentially the same as my old game but with the key difference being that the wall is in the air not on the ground, therefore, you have to throw the ball at the target which is trickier then smacking the ball at the target on the ground. However, it is a lot harder to pick up the ball with the quality of the leap motion sensors we were provided, so if I stuck with the old system there would be very slow input speed, very hard to use and low user satisfaction which is why I decided to change it.
Qualitative measures of effectiveness
The user playing the game will feel satisfied to a great extent as all the features have been implemented and the most important feature, in my opinion, is making sure the ball does not go out of the camera view by setting boundaries, otherwise the game would not work at all and a user would never be able to score more than the maximum 4 points as they would have to keep restarting the game over and over again to get the ball back to its starting position. Therefore, this feature makes the user feel very satisfied as they can carry on and continue playing the game normally like how they should be able to. However, some of the time the leap motion sensor will not track the hands properly and it would bug out which can be seen in this video:
This would most likely annoy the user as it interrupted the flow of them playing the game but this is not an issue on my end as the leap motion controller is the one doing the sensor and motion tracking and not my game so I cannot control this. If the sensors were brand new this problem most likely would not be a thing.
Ease of use
It’s very easy to play my game and interact since my game uses a Leap Motion tracking sensor the only form of input is your hands rather than the standard keyboard and mouse combo most games use traditionally. With your hands you can interact with the ball by touching it in any with your hands and after a couple tries of playing the game the user will start to figure out the optimal way to the hit the ball in order to score points and they may create techniques of hitting the ball to hit certain regions on the target.
Not a lot of skills are required in my game you only need to be able to move one of your hands to play the game. With just one of your hands, you can hit the ball in the direction of the target and score points this makes my game very simplistic and intuitive which can attract a lot more people to want to play the game in comparison to a more complex game which requires much more input and specific skills to play the game. The only problem with games that are very simplistic is that they can get boring after a while because there is not much variation in them.
Usefulness of results
The results are very useful because of the scoring system of my game. My game has a scoring system similar to the way the game ‘Darts’ works as there are three regions which I call the outer, middle and center and depending on which region you hit will be how many points your score increases by.
By having a reward system like this it motivates the user to play the game and score as many points as possible, I have not seen any other classmates with a scoring system so their game may feel like there is no motive to carry on playing it, it just feels endless.
As can be seen in the videos: Classmate Footage 1 and Classmate Footage 2 the size of the ball was 0.1 which was too big for the ball in this game because whenever it hit the target it would always hit the middle or center part because the size of the ball was too big which one of my peers made me aware of. Therefore, I scaled down the size in half so it the ball’s size now is 0.05 on all axes. These changes can be seen in the videos: Final game Footage 1, Final game footage 2 and Complete game footage.
One thing I could do however to improve my game is, by storing the high scores of the people who play my game in a file or database and then load the high scores at the start of my game and present it to the user as a leaderboard so they can try to beat that high score and be at the top of the leaderboard which would make users feel even more motivated to play my game.
My game meets the requirements as it is a fully functioning game which uses a leap motion controller as input and allows the user with the leap motion controller tracking their hand movement to interact with the game if my company were to deploy my game there would need to be more unit testing and bug fixing to make sure end users have minimal problems with the product.
Comparison with old game idea
My current game in my opinion is a lot better than my original game idea. This is because my current game has attributes that I do not think my original game idea would have had such as:
- Fast input speed, smacking the ball with your hand
- High user satisfaction, features like repositioning the ball instead of having to restart the game which would get annoying
- Ease of use, hitting the ball with your hand is a lot easier than picking it up with the questionable quality of the sensors,
- Low skills required, only one hand must be used in order to hit the ball towards the target
However, my original game idea would not have some problems, for example, the high success rate of hitting the wall when is moving extremely fast from left to right and the ball is slowly rolling towards it’ because the wall is in the air
In conclusion, I believe that the game I developed was is effective to a great extent. I believe this because as stated above my game has fast input speed, fast throughput, fast speed of comprehension output, high user satisfaction, very high ease of use, low skills require, high usefulness of results and most importantly it meets the requirement.
However, I do believe there can be improvements made to it such as adding more targets, fixing the ball slowly rolling problems, implementing a leaderboard system and more.
If I could do this project again with more time, I would do things differently. First, I would try to dedicate as much time as I could into learning Unity properly and understanding the fundamental features that are needed in order to make a game, I think I would go through a tutorial on YouTube and practice creating small tiny games as well to ensure I understand and know how to use what I have learnt.
Then, from inspiration of another classmate in my class who had created a game which was boxing a punching bag, I would make a game where you have zombies that randomly spawn all around you including behind and would walk up to you damaging you decreasing your health bar until you reach zero which at that point you are dead and the game ends. I would make sure you can check all around you by moving the camera depending on the position you have your hands in.
Then I would make it so you can punch these zombies and do damage to them to kill them, I would add bones to the zombies so depending on where you would hit the zombie is how much damage you would deal to them to eventually kill them when they reach zero hit points, for example if you hit them in the head it would do double the damage of hitting them in the stomach which means if you hit them in the head you kill them faster. Also, with these bones, it would look cooler when you hit the zombies because the animation of a zombie being hit will be different depending on where it gets hit.
To make the game more interesting as time went on more zombies would be spawned in and they would walk up to you faster so it would get to the point where you would be flooded with zombies and they would maul you to death because there are just too many.
Then as a scoring system, I would design a scoring system which awarded you points depending on how long you have been alive for, the zombies you killed and the parts of the body you hit them in, so if you hit more zombies in the head then your score would be higher than somebody who only hit zombies in the stomach.
With this scoring system, I could create a leaderboard which would make players compete against each other to be at the top.