beet 3d documentation

82
Beet 3D A WORK-STUDY COMPUTER GAME A PROJECT WORK SUBMITTED TO THE DEPARTMENT OF COMPUTER SCIENCE AND INFORMATION TECHNOLOGY BABCOCK UNIVERSITY ILISHAN – REMO OGUN STATE NIGERIA IN PARTIAL FULFILMENT OF THE REQUIREMENTS FOR THE AWARD OF BACHELOR OF SCIENCE DEGREE IN COMPUTER SCIENCE (INFORMATION SYSTEM) BY: BULURO, OLUWATOBI ENITAN MATRIC NO: 12/3718

Upload: buluro-oluwatobi

Post on 14-Apr-2017

240 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BeeT 3D documentation

Beet 3DA WORK-STUDY COMPUTER GAME

A PROJECT WORK SUBMITTED TO THE DEPARTMENT OF

COMPUTER SCIENCE AND INFORMATION TECHNOLOGY

BABCOCK UNIVERSITY

ILISHAN – REMO

OGUN STATE

NIGERIA

IN PARTIAL FULFILMENT OF THE REQUIREMENTS FOR THE

AWARD OF BACHELOR OF SCIENCE DEGREE IN COMPUTER

SCIENCE (INFORMATION SYSTEM)

BY:

BULURO, OLUWATOBI ENITAN

MATRIC NO: 12/3718

APRIL 2015

Page 2: BeeT 3D documentation

this page was intentionally left blank

Page 3: BeeT 3D documentation

this page was intentionally left blank

Page 4: BeeT 3D documentation

DEDICATION

This project is dedicated to God Almighty and Babcock University Ilishan-Remo, Ogun Nigeria.

Page 5: BeeT 3D documentation

ACKNOWLEDGEMENT

I will like to thank God almighty for empowering me with wisdom, knowledge and

understanding and for sparing our lives till the completion of this project and beyond. We give

him praise and adoration.

I also want to appreciate my parents for their funding and support through the project

development phases. I also like to appreciate my project supervisor for his constant support,

tutorials and guidance towards the completion of my project and also the Unity 3D team for the

constant assistance with the use of their software.

Page 6: BeeT 3D documentation

ABSTRACT

A number of gaming software being developed do not consider the educational aspect of the

gamer. Their objectives are either to develop better versions of their games using high-end

graphic software or meet their own self-administered objective.

The issue of work-study ignorance in Babcock University has increased through the years.

Students now discourage attending any work-study activity due to fowl stories passed down

every year to new students. Students also get discouraged because they don’t fully understand

the idea behind work-study and community service.

This project bridges the gap between students and work-study program involvement by

developing a virtual environment which will teach students about working with their hands and

participation in a work-study program in Babcock University.

Page 7: BeeT 3D documentation

CONTENTS Page

Declaration..……..…………………………………………………………………………………i

Certification..……………………………………………………………………………………...ii

Dedication………………………………………………………………………………………...iii

Acknowledgement………………………………………………………………………………..iv

Abstract……………………………………………………………………………………………v

CHAPTER ONE: PROJECT INTRODUCTION

1.1 Introduction………………………………………………………………….…….1

1.2 Problem statement…………………………………………………………………2

1.3 Aim………………………………………………………………………………..3

1.4 General objectives…………………………………………………………………3

1.5 Methodology………………………………….…………………………………...3

1.6 Scope of the project…………………………………………………………….…4

1.7 Outcome of this project……………………………………………………………4

1.9 Organization of work…………………………………….………………………..5

Page 8: BeeT 3D documentation

CHAPTER TWO: LITERATURE REVIEW

2.1 Introduction………………………………………………………………….…….6

2.2 Game development in Africa……………………………………………………...7

2.3 2D – 3D generation………………………………………………………………..8

2.3.1 Side-scrolling games………..……………………………………………..9

2.3.1 Top-down perspective games……………………………………………..9

2.4 Roles……………………………………………………………………………..11

2.5 Education and Gaming in Nigeria…………….………………………………….12

2.6 Related works…………………………………………………………………….12

2.7 Tabular review of related works/articles…………………………………………14

2.8 Theoretical framework…………………………………………………………...15

CHAPTER THREE: METHODOLOGY AND SYSTEM DESIGN

3.1 Introduction………………………………………………………………….…...16

3.2 Software development process model…………………………………………...16

3.3 Design tools……………………………………………………………………...16

3.3.1 What is a game engine?……………………………………………….....17

3.3.2 Unity 3D game engine…..…………………………………………….....17

Page 9: BeeT 3D documentation

3.3.3 What is 3D Modelling?…………………………………………………..19

3.4 Modelling of the proposed system……………………………………………….20

3.5 The proposed system……...………………………….…………………………..21

3.6 User and system requirements…………….……………………………………..21

3.6.1 User requirements…………….……..,…………………………………..21

3.6.2 System requirements…………….…..,…………………………………..24

3.7 Hardware and software requirements……………………………………………25

3.7.1 Hardware requirements…………….……..,……………………………..25

3.7.2 Software requirements…………….……..,………………………….…..25

CHAPTER FOUR: SOFTWARE IMPLEMENTATION

4.1 Introduction………………………………………………………………….…..26

4.2 Game interface…………………………………………………….......................26

4.2.1 The character………………………………………..................................27

4.2.2 Main menu...………………………………………..................................28

4.2.3 Start game………………………………………......................................29

4.2.4 Back………………………………………...............................................33

4.2.5 Credits………………………………………............................................33

Page 10: BeeT 3D documentation

4.2.6 Quit………………………………………................................................33

4.3 Software testing………………………………………………………………….34

CHAPTER FIVE: SUMMARY, RECOMMENDATION AND CONCLUSION

5.1 Summary…..……………………………………………………………….…….35

5.2 Recommendations ………………………………….……………………………36

5.3 Conclusion……………………………………………………………………….36

References………………………………………………………………………………………..37

Appendix……………………………………………………………………………………….......i

Page 11: BeeT 3D documentation

LIST OF FIGURES

2.1 Awesomenaunts is a scrolling MOBA game…………………………….………..9

2.2 An example of a typical top-down, third-person view game, The Heist 2…..……9

2.3 First-person perspective as seen in STALKER: Shadow of Chernobly (2007)…...10

2.4 Call of Duty. An example of a 3rd person game…………………………………10

3.1 Player case diagram (Module 1)…………………………………………………10

3.2 Player case diagram (Module 2)…………………………………………………10

3.3 Player case diagram (Module 2A)………………………………………….……10

3.4 Player case diagram (Module 2B.………………………………………….……10

4.1 BeeT 3D configuration start page……….………………………………….........24

4.2 A student dressed in uniform for work-study……………………………………25

4.3 BeeT 3D configuration settings page…………………………………….………25

4.4 Main menu display……………………………………………………………….26

4.5 Sub main menu display………………………………………………………..…26

4.6 Main menu display………………….…………………………………………....27

4.7 Two students in work-study………………………..…………………….………29

4.8 The main gate of the school………………………..…………………….………29

4.9 A tuk-tuk (Keke) moving through the

school…………………………………….29

Page 12: BeeT 3D documentation

4.10 Babcock Business School (BBS)…………………………………………………

30

4.11 Babcock University teaching hospital (BUTH) ambulance………………………

30

4.12 A plain view of the game

environment…………………………………………...33

LIST OF TABLES

2.1 Examples of games and their release dates…………………………….………….7

2.2 Related works/articles…………………………………………………………....14

Page 13: BeeT 3D documentation

CHAPTER ONE

1.1 INTRODUCTION

Game playing is the design of artificial intelligence programs to be able to play more than one

game successfully. For many years, computers are programmed to play these games using

specially designed algorithms, which cannot be transferred to another context. For example, a

single player computer game program cannot play a multiplayer game. General game playing

was a project of the Stanford Logic Group of Stanford University, California which aims to

create a platform for general game playing.

There are other general game playing systems, which use their own languages for defining the

game rules. In 1992, Barney Pell developed the system Metagame. This system was able to play

a number of chess like games, given game rules definition in a special language.

In 1998, the commercial system, Zillions of Games was developed by Jeff Mallet and Mark

Lefler. The system used a LISP-like language to define the game rules. Zillions of games derived

the evaluation function automatically from the rules based on piece mobility, board structure and

game goals.

Page 14: BeeT 3D documentation

Simulation games began with Will Wright opening the Sim series in 1989 with SimCity, a city

building game. Certain games such as SimLife and SimEarth were subsequently created and are

capable of teaching players the basics of genetics and global ecosystem.

Simulation games aim to copy various activities form real life in form of a game for various

purposes such as training, analysis or prediction. Examples are business games, war games, role

playing games, war games or educational games. From three basic types of strategic, planning

and learning exercises: games, simulations and case studies, a number of hybrids may be

considered, including simulation games that are used as case studies.

1.2 PROBLEM STATEMENT

A lot of gaming software being developed do not consider the educational or moral aspect of the

gamer. Their objectives are either to develop better versions of their games using high-end

graphic software or meet their own self-administered objective(s).

Some simulation games that have also been developed also don’t consider the educational

aspects of the gamers. Since the development of games, the only widely sold game that portrays

developing countries like Nigeria, Iraq, etc. is Call of Duty – Advance Warfare.

Due to these challenges, my simulation game project adopts a developing country scenario

(Babcock University as case study) and impact educational concepts into the player of the game

through the use of student work study and the concept of Artificial Intelligence in gamification.

Page 15: BeeT 3D documentation

1.3 AIM

The aim of this project is to develop a game that will portray Babcock University as the case

study thus, allowing students or other players of the game to easily understand the concepts and

knowledge behind the development of the project. Thus, using an environment where players can

easily relate/interact which will make the game more interesting for the players.

1.4 GENERAL OBJECTIVES

1. To help the new and old students understand the concept of work study and its positive

effects on them by developing a virtual environment to simulate community service

scenarios.

2. To assist new students getting accustomed with Babcock University’s environment and

work study education.

3. To model the work-study program in 3D dimensional view. Thus, showing the students

of Technical Drawing courses and students of Computer Technology modelling

techniques.

1.5 METHODOLOGY

Page 16: BeeT 3D documentation

Following the stated general objectives above, I will adopt a methodology in accordance with the

System Development Life Cycle (SDLC) to attain them:

Methodology 1: To ascertain the viability of my project, I performed researches on

Game Development, understand the concept of simulation gaming and development,

research on educational games and study their methodologies to understand the concepts

they used in developing. Also under this phase I ascertained the cost of running the

project and risk management.

Methodology 2: In this phase, I conducted series of interviews with stake holders

(old/new students of Babcock University and staff of the community service department)

to find out details needed for work-study, locations in school where students can perform

the services and also other requirements aimed towards Babcock University’s

environment.

Methodology 3: In this phase I used a software called Unity 3D for the construction of

the game’s environment in 3D dimensional view, MonoDevelop as an IIDE for scripting

(coding) and made use of modelling software like Maya 3ds Max and Maya Autodesk. I

also used system software like Paint and Pictures and an application software

(Photoshop) in editing images needed in the development of the 3D environment.

1.6 SCOPE OF THE PROJECT

The project emulates an environment (Babcock University) into virtual 3D and mimics an exact

replica of different structure and objects available in the school.

Page 17: BeeT 3D documentation

1.7 OUTCOME OF THIS PROJECT

A game called “BEET 3D” which will initially be developed for PC (Windows).

1.8 ORGANIZATION OF WORK

The game software will be made up of five chapters to be explained below:

Chapter One (Introduction)

Chapter Two (Literature Review): In this chapter, I discussed the brief summary of gaming and

simulations to understand its history and how it has evolved in the past years thus, showing me

how to better build my project.

Chapter Three (methodology and system design): In this chapter, I discussed the methodologies

used in the development of this game and also the design processes involved in the development.

Chapter Four (Implementation and Testing): In this chapter, I discussed the requirements,

specifications, implementation and testing of the software.

Chapter Five (Summary and Conclusions): In this chapter, I discussed my findings so far and

summarized the processes involved in the development of this project.

Page 18: BeeT 3D documentation

CHAPTER TWOLITERATURE REVIEW

2.1 INTRODUCTION

Game development is the process of creating a game. The development may range from a single

developer to a large organization of developers. Commercial PC and console games are normally

developed by a publisher (e.g. EA sports, BT games, Capricon, etc.) and may take several years

to develop.

The development of the first video games in the 1950s needed mainframe computers which were

not available to the general public. With the introduction of the 1st generation of game consoles

in the 1970s, commercial game development started its wave of popularity, where game consoles

and home computers could be accessible by the public. Due to low costs and low capabilities of

computers, a lone programmer can develop a full game, but in a period of time depending on the

type of game to be developed. Computer Space was the first commercially sold video game. It

was a black-and-white game and the computers system was made of 74 series TTL chips (one of

the early chips found in early computer systems).

Page 19: BeeT 3D documentation

Due to the revolution of science in the 21st century, the price of a lone programmer creating a

game has risen to be quite expensive. But the development of mobile-based games have still

remained less expensive to no expense in some cases.

Console games and PC games are generally developed in phases. The pre-production phase,

where the developer(s) create prototype and write documents (e.g. a proposal to contain

concepts, gameplay, feature list, settings, audience, etc.) to be presented to sponsors, prototype to

be presented to a focus group of gamers, and other external bodies for the review of the

proposal/intended game. If the intended game is approved, the developer(s) may receive funding,

start advertisement, set a deadline date and then development of the game begins. In the

development of a major game, the developers range from different fields which include

programmers, artists, voice actors, designers, testers, sound effect, focus group, etc.

Mobile game development on the other hand is faster in its production. In most cases it takes less

than a year of production and mostly a lone developer in its development. Due to the small

market and investment needed for mobile game development, mobile game development is now

seen as an avenue for small businesses or individuals to enter the gaming industry.

Game development period ranges according to different factors which include genre of the game,

among other factors for game development. Some examples of games and their release dates are:

Game Development begins Date released

1. Spore 1999 2008

2. Prey 1997 2006

3. Duke Nuken Forever 1997 2011

4. Team Fortress 2 1998 2007

Page 20: BeeT 3D documentation

Table 2.1 - Examples of games and their release dates

2.2 Game development in Africa

Game development in Africa wasn’t a recognizable sector until recent times. The largest gaming

market in Africa is in South Africa. The market is overtaking the market in movies and music in

the country. In Nigeria, game development also started making wave when games like Call of

Duty, basketball games, FIFA football games among others started using our environments. The

use of our Nigerian environment in games inspires us to purchase those kind of games and also

produce games of ours.

Gaming companies like Gameplus Limited, Techline Communications, Simply Fun Limited,

Impedence Systems Company, Kuluya, among others, have been newly introduced companies

into the gaming sector. Kuluya for example focuses on developing games in which the

environment is Nigerian-based. The company also uses characters which are dark skinned to

make the games enjoyable from different perspective.

2.3 2D – 3D GENERATION

2D computer game graphics started in the 1950s which is based on vector graphics devices and is

the computer-based generation of digital images. 2D was mainly used in applications that were

originally developed upon traditional printing and drawing technologies, such as typography,

cartography, technical drawing, etc. Games utilizing parallel projection typically make use of

2D, allowing developers to create large, complex gameworlds efficiently and with relatively few

art assets. Examples of 2D driven games are:

Page 21: BeeT 3D documentation

2.3.1 Side-scrolling games

Fig 2.1 - Awesomenauts is a scrolling MOBA game.

2.3.2 Top-down perspective games

Fig 2.2 - An example of a typical top-down,

Page 22: BeeT 3D documentation

third-person view game, The Heist 2

With the introduction of 3D accelerated graphics, video games could go beyond the old

technology of 2D. in 3D games, real life scenarios and intended graphics are easily seen from

different perspectives. There has also been an introduction of backgrounds to 3D games due to

its flexibilities in movement and graphics.

There have also been different gaming graphical perspectives that come with 3D which include

1st person, 3rd person, Stereo graphics, among others.

1st person perspective example

Fig 2.3 - First-person perspective as seen in

STALKER: Shadow of Chernobly (2007).

3rd person perspective example

Page 23: BeeT 3D documentation

Fig 2.4 - Call of Duty. An example of a 3rd person game.

2.4 Roles

1. Producers: Internal producers working for the developers are known as internal

producers and manages the development team, staff etc. the producer may also be

referred to as project manager, project lead or director.

2. Publisher: Is responsible for the publishing of the develop game, also responsible for

advertising, marketing, and all the responsibilities a publisher in other sector is supposed

to have. They usually deal with finances of the project in some cases.

3. Designer: A designer is one who designs the gaming structure of the game, the

gameplay, rules, etc. the designer is in charge of the writing the story line of the game.

Page 24: BeeT 3D documentation

4. Artist: A game artist is one who creates game arts which his overseen by an art director.

The artist may be tasked with a 2D or 3D oriented work depending on the genre and other

factors of the game to be developed.

5. Development Team: The development team range from about 2 people to a team of 100.

The size of the team depends on the type of game to be developed. Like discussed above,

a mobile based game doesn’t need a very large development team (1 – 50), whereas, a PC

or console development team may rage higher from about 20 – 100 team members.

6. Programmers: A programmer is a software engineer who primarily develops video

games using game development tools like Unity 3d, 3D Max, etc. the coding aspect of the

game is handled by the programmer. Programming discipline roles include: physics, AI

(Artificial Intelligence), Gameplay, Sound programming, UI (User Interface), Scripting,

Game tools usage, etc.

7. Tester: Testers are in charge of making sure the quality expected from the game

is met. They test the game periodically during the development period to make sure that

all necessary expected features are met.

8. Focus Group: The focus group can be of about 3 – higher number of people. The can

function as testers but their main aim is to brain storm and figure out extra features to be

added to the game to be developed.

9. Maintenance group: After the release of a game, the maintenance phase for the game

begins. Series of updates become available in order to fix bugs on those released games.

2.5 Education and Gaming in Nigeria

Page 25: BeeT 3D documentation

Many universities in Nigeria don’t or never offer classes specifically focused on

game development. It is not yet seen as a relevance to schools in Nigeria to

include gaming as an aspect of Computer studies.

2.6 Related Works (This is a review of related simulation gaming

software)

1. The Sims is a life simulation video game series developed by EA Maxis and published

by Electronic Ar. In The Sims, the players create virtual people called “Sims” and places

them in houses and help direct their moods and satisfy their desires.

The Sims 3 Minimum System Requirement

1. CPU (INTEL): Pentium 4 2.0GHz

2. CPU (AMD): Athlon XP

3. GPU (NVidia): GeForce 2 MX 400 64MB

4. GPU (AMD): Radeon 8500 Series 64MB

5. RAM: 1 GB

6. Operating System: Window 7

7. Direct X: DX 8

8. Hard Disk Drive Space: 4 GB

Page 26: BeeT 3D documentation

Even though The Sims was one of the first widely sold simulation games to be developed, it

never depicted the real life scenario of a developing country (e.g. Nigeria). The Sims not only

avoided the portraying of developing countries but got a lot of critics which based their

opinions that The Sims doesn’t teach young good morals. It was also developed to be played

on Microsoft Windows 7. Thus, compatibility issues occur.

2. Second Life is an online virtual world, developed by Linden Lab. Second life users

create virtual representations of themselves called avatars and are able to interact with

other avatars, places and objects. They can explore the world (known as the grid), meet

other residents, socialize, participate in individual and group activities, build, create, shop

and trade virtual property and services with one another.

Second Life Minimum System Requirement

1. GPU (NVidia): GeForce 2 MX 400 64MB

2. GPU (AMD): Radeon 8500 Series 64MB

3. RAM: 2 GB

4. Direct X: DX 8

5. (Note: the game is played online so no need for interior CPU requirements and operating

system requirements).

Second Life was also one of the first simulation games too be online based thus, meeting

more people from different geographical regions. But, its limit to only been able to be played

online makes it not easily accessible in developing countries due to the low quality internet

capacity.

2.7 Tabular Review of Related Works/Articles.

Page 27: BeeT 3D documentation

TITLE AUTHOR/PUBLISHER CONTRIBUTION GAP

1. The Sims Electronic Art Maxis First widely sold

Simulation game.

- Ignorance of

developing

countries.

- Compatibility

issues.

2. Second Life Linden Lab First online based

simulation game.

-ignorance of

developing

countries.

Table 2.2 – Related works/articles

With proper study of these works and gaps I’ve worked out tools and techniques to be used in

this project.

The programming tool to be used will be monoDevelop, game design tool will be Unity 3d, and

modelling tool would be Blender and Maya. This project will also be developed to match our

current location (Babcock University).

2.8 Theoretical Framework

Page 28: BeeT 3D documentation

Fig 2.5 – Prefix model for Theoretical framework (Okoro R. et al, 2013)

In the development of this project, I followed the above theoretical framework in arriving at

certain findings and conclusions.

CHAPTER THREE

Page 29: BeeT 3D documentation

METHODOLOGY AND SYSTEM DESIGN

3.1 INTRODUCTION

This chapter reviews the different components of my game software by analysis of each system

and software component. There will be analysis of the software game features and properties.

3.2 SOFTWARE DEVELOPMENT PROCESS MODEL

The software development process model to be used will be the waterfall model because the

requirements and specifications are well-defined.

3.3 DESIGN TOOLS

To achieve my game software, I will make use of the following:

A game engine (used to design the game environment, a general platform for which the

game will be worked upon).

Two 3D modelling software (which will be used to design, construct and model objects

like humans, buildings and other rigid objects).

3.3.1 What is a Game Engine?

Page 30: BeeT 3D documentation

A game engine is a software framework designed for the creation and development of video

games. The core functionality typically provided by a game engine includes a rendering engine,

physics engine or collision detection, scripting, animation and artificial intelligence.

Game engines provide platform abstraction, allowing the same game to run on various platforms

including game consoles and mobile devices.

Examples of game engines:

Blender, Delta3D, Oxygine, Panda3D, Retribution Engine, Unreal Engine 4, Wire3D, 3D Rad,

Dim3, Unity 3D, ORX, etc.

For the development of this game software, I used Unity 3D game engine.

3.3.2 Unity 3D Game Engine

Unity is a cross-platform game creation software which consist of a game engine, Integrated

Development Environment (IDE) and monoDevelop (for scripting) developed by Unity

Technologies. It is used to develop video games for websites, desktop platforms, consoles and

mobile devices. First announced only for the Mac OS and since been extended to target more

than fifteen platforms.It is now the default software development kit (SDK) for the Nintendo

Wii.

Features of Unity 3D game engine

Page 31: BeeT 3D documentation

1. Rendering

The graphics engine targets Direct3D on Windows and Xbox 360, OpenGL on Mac,

Windows and Linux, OpenGL ES on android and iOS and other proprietary API’s on

video game consoles.

Unity supports assets and file formats from 3ds Max, Maya, Blender, Cinema 4D,

Cheetah3D, Adobe Photoshop, Adobe Fireworks and Algorithmic substance (these are

modelling software). These assets can be added to the game project, and managed

through Unity's graphical user interface.

2. Scripting

Unity game engine’s scripting is built on Mono (the open-source implementation of

the .NET Framework). I used UnityScript (a custom language; part of JavaScript), c# and

Boo (which has a python-inspired syntax). MonoDevelop is a build in IDE for the

implementation and coding in Unity.

3. Platform

Unity 3D supports multiple platforms. In the development of a game, unity can compile

the output of games to web browsers, mobile devices, desktops and consoles. Unity also

allows specification of texture compression and resolution settings for each platform the

game supports.

Currently supported platforms for Unity 3D include Windows 8, Windows Phone 8,

BlackBerry 10, Windows, Mac, Linux, Android, iOS, Unity Web Player, Adobe Flash,

PlayStation 3, PlayStation 4, Xbox 360, Xbox One and some other PlayStation platforms,

etc.

4. Asset store

Page 32: BeeT 3D documentation

Unity's Asset Store is home to a growing library of free and commercial assets created

both by Unity Technologies and also members of the community. A wide variety of

assets is available, covering everything from textures, models and animations to whole

project examples, tutorials and Editor Extensions. The assets are accessed from a simple

interface built into the Unity Editor and are downloaded and imported directly into your

project.

5. Physics/Rigidbodies

Unity has NVIDIA PhysX physics engine built-in. This allows for unique emergent

behavior and has many useful features like real-time cloth simulation on arbitrary and

skinned meshes, thick ray casts, and collision layers.

Rigidbodies are physically simulated objects. You use Rigidbodies for things that the

player can push around, for example crates or loose objects, or you can move Rigidbodies

around directly by adding forces to it by scripting.

3.3.3 What is 3D modelling?

3D modelling is the process of developing a mathematical representation of any three-

dimensional surface of an object (either inanimate or living) via specialized software. The

product/result is called 3D model. Wikipedia, (2014).

For the development of the game software, I used Autodesk Maya and Autodesk 3ds Max.

Page 33: BeeT 3D documentation

a) Autodesk Maya

Autodesk Maya (also shortened as Maya) is a 3D graphics computer software that runs on

Windows, OS X and Linux. It is used to create interactive 3D applications, including video

games, animation films, TV series or visual effects.

b) Autodesk 3ds Max

Autodesk 3ds Max is a professional 3D computer graphics program for making 3D animations,

models, games and images. It has modelling capabilities, a flexible plugin architecture and can

be used on the Microsoft Windows platform. It is also used by game developers and for movie

effects and visualization.

3.4 MODELLING OF THE PROPOSED SYSTEM

1. Terrain construction: A terrain is the ground in which all objects in Unity stand or are

placed. I created it using the “Create terrain” tool in Unity’s tool bar.

2. Weather and cloud: The cloud is formed by a weather simulation plugin available in

Unity game engine.

3. Buildings and structures: The buildings and structures in the game are constructed in

Autodesk Maya and 3ds Max and imported to Unity engine as rigid bodies.

4. Road path: the road path in our game was constructed using a “create road” asset from

the Unity Asset Store and plain from Unity’s Engine.

Page 34: BeeT 3D documentation

5. The game software will be a centered on Babcock University, using the university as her

case study, adopting structures in the university to be represented in the game.

3.5 THE PROPOSED SYSTEM

Game interface

o Game menu

Start game

Clicking the “Start game” icon sends a command to the system which

begins the game.

About

Clicking the “About” icon displays a view of the developers of the game

software.

Quit game

Clicking the “Quit game” icon sends a command to the system which

terminates the software.

3.6 USER AND SYSTEM REQUIREMENTS

3.6.1 USER REQUIREMENTS

STUDENT (PLAYER)

a. Student shall be able to start the game.

b. Student shall be able to create a new profile or load an old profile.

Page 35: BeeT 3D documentation

c. Student shall be able to play free roam.

d. Student shall be able to navigate to places of desire on the terrain.

e. Student shall be able to pause the game.

f. Student shall be able to quit the game.

Fig 3.1 – Player case diagram (Module 1)

Fig 3.2 – Player case diagram (Module 2)

Page 36: BeeT 3D documentation

Fig 3.3 – Player case diagram (Module 2A)

Fig 3.4 – Player case diagram (Module 2B)

Page 37: BeeT 3D documentation

3.6.2 SYSTEM REQUIREMENTS

a) FUNCTIONAL REQUIREMENTS

When the user clicks start game on the main menu, the game loads up programmed levels form

the scripting and displays the interface to the screen for use by the player.

The player uses inputs on the keyboard to move and interact with objects in the game. The player

hits keys like Up Arrow, Left Arrow, Right Arrow and Down Arrow for movement of objects

(character, objects, etc.), Space Bar for Jumping, Left Shift key for sprinting or moving faster,

Escape (Esc.) For Menu option and the Track Pad for looking and direction. When these keys are

clicked, the system takes in the command, compares the input to the scripting I coded during

development and performs the desired action on display.

When the user clicks the Escape (Esc) button, the system also takes in the command, compares

with the right result for that input in the scripting and displays the Pause Menu Screen where the

user can also select to continue playing the game, read the About for the game and Quit the

game.

b) NONFUNCTIONAL REQUIREMENTS

a. Game will load within seconds.

Game should work fast without any hangs or buffer.

Game should enhance its 3D abilities on different systems.

Game should be able to run without help, assistance or installation of third party

software.

Page 38: BeeT 3D documentation

Game will not consume RAM space in a system.

Game software will be able to adapt to newly developed systems, thus, extensibility of

the software.

Game software will show Babcock University in 3D and also have a view of future

infrastructure for the university.

3.7 HARDWARE AND SOFTWARE REQUIREMENTS

3.7.1 Hardware Requirements

a. RAM: 1 GB or more

b. System type: 64-bit Operating system

c. Direct X: DX 8 or more

d. Hard Disk Drive Space: 4 GB (minimum)

e. Minimum processor speed: 1.50GHz

3.7.2 Software Requirements

a. Unity 3D

b. Autodesk Maya

c. Autodesk 3ds Max

d. Microsoft Windows Operating System: Windows XP, Windows 7, Windows 8 and

Windows 10.

Page 39: BeeT 3D documentation

CHAPTER FOUR

SOFTWARE IMPLEMENTATION

4.1 INTRODUCTION

Implementation is process of integrating a plan, software design, requirements and algorithm into

software applications. It is the first phase to the successful completion of a software application.

The implementation of product software is the final link in the deployment chain of software

production and all requirements are evaluated to ensure quality software development before

delivering it to the end-users.

4.2 GAME INTERFACE

On game startup, configuration settings which includes graphic resolution and controller setting

appears which enables users to choose their most preferred functional settings whereby

resolution and quality can be adjusted as well gaming controls.

Fig 4.1 - BeeT 3D configuration start page

Page 40: BeeT 3D documentation

4.2.1 THE CHARACTER

The work-study character in the game is portrayed to dress like a proper person in service.

Fig 4.2 - A student dressed in uniform for work-study

Fig 4.3 - BeeT 3D configuration settings page

Page 41: BeeT 3D documentation

4.2.2 MAIN MENU

Fig 4.4 - Main menu display

As the game is launched, the first page to be displayed will be a sub main menu

Fig 4.5 - Sub main menu display

Once the “Click to begin” button is clicked, the next page to be displayed would be the main

menu where various options can be selected;

Page 42: BeeT 3D documentation

Fig 4.6 - Main menu display

4.2.3 START GAME

When the “Start Game” button is selected, a scene (Level 1) is loaded displaying the character in

a tuk-tuk (Keke) at a start point (Babcock University’s main gate) where the first objective is to

navigate to the University’s stadium.

When the objective (locate the Stadium) is completed, another level is loaded where the player

will be assigned his hostel, courses and other requirements of a student. Other objective include

to locate the cafeteria, perform certain work study roles like sweep, clear an area, etc., to gain

points.

The gained points can be used to buy books at the book shop, buy refreshments and food items.

After completion of objectives, the free roam option can be selected where the player has the

opportunity to roam the university and explore certain areas in the school.

On exit, the current game play level will be saved and can be restored on return of the player.

Page 43: BeeT 3D documentation

a) AUDIO PLAYBACK

During game play, certain audio sounds are played in order to fully reproduce locations in the

University. The audio files were added by java scripts available in the appendix.

b) IMAGES OF LOCATIONS IN THE GAME

Fig 4.7 - Two students in work-study

Page 44: BeeT 3D documentation

Fig 4.8 - The main gate of the school

Fig 4.9 - A tuk-tuk (Keke) moving through the school

Page 45: BeeT 3D documentation

Fig 4.10 - Babcock Business School (BBS)

Fig 4.11 – Babcock University teaching hospital (BUTH) ambulance

Page 46: BeeT 3D documentation

Fig 4.12 - A plain view of the game environment

4.2.4 BACK

The back button is takes the player back to the sub-menu where the player has the options of quit

or resume the game.

4.2.5 CREDITS

When the “Credits” button is pressed a looped video sequence is started to display the credits for

the game development.

4.2.6 QUIT

The “Quit” button closes the game and ends every system process associated with BeeT 3D.

Page 47: BeeT 3D documentation

4.3 SOFTWARE TESTING

Software testing is the execution of the software with actual test data with goals like verify that

all requirements are implemented correctly, identifies defects before software deployment and

help improve quality and reliability.

The various testing techniques were implemented:

- Platform Testing: In platform testing, the game was tested on other devices such as

android devices (tabs and smart phones).

- Extensibility Testing: The game software was developed on a Windows 7 and Windows

8 system, thus, an extensibility test was conducted where the software was installed and

played on lower operating systems like Windows XP and higher operating systems like

Windows 8.1 and they all yielded positive outcomes.

Page 48: BeeT 3D documentation

CHAPTER FIVE

SUMMARY, RECOMMENDATION AND CONCLUSION

5.1 SUMMARY

Application of BeeT 3D for the familiarity of Babcock University using knowledge from artificial

intelligence, database management and JavaScript, Boo and C # will assist students or parents in easily

understanding the game environment (Babcock University).

The first chapter of this project introduced the aim of this project, problems with currently used engines

or game dimensioning and ways to tackle them.

The second chapter discussed research works done by other game developers and the problems

faced or discovered with the way I suggested to avoid them.

The third chapter discussed the system analysis and design phases to be followed and also the

tools to be used during software design.

The forth chapter explained the implementation of the system and a review of the performance of the

system which were further portrayed with diagrams from the game.

The fifth chapter summarizes the project with recommendations for future versions or enhancements.

Page 49: BeeT 3D documentation

5.2 RECOMMENDATIONS

BeeT 3D game is extensible, thus, chances of future upgrades or modifications are possible.

Recommended future upgrades or modifications may include:

1. Availability of classroom lectures to fully simulate learning environment.

2. Transformation of the game’s objectives into free roam and objective oriented gameplay.

3. Game to be used in explanation of the concept of modelling & simulation, artificial

intelligence and Java Scripting language case study.

4. Full simulation of Babcock University to portray students, lecturers and other features

present or developed over time to aid easier understanding of the environment.

5.3 CONCLUSION

In conclusion, this project will serve the purpose for which it is being developed. It has been

found that players of car-games experience a thrill and fulfillment which they can never

experience in real life. Car controlled movement through Babcock University with the sole aim

of reaching a particular destination increases the player’s determination and concentration.

Unlike in the real world, you don't have to worry of accidents or getting hurt.

Page 50: BeeT 3D documentation

REFERENCES

Ken Jones, (1995). Simulations: “A handbook for teachers and trainers”.

Danny Saunders, Jacqui Severn: “Simulation and Games for Strategy and Policy

Planning”.

Michael Genesereth and Nathaniel Love. General Game Playing: Overview of the AAAI

Competition.

List of Gaming companies in Nigeria. Available at: www.companylist.org/companiesnigeria

(Retrieved 2014-10-07).

2D computer graphics. Available at: www.wikipedia.com/2dcomputer_graphics (Retrieved

2014-10-07).

First-person perspective. Available at: www.wikipedia.com/firstperson_perspecctive

(Retrieved 2014-10-07).

Virpi Ruohamaki. A simulation game for the development of administrative work

processes. (Retrieved 2014-10-07).

Danny Sauders: Introducing simulations and games for business. (Retrieved 2014-10-

06).

Thomas Grip. 4-Layers, A Narrative Design Approach. (Retrieved 2014-09-20).

David Jaques: Games, simulations and case studies – a review. (Retrieved 2014-10-07).

Jussi Holopainen and Staffan Björk. Game Design Patterns. (Retrieved 2014-10-07).

Dejaime Antonio de Oliveira Neto. Intelligent 2D Collision and Pixel Perfection

Precision. (Retrieved 2014-10-07).

Marko Nemberg. Beginning Guide to User Testing With Child. Available at:

www.gamedev.net/beginningguide. (Retrieved 2014-10-07).

Page 51: BeeT 3D documentation

Angel Cagle. The Pros and Cons of Going to College for Game Development/Design.

Available at: www.gamedev.net/prosandcons_college. (Retrieved 2014-10-07).

Ken Jones, (1995). Simulations: A handbook for teachers and trainers.

Danny Saunders, Jacqui Severn: Simulation and Games for Strategy and Policy

Planning.

Michael Genesereth and Nathaniel Love (1996): “Games and Simulations to Enhance

Quality Learning”.

Page 52: BeeT 3D documentation

APPENDIX

MAIN MENU JavaScript (.js)

#pragma strict

function OnGUI()

{

if (GUI.Button(Rect(210,200,300,40),"Start Game"))

{

Application.LoadLevel("plan");

}

if (GUI.Button(Rect(210,250,300,40),"Back"))

{

Application.LoadLevel("MainMenu");

}

if (GUI.Button(Rect(210,300,300,40),"Credits"))

{

Application.LoadLevel("Credits");

}

if (GUI.Button(Rect(210,350,300,40),"Quit"))

{

Application.Quit();

}

}

SUB MENU – JavaScript (.js)

#pragma strict

function OnGUI()

{

GUI.Box(Rect(520,0,300,40),"Welcome");

if (GUI.Button(Rect(520,500,300,40),"Click to begin"))

{

Application.LoadLevel("SubMenu");

}

}

FPS Input controller movement – JavaScript (.js)

Page 53: BeeT 3D documentation

private var motor : CharacterMotor;

// Use this for initialization

function Awake () {

motor = GetComponent(CharacterMotor);

}

// Update is called once per frame

function Update () {

// Get the input vector from kayboard or analog stick

var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

if (directionVector != Vector3.zero) {

// Get the length of the directon vector and then normalize it

// Dividing by the length is cheaper than normalizing when we already have the length anyway

var directionLength = directionVector.magnitude;

directionVector = directionVector / directionLength;

// Make sure the length is no bigger than 1

directionLength = Mathf.Min(1, directionLength);

// Make the input vector more sensitive towards the extremes and less sensitive in the middle

// This makes it easier to control slow speeds when using analog sticks

directionLength = directionLength * directionLength;

// Multiply the normalized direction vector by the modified length

directionVector = directionVector * directionLength;

}

// Apply the direction to the CharacterMotor

motor.inputMoveDirection = transform.rotation * directionVector;

motor.inputJump = Input.GetButton("Jump");

}

// Require a character controller to be attached to the same game object

@script RequireComponent (CharacterMotor)

@script AddComponentMenu ("Character/FPS Input Controller")

Mouse Look – C# (.cs)

using UnityEngine;

using System.Collections;

public class MouseLook : MonoBehaviour {

Page 54: BeeT 3D documentation

public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }

public RotationAxes axes = RotationAxes.MouseXAndY;

public float sensitivityX = 15F;

public float sensitivityY = 15F;

public float minimumX = -360F;

public float maximumX = 360F;

public float minimumY = -60F;

public float maximumY = 60F;

float rotationY = 0F;

void Update ()

{

if (axes == RotationAxes.MouseXAndY)

{

float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);

}

else if (axes == RotationAxes.MouseX)

{

transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);

}

else

{

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);

}

}

void Start ()

{

// Make the rigid body not change rotation

if (rigidbody)

Page 55: BeeT 3D documentation

rigidbody.freezeRotation = true;

}

}

CONTROLLER MOTOR JAVA SCRIPT

#pragma strict

#pragma implicit

#pragma downcast

// Does this script currently respond to input?

var canControl : boolean = true;

var useFixedUpdate : boolean = true;

// For the next variables, @System.NonSerialized tells Unity to not serialize the variable or show it in the inspector view.

// Very handy for organization!

// The current global direction we want the character to move in.

@System.NonSerialized

var inputMoveDirection : Vector3 = Vector3.zero;

// Is the jump button held down? We use this interface instead of checking

// for the jump button directly so this script can also be used by AIs.

@System.NonSerialized

var inputJump : boolean = false;

class CharacterMotorMovement {

// The maximum horizontal speed when moving

var maxForwardSpeed : float = 100.0;

var maxSidewaysSpeed : float = 100.0;

var maxBackwardsSpeed : float = 100.0;

// Curve for multiplying speed based on slope (negative = downwards)

Page 56: BeeT 3D documentation

var slopeSpeedMultiplier : AnimationCurve = AnimationCurve(Keyframe(-90, 1), Keyframe(0, 1), Keyframe(90, 0));

// How fast does the character change speeds? Higher is faster.

var maxGroundAcceleration : float = 30.0;

var maxAirAcceleration : float = 20.0;

// The gravity for the character

var gravity : float = 10.0;

var maxFallSpeed : float = 20.0;

// For the next variables, @System.NonSerialized tells Unity to not serialize the variable or show it in the inspector view.

// Very handy for organization!

// The last collision flags returned from controller.Move

@System.NonSerialized

var collisionFlags : CollisionFlags;

// We will keep track of the character's current velocity,

@System.NonSerialized

var velocity : Vector3;

// This keeps track of our current velocity while we're not grounded

@System.NonSerialized

var frameVelocity : Vector3 = Vector3.zero;

@System.NonSerialized

var hitPoint : Vector3 = Vector3.zero;

@System.NonSerialized

var lastHitPoint : Vector3 = Vector3(Mathf.Infinity, 0, 0);

}

Page 57: BeeT 3D documentation

var movement : CharacterMotorMovement = CharacterMotorMovement();

enum MovementTransferOnJump {

None, // The jump is not affected by velocity of floor at all.

InitTransfer, // Jump gets its initial velocity from the floor, then gradualy comes to a stop.

PermaTransfer, // Jump gets its initial velocity from the floor, and keeps that velocity until landing.

PermaLocked // Jump is relative to the movement of the last touched floor and will move together with that floor.

}

// We will contain all the jumping related variables in one helper class for clarity.

class CharacterMotorJumping {

// Can the character jump?

var enabled : boolean = true;

// How high do we jump when pressing jump and letting go immediately

var baseHeight : float = 1.0;

// We add extraHeight units (meters) on top when holding the button down longer while jumping

var extraHeight : float = 4.1;

// How much does the character jump out perpendicular to the surface on walkable surfaces?

// 0 means a fully vertical jump and 1 means fully perpendicular.

var perpAmount : float = 0.0;

// How much does the character jump out perpendicular to the surface on too steep surfaces?

// 0 means a fully vertical jump and 1 means fully perpendicular.

var steepPerpAmount : float = 0.5;

// For the next variables, @System.NonSerialized tells Unity to not serialize the variable or show it in the inspector view.

// Very handy for organization!

Page 58: BeeT 3D documentation

// Are we jumping? (Initiated with jump button and not grounded yet)

// To see if we are just in the air (initiated by jumping OR falling) see the grounded variable.

@System.NonSerialized

var jumping : boolean = false;

@System.NonSerialized

var holdingJumpButton : boolean = false;

// the time we jumped at (Used to determine for how long to apply extra jump power after jumping.)

@System.NonSerialized

var lastStartTime : float = 0.0;

@System.NonSerialized

var lastButtonDownTime : float = -100;

@System.NonSerialized

var jumpDir : Vector3 = Vector3.up;

}

var jumping : CharacterMotorJumping = CharacterMotorJumping();

class CharacterMotorMovingPlatform {

var enabled : boolean = true;

var movementTransfer : MovementTransferOnJump = MovementTransferOnJump.PermaTransfer;

@System.NonSerialized

var hitPlatform : Transform;

@System.NonSerialized

var activePlatform : Transform;

Page 59: BeeT 3D documentation

@System.NonSerialized

var activeLocalPoint : Vector3;

@System.NonSerialized

var activeGlobalPoint : Vector3;

@System.NonSerialized

var activeLocalRotation : Quaternion;

@System.NonSerialized

var activeGlobalRotation : Quaternion;

@System.NonSerialized

var lastMatrix : Matrix4x4;

@System.NonSerialized

var platformVelocity : Vector3;

@System.NonSerialized

var newPlatform : boolean;

}

var movingPlatform : CharacterMotorMovingPlatform = CharacterMotorMovingPlatform();

class CharacterMotorSliding {

// Does the character slide on too steep surfaces?

var enabled : boolean = true;

// How fast does the character slide on steep surfaces?

var slidingSpeed : float = 15;

Page 60: BeeT 3D documentation

// How much can the player control the sliding direction?

// If the value is 0.5 the player can slide sideways with half the speed of the downwards sliding speed.

var sidewaysControl : float = 1.0;

// How much can the player influence the sliding speed?

// If the value is 0.5 the player can speed the sliding up to 150% or slow it down to 50%.

var speedControl : float = 0.4;

}

var sliding : CharacterMotorSliding = CharacterMotorSliding();

@System.NonSerialized

var grounded : boolean = true;

@System.NonSerialized

var groundNormal : Vector3 = Vector3.zero;

private var lastGroundNormal : Vector3 = Vector3.zero;

private var tr : Transform;

private var controller : CharacterController;

function Awake () {

controller = GetComponent (CharacterController);

tr = transform;

}

private function UpdateFunction () {

// We copy the actual velocity into a temporary variable that we can manipulate.

var velocity : Vector3 = movement.velocity;

// Update velocity based on input

Page 61: BeeT 3D documentation

velocity = ApplyInputVelocityChange(velocity);

// Apply gravity and jumping force

velocity = ApplyGravityAndJumping (velocity);

// Moving platform support

var moveDistance : Vector3 = Vector3.zero;

if (MoveWithPlatform()) {

var newGlobalPoint : Vector3 = movingPlatform.activePlatform.TransformPoint(movingPlatform.activeLocalPoint);

moveDistance = (newGlobalPoint - movingPlatform.activeGlobalPoint);

if (moveDistance != Vector3.zero)

controller.Move(moveDistance);

// Support moving platform rotation as well:

var newGlobalRotation : Quaternion = movingPlatform.activePlatform.rotation * movingPlatform.activeLocalRotation;

var rotationDiff : Quaternion = newGlobalRotation * Quaternion.Inverse(movingPlatform.activeGlobalRotation);

var yRotation = rotationDiff.eulerAngles.y;

if (yRotation != 0) {

// Prevent rotation of the local up vector

tr.Rotate(0, yRotation, 0);

}

}

// Save lastPosition for velocity calculation.

var lastPosition : Vector3 = tr.position;

// We always want the movement to be framerate independent. Multiplying by Time.deltaTime does this.

var currentMovementOffset : Vector3 = velocity * Time.deltaTime;

Page 62: BeeT 3D documentation

// Find out how much we need to push towards the ground to avoid loosing grouning

// when walking down a step or over a sharp change in slope.

var pushDownOffset : float = Mathf.Max(controller.stepOffset, Vector3(currentMovementOffset.x, 0, currentMovementOffset.z).magnitude);

if (grounded)

currentMovementOffset -= pushDownOffset * Vector3.up;

// Reset variables that will be set by collision function

movingPlatform.hitPlatform = null;

groundNormal = Vector3.zero;

// Move our character!

movement.collisionFlags = controller.Move (currentMovementOffset);

movement.lastHitPoint = movement.hitPoint;

lastGroundNormal = groundNormal;

if (movingPlatform.enabled && movingPlatform.activePlatform != movingPlatform.hitPlatform) {

if (movingPlatform.hitPlatform != null) {

movingPlatform.activePlatform = movingPlatform.hitPlatform;

movingPlatform.lastMatrix = movingPlatform.hitPlatform.localToWorldMatrix;

movingPlatform.newPlatform = true;

}

}

// Calculate the velocity based on the current and previous position.

// This means our velocity will only be the amount the character actually moved as a result of collisions.

var oldHVelocity : Vector3 = new Vector3(velocity.x, 0, velocity.z);

movement.velocity = (tr.position - lastPosition) / Time.deltaTime;

var newHVelocity : Vector3 = new Vector3(movement.velocity.x, 0, movement.velocity.z);

// The CharacterController can be moved in unwanted directions when colliding with things.

// We want to prevent this from influencing the recorded velocity.

Page 63: BeeT 3D documentation

if (oldHVelocity == Vector3.zero) {

movement.velocity = new Vector3(0, movement.velocity.y, 0);

}

else {

var projectedNewVelocity : float = Vector3.Dot(newHVelocity, oldHVelocity) / oldHVelocity.sqrMagnitude;

movement.velocity = oldHVelocity * Mathf.Clamp01(projectedNewVelocity) + movement.velocity.y * Vector3.up;

}

if (movement.velocity.y < velocity.y - 0.001) {

if (movement.velocity.y < 0) {

// Something is forcing the CharacterController down faster than it should.

// Ignore this

movement.velocity.y = velocity.y;

}

else {

// The upwards movement of the CharacterController has been blocked.

// This is treated like a ceiling collision - stop further jumping here.

jumping.holdingJumpButton = false;

}

}

// We were grounded but just loosed grounding

if (grounded && !IsGroundedTest()) {

grounded = false;

// Apply inertia from platform

if (movingPlatform.enabled &&

(movingPlatform.movementTransfer == MovementTransferOnJump.InitTransfer ||

movingPlatform.movementTransfer == MovementTransferOnJump.PermaTransfer)

) {

movement.frameVelocity = movingPlatform.platformVelocity;

movement.velocity += movingPlatform.platformVelocity;

Page 64: BeeT 3D documentation

}

SendMessage("OnFall", SendMessageOptions.DontRequireReceiver);

// We pushed the character down to ensure it would stay on the ground if there was any.

// But there wasn't so now we cancel the downwards offset to make the fall smoother.

tr.position += pushDownOffset * Vector3.up; }}