Warning: include_once(/home/srivello/rivellomultimediaconsulting.com/wp-content/plugins/wishlist-member/wpm.php): failed to open stream: Permission denied in /home/srivello/rivellomultimediaconsulting.com/wp-settings.php on line 197

Warning: include_once(): Failed opening '/home/srivello/rivellomultimediaconsulting.com/wp-content/plugins/wishlist-member/wpm.php' for inclusion (include_path='.:/usr/local/lib/php:/usr/local/php5/lib/pear') in /home/srivello/rivellomultimediaconsulting.com/wp-settings.php on line 197
Industry News | Flash / HTML5 / Unity3D Game And App Development With Tutorials

Archive for category: Industry News

RMC Primer: Get A Job In Game Development

Category: Industry News, RMC News     |     Tags: C#, Games, Mobile, Unity3D

RMC Primer: Get A Job In Game Development

A career in video game development is challenging and rewarding. But getting into the industry is not easy.

As reported in the Guardian, the game development industry makes $60bn a year [2014]. It is an industry that’s bigger than Hollywood, that dwarves the music business – and an increasing number of young people want to work in it. Hundreds of universities throughout the world offer degree courses in computer games programming and design.

It is a good time to join. With the arrival of digital distribution, games now have a bigger audience than ever; they are beamed directly to our phones, PC, consoles and tablets.

In my previous article Finding Your Next Unity3D Job I overview what companies want in prospective candidates and outline where you can search for available positions.

As a tangent on the same subject, below is a quick overview of working in the industry with a decided focus on programmer roles, my chosen career.

Game Development Careers

Here are the common roles on a small (5-10 person) game development team.

Roles

  • Producer – Owns the ‘product’. Decides what features to add.
  • Project Manager – Owns the ‘process’ and timeline. Decides if time exists to add the desired features.
  • Artist – Creates concepts, production art, and animation. Decides how the game looks.
  • Tester – Plays the game, reports bugs. Decides what needs improvement.
  • Programming
    • Programmer – Codes the tools for the team and the gameplay for the end-users. Decides how the game works.
    • Lead Programmer – Lead the programming team responsible for creating all the computer code which runs and controls a game. Produce the technical specification of the game and managing the overall code development process

Larger teams may have more specific responsibilities in departments (and roles); Backoffice (Accounting, HR, Marketing), Art (Concept Artist, Animator), Audio (Music Composer, SFX), Programming (Engine programmer, gameplay programmer), Game Designer, Level Designer.

Programming

Let’s compare the skills required for programmer and Lead Programmer. Typically a ‘Lead Programmer’ was first a ‘Programmer’ earlier in his/her career.

I choose to divide the lists into 3 areas; the technical skills (fostered by education), the personality skills (less trainable), and the social skills (how we interact with others).

You can see that as a programmer advances in his career, the lead position requires many social skills to excel.

Required skills (Source: CreativeSkillset.org)

Programmer

  • Tech
    • be able to programme in C++, C and other programming languages
    • have specific platform experience, e.g. Wii, PlayStation, Xbox
    • have a good knowledge of game play
  • Personality
    • be systematic and highly organised
    • be creative and possess problem-solving skills
    • be able to work to deadlines
  • Social
    • have good communication skills
    • be able to work on your own initiative and as part of a team

Lead Programmer

  • Tech
    • have a hands-on knowledge of all programming roles
    • have advanced programming skills
  • Personality
    • be able to resolve conflicts and solve problems
    • be able to multitask
    • be creative and innovative
    • be composed under pressure
  • Social
    • be a team player and a leader
    • be approachable and listen to what people need and want, both from other disciplines and within your own team
    • be able to communicate your ideas and vision to the programming team
    • be able to inspire and motivate the programming team to ensure that everything gets fixed on schedule
    • have excellent people skills with management and communication, including tact and diplomacy

Advice For Career Planning

I choose to divide employee effort/value into 3 areas; the product (what is being created), the process (how it is created), and the people (who is creating it). Here is some advice;

Focus on ‘Soft Skills’ – Programming is important. Its ‘the’ core skill to develop, but once you set that ball in motion, shift your focus to other ‘soft’ skills. Everyone is a great programmer. It doesn’t set you apart as dramatically as other areas of improvement. Many will disagree with my point of view. Many product-centric employees believe that doing more development, in less time, with less lines of code is the only goal. As a people-centric and process-centric philosopher, I recommend instead to focus on the soft skills; EQ (Emotional Intelligence Quotient), social graces, communication, language, personal habits, interpersonal skills, managing people, leadership, etc. that characterize relationships with other people.

Focus on Learning – Create a virtuous cycle of meeting the requirements of your assigned job description (typically focused on ‘product’) while also raising quality of the process and bolstering your people skills. For more info, see my previous article Ultimate Path Learning. I contribute high quality Free Unity / C# Video Tutorials for new and veteran developers to build community and sharpen my knowledge and communication skills.

Pick Your Moment – Jack Ma, Founder of Alibaba advises to pick your moment. Your strategy must change as you age.

  • Age: Childhood – Be a good student.
  • Age: 20’s – Follow a mentor. Go to a small company — you learn the passion, you learn the dreams, and you learn how to do lots of things at any one time. Make mistakes.
  • Age: 30’s – You have to think very clearly if you want to work for yourself. If you really want to be an entrepreneur. This is the ‘mid-game’.
  • Age: 40’s – You have to do all the things that you are already good at.
  • Age 50’s – Work for the young people.
  • Age 60’s – Spend time on yourself. Its too late for you to change.

Focus on Passion - Use your early years to try EVERYTHING professionally, then settle into the things that are a fit for your strengths, your interests, and your passions. For more info about my passions including teaching and charity see my previous article Playing For Good.

Consider Your Mid-Game – Over your career (ex. 40 years of work) you will likely hold many different positions and many different companies. You may start as a Game Tester, then become a Programmer, then Senior Programmer, then a Lead Programmer which is generally  most advanced role in that specific career track. For the excellent and ambitious that might happen in the first 10 or so years. So what then do you do for the next 30 years of your career? There are endless layers on top of the value offered within that track, but other opportunities are calling too. The biggest mid-game (i.e. mid-career) question is do you want to lead people, or do you want to stay solo. Consider your strengths and interests. As your answer becomes more clear you can steer your growth and progression to fit that goal.

Avoid ‘Rockstar’ Programmers – These are programmers that 1. are extremely efficient and deliver results and 2. are isolationist and self-serving. There are countless definitions for this type of worker, but let’s stick to definition for now. There is nothing ‘wrong’ with working that way per-se, but when a company actively hires rockstar programmers (through the language of job descriptions and the practice of the recruiting process) it is a red flag. The company may value end-results more than process and may value product more than people. As a job-seeker, be cautious of joining such a team unless those qualities match your career goals. A Rockstar coworker may indeed raise the quality of the product, which is good for you and your portfolio. But a teaching, sharing, collaborative programmer will help you build your own toolset more dramatically which IMHO is more important to your career. As a job-recruiter, be cautious of hiring such a candidate as he/she categorically will not thrive within a people-centric environment and the rest of your team may be impacted as well.

Short Interview About My Career

I have 16 years of experience in video game development [2015]. My roles include; founding team member of Neopets.com, owner and consultant at Rivello Multimedia Consulting (portfolio), and senior programming positions at leading game studios (LinkedIn).

What education do you have?

I decided between studying computer science and graphic design. I graduated with a B.A. degree in Media Studies (graphic design + multimedia). In the first year of my career I changed from an artist position to programmer. I have been a programmer since.

What was your career path?

Game programmer and founding-team member of a gaming startup which grew from 5 people to 180 in 8 years. Managed a team of 12 game developers. Left that company to start another company as a consultant for 8 years. Now, I’m a full-time employee again, as a Unity game developer.

Did you expect to end up in this field?

Ending high-school in 1995 I dreamed of working in video game development. At that time that meant working for one of the biggest companies. Then the internet bubble came and went, mobile phones came and stayed, and democratization of game development made indies a reality. Its a totally different industry now.

When you are interviewing young candidates, what are you looking for?  What advice can I give students so that they stand out?

When hiring for a small team, end-to-end game development experience and social skills are priorities. I like to see a side-project the candidate completed at home handling the game design, development, (simple art), and really succeeding in the polish of the input as well as the feedback to the user. A candidate really impresses who can speak clearly about his or her goals on that project, who can defend the choices made during design and development, and who can take criticism on the completed project. A student should get experience working with people (customer service, retail at a store, etc…) anything where communication is critical so they can speak their mind, listen actively, and demonstrate putting the needs of others first in conversations and meetings.

Are there any programming packages or languages you like prospective candidates to have experience with?

As a web developer I recommend learning some client platform (e.g. HTML5/JS/CSS) and some server platform (e.g. Ruby). Typically members of a team will focus on one or the other, but knowing some of both will help you collaborate with more compassion. Young game developers are advised to learn engine-level programming (e.g. C++) and gameplay-level programming (e.g. C#) for the same reason. I’m learned to program outside of academia, so my focus is mostly client side (Unity with C# most recently which serves me well).

Many students are interested in studying business.  Do you think programming/technology based skills are becoming essential in this area of study?  If so what types of skills?

For business-people the required technology has changed. It went from nothing required, then in the 90′s Microsoft Office was the core skill, then in the 00′s learning to program webpages was the buzz-topic, now I think commanding social media channels (for marketing purposes) may the the latest tech area that business people are encouraged to learn. I’m not sure of the answer, but I’d say if you don’t ‘do’ tech in your job, but you work with people who do, then you want to gain as much expertise as possible on the tech that your coworkers know. This builds rapport/understanding and improves the efficiency the feedback loop between your requests and the tech teams responses.

One of my students ask me to forward this question J. How important is it to have solid mathematical skills in this field?

You can be an excellent programmer without historical interest or excellence in mathematics. Becoming comfortable with ‘logic’ as a concept has been more relevant to me than specific mathematics. Some exceptions where math directly helps my game development are trigonometry for 2d and 3d tasks (collisions, path finding, camera) and statistics for understanding creating controllably-random level generation and AI routines.

Removing cost and skills constraints, what software packages would you encourage future programmers to learn?

For game development. Learn to model simple 3D in Maya, animate it in Maya, texture it with Photoshop, import into Unity3D (or Unreal), and create a simple, complete game with it. The goal is workflow, not polished final product.

What software packages would you encourage future programs to learn that are accessible?

Unity3D. Its extremely popular and accessible (free and cross platform). Other engines exist and the popularity of tools changes, but competency or expertise in any one package is my recommendation. 

If you were to pick a languages to teach students today.  What language would it be and why?

C++ and Java have VAST resources available online and in academia. They are great for learning the fundamentals. C# is great too. From a learning perspective, you want a language with core features such as class based inheritance and strong typing. You can compile and run small demos for free online via Tutorialspoint.com and others.

Resources

  1. Find your ideal job fit (Sokanu.com)
  2. Is It Worth Getting A Degree In Game Development (IGN.com)
  3. How To Get A Job In Game Development (TheGuardian.com)
  4. Be Organized (GettingThingsDone.com)
  5. Evaluate Your Progress (Forbes.com)
  6. Invest In Your Personal Development (Glen Lopis)
  7. Raise Your Own Standards (Jack Zenger)

Play For Good: Volunteer Teaching

Category: Industry News     |     Tags: Business, Charity, Games

Giving & Gaming

People volunteer for a wide variety of reasons, especially wanting to help others. But it’s also OK to want some benefits for yourself from volunteering.

Susan J. Ellis, President of Energize, Inc explains that some people are uncomfortable with the notion that a volunteer “benefits” from doing volunteer work. There is a long tradition of seeing volunteering as a form of charity, based on altruism and selflessness. The best volunteering does involve the desire to serve others, but this does not exclude other motivations, as well.

Instead of considering volunteering as something you do for people who are not as fortunate as yourself, begin to think of it as an exchange.

Consider that most people find themselves in need at some point in their lives. So today you may be the person with the ability to help, but tomorrow you may be the recipient of someone else’s volunteer effort. Even now you might be on both sides of the service cycle: maybe you are a tutor for someone who can’t read, while last month the volunteer ambulance corps rushed you to the emergency room. Volunteering also includes “self-help.” So if you are active in your neighborhood crime watch, your home is protected while you protect your neighbors’ homes, too. Adding your effort to the work of others makes everyone’s lives better.

videogames_sam_volunteering_charities_1_v1

Figure 1.

Education

Through my world travels for work and pleasure, I have been exposed to the amazing beauty (and challenges) in the world. I’m so inspired by what is going out outside of my native USA. While I have not directly experienced too much poverty and sadness — my increasing circle of concern in the world gives me much more to think about and care about. Education is of particular interest to me.

Author Jeffrey D. Sachs, called by Time Magazine as “the world’s best-known economist” has advised an extraordinary range of world leaders and international institutions. In his book The End of Poverty, his focus  is on the one billion poorest individuals around the world who are caught in a poverty trap related directly to their lack of access to capital, technology, medicine, and of course education.  His fundamental argument is that “[W]hen the preconditions of basic infrastructure (roads, power, and ports) and human capital (health and education) are in place, markets are powerful engines of development.”

As the UN’s Poverty And Education study shows the advantages that education provides both improve the living standards of communities and contribute to the social and economic development of countries. The education of girls has a further strong and very important effect on the role of women in society. Some of my personal hopes for global change are equal access to education and equal treatment of woman.

Malala Yousafzai (Born 1997) is a Pakistani school pupil and education activist from the town of Mingora in the Swat District of Pakistan’s northwestern Khyber Pakhtunkhwa province. She is known for her activism for rights to education and for women, especially in the Swat Valley, where the Taliban had at times banned girls from attending school. On 9 October 2012, Malala was shot in the head and neck in an assassination attempt by Taliban gunmen while returning home on a school bus. In the days immediately following the attack, she remained unconscious and in critical condition, but later her condition improved enough for her to be sent to the Queen Elizabeth Hospital in Birmingham, England for intensive rehabilitation. Through her long recover and after, Malala inspires (see video below) children, adults, and governments alike with her message of equality in access to education for girls and boys around the globe.

Teaching English In Indonesia

While finishing a fruitful consulting project I saw an opportunity to block out time to volunteer. The needs for the Live Streaming Media Web Application project were clear and the end-date well-defined. I wound down some other projects too. In addition to searching for my next consulting project I looked for volunteering opportunities with an ideal fit. I knew I wanted to teach, work with young adults, and stay in Asia where I was living. There is abundant need for talented teachers; especially those with computer skills. I interviewed with several engagements and ultimately chose to teach English during 8 weeks in Indonesia.

videogames_sam_volunteering_charities_3_v1

Figure 2. Me, Playing games in the classroom

My students were age 13 to 18 with advanced (level 4 of 4) English skills. We met 5 days per week. There was no provided curriculum — a quality I was seeking in the position. I reviewed what they had been learning ahead of me to plan. Then I added in ‘teaching prep’ as a project within my weekly schedule until the day I began. The first day or 2 we broke the ice. The kids are shy, but enthusiastic. Their interest to learn English is genuine. One of the challenges was that students attend irregularly — on a given day the class filled with only about 8 of the 25 students. I learned during my first week that lessons must be modular, so students can participate fully even if they were not present the day before. Our lessons included travel, art, art history, agriculture and more.

Some other lessons;

  • Friend Interviews: Students divide into groups of two. Each student interviews the partner and presents to the class. (Download)
  • Super Heroes: Students learn about famous superheroes, talk about the extensive vocabulary related to powers and abilities. (Download)
  • Game Show: We learn about the basics of game mechanics (a preview to our talk about video games). The students play (once per week) game-show styles games like ‘Family Feud’. That game is a great example of learning vocabulary, team work, and culture (the question-set is very ‘American’).
  • Geography: We discuss Indonesia’s place in the world, Asia, and major continents. Each student chooses a country and completes internet research (and maybe interviews foreign teachers). (Download)
  • Music & Lyrics: Each week we discuss one pop song. Students listen and write any words they hear. Then with the lyrics in hand we listen again 2 times to review new vocabulary. Finally students debate on the meaning of the song. (Downloads)
  • Jokes: The students each told a joke (they are very shy) and I read some from a list. We discussed humor in books, TV, and films. (Download)

I included downloads to some of the curriculum I created. It is all very basic, but perhaps it would be useful to generate more ideas.

Q. Why is 6 afraid of 7?  A. Because 7 8 9! (seven ate nine!) — Probably my only joke that got students laughing.

Videogames

I love games. Playing and making videogames! All students have access to internet and computers at the school as well as basic computer literacy. Because of my background and profession the school facilitators requested some computer-specific lessons. While I have taught game development at weekend courses, universities, and corporate training gigs, I hadn’t taught a group so young. I decided to build a few lessons around theory and then make a practical lesson focused on visual arts. My students love to art and are very proud of their creativity. Creativity is an outlet that the (otherwise quite timid) Balinese society really evangelizes.

Some computer-themed lessons;

  • Computer basics: The Bahasa Indonesia language borrows heavily from English for all technology terms. Students are familiar with most of the key terms. We reviewed web browsing, web searches. Most days we dedicated some time to searching Google and Wikipedia for some light research too.
  • Videogames 1: I created a concise outline based on my Adobe feature article “Intro To Gaming With Flash“.
  • Videogames 2: In groups students created new game art on paper. We scanned the work and added into an existing game engine which I used previously for more advanced programming classes. See video below for a completed game example. Very cool!

 

Balinese Culture

The teaching opportunity in Bali, Indonesia opened me up to the complexity of the Balinese people. The culture of Bali is unique. People say that the Balinese people have reached self-content. It is not an exaggeration that when a Balinese is asked what heaven is like, he would say, just like Bali, without the worries of mundane life. They want to live in Bali, to be cremated in Bali when they die, and to reincarnate in Bali.

It does not mean that the Balinese resist changes. Instead, they adapt them to their own system. This goes back far in history. Prior to the arrival of Hinduism in Bali and in other parts of Indonesia, people practiced animism. When Hinduism arrives, the practice of Hinduism is adapted to local practices. The brand of Hinduism practiced in Bali is much different from that in India. Other aspects of life flow this way. However, more modern cultural changes are more controversial. Changing too fast, locals fear that something special may be lost.

Traditional paintings, faithfully depicting religious and mythological symbolism, met with Western and modern paintings, giving birth to contemporary paintings, free in its creative topics yet strongly and distinctively Balinese. Its dance, its music, and its wayang theaters , while have been continually enriched by contemporary and external artistry, are still laden with religious connotations, performed mostly to appease and to please the gods and the goddesses.

videogames_sam_volunteering_charities_4_v1

Figure 3. Children painted for a local ceremony

Win-Win

The lessons learned in and out of the classroom will be with me for a long time. Overall the experience was amazing and I already have plans on how to contribute next.

Teaching abroad offers many benefits to the teacher as well of course. A few that come to mind are.

  • You can be a student in your own classroom.
  • It’s a crash course in cultural sensitivity.
  • You’ll get an instant network of local acquaintances.
  • You’ll be tapping into an excellent grapevine. The other teachers and facilitators you meet are amazing people with amazing stories and aspirations.
  • Travel is simple with a great home base.
  • It’s a career builder, even if you don’t want to teach long-term.

References

Find Your Next Unity3D Job

Category: Industry News, RMC News     |     Tags: C#, Games, Mobile, Unity3D

Finding Your Next Job

As game developers we have complete freedom to choose the tools and teams with which we work. Unity is of course a fantastic tool-set for game development and the industry is hungry for talent.

In fall 2013, I transitioned from consultant to full-time employee again to meet evolving career goals. At that time, I researched hundreds of full-time and freelance job postings for Unity game developers. To more deeply understand what are the most popular requirements for prospective employees, I’ve put together information on where to look for your next job, and what employees value in prospective employees. Take a look!

Where to look

Employers looking for Unity3D Developer talent post job listings on a variety of locations. Unity-related job listing sources;

Unity Job Position Titles There is quiet a variety of job titles which focus on Unity-focused game skills. Often the job list title does not include ‘Unity’ in the title, and you may get more results by omitting ‘Game’. However to focus the search results I include this list;

  • Unity (Game) Developer
  • Unity3D (Game) Developer
  • Unity (Game) Engineer
  • Unity3D (Game) Engineer

What Employers Want

Amount of Experience

Prospective employers like to see you have a few ‘shipped’ (launched) games in your portfolio.

  • 3-5 years for senior positions (0-2 for Junior)
  • 2-3 shipped game titles for senior positions (0-1 for Junior)

IMHO, this requirement is an vague predictor of value. Just like ‘years’ of experience. I have hired dozens of employees as well as subcontractors, and for me it is a far more effective indicator of future efficacy to discuss with the candidate his specific experience with ONLY the areas of the Software Development Life-Cycle (SDLC) which are germane to the role. This list includes; project planning, systems analysis, systems design, implementation (i.e. coding), integration and testing, installation/deployment, and maintenance.

Requirements For Senior Positions

The skills, responsibilities, and requirements of a position obviously depend on the company who lists the position, but here are some of the most common items. I’ve divided the skills among basic ‘employee‘ skills, positions with some manager responsibilities, and then between various programming disciplines. Each discipline is pretty separate – for example a job positions may require ‘game’ skills but not any ‘multi-player’ experience. All of these items are taken directly from real-world Unity-related job posts I have found. I included a short explanation for each item too.

Employee

  • Self-motivated: This is probably the #1 thing I see. Companies are trying more and more to be ‘flat-hierarchies’ where both power and responsibility are spread more evenly across all staff. You may see the management approach as ‘Kanban’, ‘Agile’, ‘team-based’, ‘cell-based’, ‘a studio of studios’ or something similar. Flat encourages each team-member to feel more ‘close’ to the project and ostensibly contribute more. I think it is a great philosophy. In my experience the ‘flatness’ is more ‘talk than walk’ – but that is ok. To fit in – be proactive, transparent, and communicative. If you ask AND answer your own questions, manage your own tasks, and speak before spoken-to about the challenges you are facing, you are on the right path.
  • Passionate: This is probably the #2 thing I see. I consider passion one of the most powerful things in life. Intrinsic appreciation brings intrinsic motivation. However, it is unfortunately rare that a company really cultivates passion in those who they don’t think have it.
  • Team-player: I feel item is most important for two reasons. One programming is a very personal, cerebral process. It is akin to putting ones thoughts into code. The same left-brained personality that is drawn to programming is NOT drawn to interpersonal communication and the vast challenges that exist there. Communication and empathy favor the right-brained. As the internet success bubble was building 10+ years ago, it was feasible to market your experience as a ‘rock-star’ programmer. This is someone who can come in and kick ass (as an individual). Rockstars contribute well to a management-less regime, and there were plenty of those. However, the HR & PM atmosphere has matured and we already see a more team-based approach. So because team-work is rare among programmers its important. Secondly, I am a strong believe that (especially in flatter hierarchies) we are all managers — meaning as super employees we all exist to leverage the skills of those around us in addition to our own direct contribution. As teams adopt more flexible, iterative development (see ‘Agile’) each team member is more of a thought-leader than just a ‘doer’. I feel strongly that it is the collaboration between those who are genuinely interested in excelling at collaborating which creates the virtuous cycle that turns good game projects into truly great ones. Can you amplify the effectiveness of your coworkers?
  • Excellent written, verbal communication: For the reasons just stated, programmers are not always good communicators. Besides the interview process (which is a historically horrible predictor of job performance), how can prospective employers evaluate the communication skills of an employee? That is indeed a challenge — and a great subject perhaps for another article. As a worker, it is recommended to educate yourself on communication as much as you do on technical skills. This requires an honest look inside at gaps in interpersonal skills. We all have them. At larger companies the HR department may have free resources on this; books, workshops, lectures. Your communication (emails and public speaking at meetings) should be honest, compassionate, and concise. At smaller companies it takes discipline and a champion – like yourself – to make the time for growth in communication skills.
  • Interested & capable to learn quickly: For any type of employee in any field, self-education is and will be increasingly valuable.  However, in technology this is paramount — especially as languages, platforms, devices, and consumer expectation are growing so rapidly.
  • Ability to work under high pressure deadlines: This is very common. Also is ‘we have a start-up like atmosphere’. I would call this ‘emergency preparedness’ as emotional IQ skills. I think indeed that it is important. However it is trite (meaning-less from overuse) and it shouts ‘our management is disorganized’. Applying for a position listing this, it is recommended that you ask thoroughly about the expectation on utilization (expected hours per week) and access (emergency ‘work’-calls on nights and weekends) of employees.
  • Agile/Scrum project management experience: Instead of traditionally documenting 100% of a project and calendar upfront, teams are embracing a more realistic, ‘wait and see’ and ‘just-in-time’ organic process. Agile is not a match for all employees, and is certainly not a match for all (most) companies either. In the 7-8 years since this buzz-word as been mentioned to me in consulting projects, I have not met one team that FULLY embraces Agile.

I have found that my self-motivation and desire to learn voraciously to be some of my strongest attributes. I have found getting ‘out of my own head’ and bringing truer empathy to workplace dynamics to be an ongoing challenge. I have worked hard to add team-work and communication to my repertoire through intensive study and driving my experiences toward growth. At one large employer I was lucky enough to sponsor a 12-month team building program for me and my staff of 12 programmers. Not everyone loved it. It is hard to do ‘extra’ things at work when deadlines loom. However respecting the soft-skills (everything that is not technical) will come with the employee’s maturity.  

There is a very real chasm between programmers and designers. There is a chasm too between goals of making the game ‘fun’ and making the game ‘profitable’ (e.g. monetization and monetization metagames). Any employee who can bring efficiency and maintain morale between these groups will shine to upper-management. I’m very lucky to have a University art degree which gives me compassion for the challenges of artists working within increasingly technical workflows. On the fun-vs-profit I have learned hard lessons to defer-to and support whatever is the mission statement of the team/company. While I choose to be a programmer, my background brings a little more peace to my teams, I think.

Manager

Management responsibilities vary greatly between personnel management or project management. The trend of ‘flat hierarchy’ organization we see today often spreads these responsibilities to ‘normal’ staff and gets rid of dedicated management. So the normal staff (i.e. artist or programmer) who is ALSO handling management duties. While employees may embrace the theoretical meritocracy (anyone can be a leader), the loss overall from lack of academic management understanding (ostensibly lost because dedicated manager roles are lost) should not be underestimated. Also solitary team members, talented but socially awkward may not be compatible with such teams. Another potential loss. Position listings which require leadership of people or projects may include the following;

  • Conflict resolution: Foster a spirit of teamwork and unity among department members that allows for disagreement over ideas.
  • Plan Staffing Levels: Assess man-power vs work-load, assist HR in recruiting, interviewing, hiring.
  • Effective performance evaluation: Provide feedback through employee recognition, rewards, and disciplinary action.
  • Experience mentoring/coaching: A good manager leads, a great manager creates leaders.  Recognizing and allowing subordinates to flourish is critical. Guiding and cultivating requires maturing and generosity. This leader may champion other employees’ causes to upper management and HR too.
  • PM Software Expertise: Knowing the most common 20% of functionality in any one PM software (e.g. BaseCamp, Unfuddle, MS Project) is sufficient. However, I’ve seen managers that are so familiar with PM they can offer flexible per-team and per-project changes to the workflow. One size does not fit all in PM.
  • Agile/Scrum: Increasingly common. See ‘Agile’ above.

Programming – General

  • Write clean, documented code and also Employ object-oriented programming (OOP):  These are both legitimately vital and top the list of the most commonly required skills. If you are a best practice champion ( I absolutely am, but often waiver to the (lack of) seriousness of my clients), investigate your prospective employers techniques to establish (coding standards bible) and police (mandatory code reviews) such clean code. If the team does not make time for best practices, and most (especially in ad-agency based work) do not, then such practices will not be done.
  • Programming Language: The majority emphasize C#, some mention C# & JavaScript*. I have not seen any that mention Unity’s only other coding language — Boo. While rare, it is worth mentioning that positions specifically related to rendering disciplines may also ask for experience with Unity’s ShaderLab language. ShaderLab’s style it similar to CgFX and Direct3D Effects (.FX) languages and it is used to describes everything needed to display a Material.
  • Use version-control (GIT/SVN): Any mid-sized or larger team is using version control. I must assume. Smaller companies may not have the technical know-how to require it of you. In all cases use it! In my experience there are 3 levels of version-control experience; 1) you can update/commit fine but must call over a coworker for assistance on code-conflicts or other tasks, 2) You can handle all of that and you can ALWAYS fix your own mistakes, 3) You are the person who sets up build automation and answers other peoples git problems. Admittedly I my level is somewhere between #1 and #2. GIT is awesome, and scary.
  • Experience in AS3/Flash: This is VERY common in the listings and I believe this is for 3 primary reasons. First, the Flash has a very strong history in the casual game market starting around year 2000/2001. Second, the skills of a Flash game developer are directly relevant to a Unity game developer position. Lastly, due to strategic changes by Adobe, and the community’s reaction, many Flash game developers are looking for non-Flash jobs. Employers are smart to tap into the Flash game developer market. The ‘death’ of Flash was/is/and-will-be strongly exaggerated. As of 2014, really talented Flash developers still have their pick of top jobs in casual game development — including to a lesser degree in cross-platform mobile.
  • Experience in iOS/Android SDK: Unity teams deploying to these devices may need your native coding skills to create plugins for C# to speak directly to ‘hidden’ features in the device. Also, it is correctly assumed that if you know these platforms, you have experience creating for mobile (and handling some of the related challenges below).
  • Use test-driven development (TDD) practices:  While this one listed, I’m curious if the job really requires it and doubtful the team leaves time for it. Test-driven development is a strategy of creating unit tests ‘as you go’ for your work, rather than later or never. It is proven to yield less breakable, less bug-prone code, but it is FAR less practiced than listed. Kudos to prospective employers who dreaming big and list this in the job post, but it is trite. The best code I have written (with respect to stability) has been on TDD teams, however some of the most frustrating projects have been where such best practices are required but not allocated for (expertise, time, workflow, accountability).

*JavaScript and UnityScript are synonymous here

Programming – Game

  • Passion for games: EVERYONE lists this. Trite. Obviously important.
  • Mobile: Handle device-specific features (accelerometer, camera, etc…), mobile api’s (Ad integration, in-app purchases, etc…), and mobile development workflow (app-store submission, etc…)
  • Cross-platform: Handle multiple screen resolutions and cross-platform workflow
  • 3D: Knowledge of 3D-specific math (Vector, matrices, etc…) provides value to working on core game mechanics and camera (following, avoiding, line-of-sight) systems.
  • AI: Chain of command algorithms to patrol, seek, attack, the player, etc…
  • Rendering: Experience creating shaders allows you to shape the way the game is rendered, creating unique looks like we see in Limbo and Geometry Wars.
  • GUI: Handling input and layout of buttons, text, and overlays. On your team, this worker may be the artist with the most programming skills or the programmer with the most art skills.
  • Prototype creation: Some developers like working with established, proven API’s and common mechanics. Those who demonstrate incredible creativity and communication and also favor more experimentation, hacking, and are at-home with loose requirements/documentation can excel at the earliest stages of pro-typing new game and app concepts.

Programming – Cross-device

  • Mobile: Working on mobile presents many, many challenges. Small screen-size, multiple-screensize, touch input, device-specific features, and more…
  • Ability to optimize: While always important in software, and increasingly important for games, optimization is of paramount importance on the resource-starved mobile devices. Knowledge in optimizing rendering for fast and stable frame rate as well as optimizing for low file-size and low ram-consumption are most commonly requested.
  • Multi-screen: The business requirement to launch on computer, phone, and tablet requires games to be flexible and (asset) workflows to be well-organized. While primarily important to UX and UI experts on your team, these concerns will touch your life too.
  • Multi-platform: With middle-ware tools like Unity, game developers are both blessed and cursed by the write-once-deploy-everywhere paradigm.  Your game projects can do more for more potential game players, but this often requires (figuratively) forking your code to handle the various deployment paths. Team leaders with good solution/design patterns should set the tone, but each developer must be cognizant of the readability and flexibility of her code.

Programming - Tools / Systems

The workflow of every game project includes making some tools to assist the development process. Unity’s incredible editor scripting together with the Asset Store marketplace, make tool-development skills even more relevant and marketable. While on small teams these responsibilities may not be expansive, larger teams often dedicate one or more developers exclusively to the creation of tools.

  • Tool/API design for coworkers: Very very different than traditional end-user-focused development, designing and developing systems with your fellow coworkers in mind has its own batch of challenges. Analyzing upfront what the needs of your team will be requires both experience and technical know-how as well as excellent leadership and communication skills to discuss needs with your team. Unity is so very friendly at tool-creation even one-man-teams need tools. When your team size is 5 to 8 (very common today), a proactive developer can save precious resources with intelligent work-flows and tools. A few examples include level-editors for in-IDE level generation and well-designed API’s to send high-scores from the game to your companies back-end systems.
  • Extend Unity: Knowing the UnityEngine and UnityEditor API’s related to creating custom inspectors, custom windows, gizmos — all greatly expanding what you and your team can do with the Unity IDE is of critical importance. This is the ‘how’ which correlates to the last bullet item.
  • Knowledge of CMS: Your Tool/API may very well speak to a back-end for level-data, user-data, or more info. Knowing how to use a Content Management System (CMS) is a no-brainer requirement, but mastery on CREATING them and setting up easy to use workflows for technical and non-technical team members is really valuable.
  • Knowledge of back-end/database: You may need to program server code or collaborate with those who do. Knowledge with common languages (PHP, .NET, etc…) and tasks (database setup) are important.

Programming – Multi-player

  • 3rd Party Multi-player API Experience: Knowing the Xbox Live, PSN, Steamworks…
  • Good knowledge: of contemporary competitive and cooperative multi-player gaming paradigms
  • Latency/Lag-Hacking: Handling client-prediction algorithms to minimize loss of perceived world-sync for end users.

Programming – Unity Specific Stuff

In addition to the requirement of ‘must know ‘UnityEngine API’ we also see…

  • Must have Unity-Pro License: This requirement is listed in freelance jobs (I have no problem with that) and also (surprisingly) in full-time jobs. It reeks of an employer that does not provide you your computer workstation and the software on it — which is a very real red flag. In a way this is a indirect requirement that you are familiar with the few (honestly) critical pro-only features, but I find it to be a sloppy investigation.
  • Knowledge of Packages: The most common 3rd party libraries I see mentioned are NGUI (easily the most common), 2DToolkit, and surprisingly Playmaker. I think PlayMaker is great and has uses on nontechnical and expertly technical teams, but I’m very surprised its greatness has bubbled up already to job listings.

Unity3D Version 4.2 Released!

Category: Industry News     |     Tags: C#, Flash, Games, Mobile, Unity3D

Learn Unity 3D & C# – From Basics to Advanced

Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development. Read my full articles of “Introduction to Unity3D” and “Tutorial Series: Unity3D & C#“.

There is incredible momentum in the Unity3D product and its community. Here is a look at key features of the latest release.

Top Unity3D 4.2 Features

My top 3 ‘Free Unity’ version features per category are here;

New platforms

  • Windows Phone 8 (Yes!)
  • Windows Store (Yes!)
  • BlackBerry 10 (Yes!)

‘Free Unity’ Features (Formerly Pro Unity Features)

  • Realtime shadows (one-directional light only; hard shadows only). (Yes!)
  • Text-based serialization of materials, prefabs, scenes etc. for easier version control. (Yes!)
  • NavMesh baking (OffMeshLinks still require Pro).

Graphics

  • OpenGL for Android
  • Shuriken Collision Event Callback Scripting
  • (None)

Editor

  • Preset Libraries: Create new libraries and save. (Yes!)
  • Platform switching, player building and asset importing can now be cancelled.
  • (None)

See Unity’s official 4.2 announcement here.

Want More Video Tutorials?

We are currently creating tons of new training content for Unity3D.

Play For Good: Videogame-Related Charities

Category: Industry News     |     Tags: Business, Charity, Games

Giving & Gaming

Philosopher Albert Schweitzer shows us “No matter how busy one is, any human being can assert his personality by seizing every opportunity [to give back] for the good of his fellow men.  He will not have to look far for opportunities. Our greatest mistake, as individuals, is that we walk through out life with closed eyes and do not notice our chances.”

Author and video game advocate Jane McGonigal explains her #1 goal in life is to see a game designer nominated for a Nobel Peace Prize. She forecasts that this will happen by the year 2023. Of course, it’s not enough to just forecast the future — She’s also actively working to make it a reality. (And you can too — join Gameful, the Secret HQ for Worldchanging Game Developers.) Her best effort so far? SuperBetter, a game that has helped more than 250,000 players so far tackle real-life health challenges like depression, anxiety, chronic pain and traumatic brain injury.

Figure 1.

As a professional game developer with 13 years experience (2013) I am regularly involved in charities through donations mostly. With the flexibility offered by owning and running my own consultancy, I can occasionally take time out for volunteering too. This year I taught English (and some gaming too!) in Indonesia (See Figure 2). The experience left me positively (changed and) charged. Back in the office, more research has led me to write this article on the many ways we can all give back using skills from game development. I’m very excited for the possibilities. I have already contacted many companies to ask how I can be of service. I’ll provide an update in the future with new discoveries.

Figure 2. Me, Teaching English (And Videogames) In Asia

As individuals we can all give a bit more to help the issues we care about. But the issue of course is not just individual. Companies can build their charitable concerns to augment business objectives including of course public relations and to attract proactive new talent. As I recently announced (2013), I am actively seeking a full-time position as a Unity3D Game Developer. Corporate charity is an important part of my evaluation of successful fit within company culture.

Game Companies Doing It Right

The Humble Bundles are a series of collections (“bundles”) of digital creations that are sold and distributed online at a price determined by the purchaser. The bundles are typically offered on a semi-regular basis during a two-week period; sales often include bonus games or media offered mid-week through the sale for those that have already purchased the bundle or otherwise pay more than the average.

As GuardianLV explains, there are two aspects of Humble Bundle that separate it from the conventional retail model. The first one is that the buyer can determine the price of the product they buy. One would think that this would drive the price down; but Humble Bundle has already thought of that. The consumer must pay above the average price in order to get the bonus, most coveted games in the package, among other benefits. This prevents buyers from lowballing the price too much, as many of them primarily purchase the bundle specifically for those games. Also, only those that pay over $1 will get keys to Valve’s Steam client. This is significant because Steam sometimes holds contests allowing players to win prizes by accomplishing certain achievements within the games offered in order to enter a raffle. This became a problem with Humble Indie Bundle 4, as many gamers were purchasing multiple packages for the minimum price of one cent in order to enter a concurrent Steam contest multiple times, and that is why this policy was put in place.

As of September 25, 2013, our customers have given more than $25 million to the many great charities associated with Humble Bundle. The generosity of Humble Bundle customers has benefited many vital charities. It recently closed with over 2.1 million bundles sold and $10.5 million in sales. The portion of that given to charity was significant.

The other aspect that sets Humble Bundle apart is that gamers decide how much of their money goes to what end. Buyers can choose what percentage of what they pay goes to the game developers, to Humble Bundle, Inc. itself, or to the charities corresponding to that particular package, which vary from bundle to bundle. Furthermore, the consumer can choose how much of their charitable donation goes to what specific organization.

Figure 3. Consumers select how much of the purchase price goes to charity

Charity Organizations

videogames_charities_gamesforchange_v1

Games For Change

The mission statement for Games For Change (G4C) isCatalyzing Social Impact Through Digital Games”. Since 2004, they facilitate the creation and distribution of social impact games that serve as critical tools in humanitarian and educational efforts.

President of G4C Asi Burak is an award-winning game creator, tech executive, and social entrepreneur. He is the Executive Producer of the Half the Sky Movement games, he orchestrated partnerships with Zynga, Frima Studio, some of the world’s leading NGOs, and Pulitzer Prize-winning authors Nicholas Kristof and Sheryl WuDunn.

Unlike the commercial gaming industry, G4C aims to leverage entertainment and engagement for social good. To further grow the field, they convene multiple stakeholders, highlight best practices, incubate games, and help to create and to direct investment into new projects.

videogames_charities_gamesforgood_v1

Games for Good

Games for Good leverages game mechanics for social benefit. Games created for this segment of the industry hope to teach, train or simply generate awareness of a topic, an issue or a societal problem, therefore creating change – in thinking, actions or attitudes.

Examples of Games for Good

  • Games that teach young people to become globally conscious citizens, contributing their own solutions to social issues
  • A game that focuses on the moral challenge of oppression of women around the world, with content designed to teach young women how to unlock their economic power
  • A title that helps people form good savings habits, avoiding the pitfall of too many credit cards and debt
  • Games that help players think more critically about complex issues like race, religion, nationality, class and culture

Games for Good brings together leaders from non profits, government, corporations, academia and the gaming industry. This game category often provides an entry point for public sector entities new to the field, introducing a new way for these organizations to get their point across.

The Serious Game Association is building a directory to make Games for Good accessible to more organizations and people.

videogames_charities_extralife_v1

Extra-Life

Since 2003, Extra-Life has set up and organized Child’s Play, a game industry charity dedicated to improving the lives of children with toys and games in our network of over 70 hospitals worldwide. Over the years, you as a community have answered the call and come together to raise millions of dollars.

Child’s Play works in two ways. With the help of hospital staff, they set up gift wish lists full of video games, toys, books, and other fun stuff for kids. By clicking on a hospital location on their map, you can view that hospital’s wish list and send a gift.

Child’s Play also receives cash donations throughout the year. With those cash donations, they purchase new consoles, peripherals, games, and more for hospitals and therapy facilities. These donations allow for children to enjoy age-appropriate entertainment, interact with their peers, friends, and family, and can provide vital distraction from an otherwise generally unpleasant experience.

videogames_charities_gamesthatgive_v1

Games That Give

GamesThatGive was founded in 2008 by Adam Archer and Kris Goss, great friends and self admitted geeks. GamesThatGive was built around the belief that great companies, and their customers, want to make a difference. Even beyond that, they want to help others make a difference.

While many companies engage in charitable activities, they are rarely effective at involving their customer base in these efforts. That’s why GamesThatGive combined gaming with charitable giving to create the leading platform for engaging brands’ customers in charitable activities.

And so far, the results have been exceptional. GamesThatGive’s clients now include many of the biggest brands in the world. These brands have built trust and loyalty with their customers, and at the same time have helped make the world a better place.

When companies and customers play games to help others, everyone wins!

Please email us today. A real person will always respond, and we’d love to hear from you.

videogames_charities_iggg_v1

IGFG

Indie Games For Good is a marathon event. It is about encouraging people to donate to Child’s Play while generating exposure for independently developed games. We’re going to run a live stream of us playing indie games, and we’ll keep playing for as long as people keep donating. Unlike other gaming marathons, which only play a predetermined list of games, the games we play during IGG Marathon will be determined by requests from our donors, so our viewers will be directly involved in the experience. Last year we raised $12,856.76 for Child’s Play, and played for 76 hours. The year before that, we played for 79 hours and raised $6,816.40.

videogames_charities_specialeffects_v1

Special Effect

SpecialEffect is a registered UK charity which helps to find ways for disabled people, unable to use a standard video games controller, to be able to enjoy the interaction, fun and many other benefits of playing video games.

They set up, create, lend and support the use of specialist games controllers from our library of equipment. Everyone they work with is different. Some of the people they work with find it difficult or impossible to control parts of their body other than their eyes. In these instances SpecialEffect uses computers which are controlled just by moving their eyes.

The demand for this work is growing all the time, so they are asking you to help to meet this need and help us purchase this very special piece of equipment which will add an additional eye-controlled gaming system to our library.

By pledging and spreading the word to your friends and fellow gamers, they can help more people, more quickly together.

How You Can Help

Checkout great charity organizations that mix gaming with a cause you care about. You can make a donation and perhaps volunteer your time.

In a larger way, consider how your current company and your game projects affect others. Not every game must ‘give’ or ‘teach’, but the impact we each have on the world is big and can always be bigger and better.

Watch the great video below. It is fantastic.

References

Using Symlinks For Unity Game Development

Category: Industry News, Quick Tips     |     Tags: C#, Debugging, Project Planning, Unity3D

Unity 3D & C#

Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development.

As always, RivelloMultimediaConsulting.com/unity/ will be the central location for deep articles and tutorials, Facebook.com/RivelloMultimediaConsulting (like us!) will engage the growing RMC+Unity community, and for the latest opinions and cool links follow me at Twitter.com/srivello.

There is incredible momentum in the Unity3D product and its community. I recently posted “The Best C# Code Naming Conventions” and “Unity Best Practices”.  I came across one best-practice that requires a bit of setup, so here it is; using symlinks for game development.

Unity’s Weaknesses

The Unity Editor IDE does not facilitate collaboration between developers nor collaboration between projects.

  • 1.Want to use version control? Git? SVN? You can, but it is not easy. While certainly possible I suspect these strategies are purposefully kept difficult to encourage developers to purchase the Unity Collaboration & Unity Asset Server packaged features which are available for sale on the official Unity Asset Store.
  • 2. Want to share your code between projects (local or remote)? You can, and it is easy with custom packages (here is how), but it is not great. You are sharing a COPY of your code. Update your code and you have to re-export and re-import it everywhere. Difficult! I suspect its difficult for the same reason as above.

I’m happily surprised how great Unity Indie (free license) is. I really am. Yet, I’m still disappointed at these shortcomings.

Fortunately there are some free workarounds.

Workaround 1. Version Control

You can indeed use any version control to collaborate with other developers (local and remote). Its a bit tricky to setup (here is how, and here is some GIT advice). Enjoy!

Workaround 2. Symlinks

On Window (here1, here2), MacOSX (here), and Linux (here) you can create symlinks. In computing, a symbolic link (also symlink or soft link) is a special type of file that contains a reference to another file or directory. A symlink is SIMILAR to a shortcut (Windows) or alias (Mac). You click the symlink in Finder (Mac) or Windows Explorer (Windows) and it opens the original file. You’ve probably used them often. The added benefit of symlinks is that applications (most) cannot tell the difference between a symlink and the original file or folder. It is this difference we will exploit here.

Here are the instructions for using Symlinks with Unity on MacOSX to share code between three unity projects. The setup would be similar on Windows/Linux. Give it a try on your platform and post below with any suggestions!

Demo

Create Your Code Library

  1. Open the Unity Editor IDE
  2. File -> New Project… -> “/Users/srivello/Desktop/MyUnityLibrary”
  3. Assets -> Create -> Folder -> “MyUnityLibraryScripts”. This folder (and any subfolders) will be the location of 100% of the code you want to share. Let’s add one file to share.
  4. Assets -> Create -> C# Script -> “MyUnityLibraryScript” with the contents shown below.
  5. Drag “MyUnityLibraryScript” into “MyUnityLibraryScripts” within the Project window.
  6. File -> Save Project
  7. File -> Save Scene As… -> “MyUnityLibraryScene”
<br />//SAMPLE CONTENTS FOR THE CLASS.<br />//ANY VALID CODE IS A GOOD TEST<br />public class MyUnityLibraryScript<br />{<br />//Test<br />public string sampleVariable = "Hello World";<br />}<br />

Create Your Game 1 Project

  1. Open the Unity Editor IDE
  2. File -> New Project… -> “/Users/srivello/Desktop/MyUnityGame1″
  3. Assets -> Create -> Folder -> “MyUnityLibraryScripts” with the contents shown below.
  4. File -> Save Project
  5. File -> Save Scene As… -> “MyUnityGame1″

Create Your Game 2 Project

  • Repeat the same steps for ‘MyUnityGame2′.

And now here are a few solutions to ‘share’ the code between the projects. Ideally A would work in all cases on all operating systems. I’m still working on that.

A. Create Symlink

UPDATE: A) The following fails on mac. Mac does not allow ‘hard links of folders’ which Unity wants. Mac can do soft links but the Unity Editor IDE does not recognize ‘soft links of folders’. Anyone have the following 3 lines working on PC? Share the lines as a comment below. Anyone have a workaround for MAC?

  1. Open the native MacOSX application ‘Terminal.app’
  2. Type “ln -s /Users/srivello/Desktop/MyUnityLibrary/Assets/MyUnityLibraryScripts/ /Users/srivello/Desktop/MyUnityGame1/Assets/MyUnityLibraryScripts” (without the quotes). This creates a symlink from the EXISTING folder in MyUnityLibrary to the NEW (symlink) folder in MyUnityGame1. Use absolute paths as I show here.
  3. Type “ln -s /Users/srivello/Desktop/MyUnityLibrary/Assets/MyUnityLibraryScripts/ /Users/srivello/Desktop/MyUnityGame2/Assets/MyUnityLibraryScripts” (without the quotes).

B. Use Rsync

  • You can download this free Mac App and it works great. (https://www.macupdate.com/app/mac/20983/arrsync) But you have to manually click ‘sync’ whenever you want to refresh the folder across your projects. Not bad. Anyone have a better workaround?

Summary

So what have we done here? Now both MyUnityGame1 project and MyUnityGame2 project have access to the code from MyUnityLibrary. Currently we have just one class in there. ANY of the 3 projects can be opened and you can edit/add new files. They all share a reference to the original MyUnityLibraryScripts folder. No need to COPY scripts! Great. No need to Export packages or Import packages! Great.

Gotchas!

The above workflow solves much of the confusion and problems reported by the community. However there are still some issues with my technique. Here are a few of the issues;

What Do YOU Think?

Have a comment? Please post below. This is a hot topic and I’ll respond promptly over the next month.

The Best C# Code Naming Conventions And Standards

Category: Industry News, Quick Tips     |     Tags: C#, Debugging, Project Planning, Unity3D

Unity 3D & C#

Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development.

As always, RivelloMultimediaConsulting.com/unity/ will be the central location for deep articles and tutorials, Facebook.com/RivelloMultimediaConsulting (like us!) will engage the growing RMC+Unity community, and for the latest opinions and cool links follow me at Twitter.com/srivello.

There is incredible momentum in the Unity3D product and its community.

In this post I show the Microsoft coding conventions of C#. These are recommended by, but not required by, Unity Technologies for Unity’s C#. I compare those to my own RMC coding conventions (Rivello Multimedia Consulting).

It should be noted that the implementation of C# in Unity is based on Mono. Mono is a software platform designed to allow developers to easily create cross platform applications. Sponsored by Xamarin, Mono is an open source implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime. As far as I can tell, Unity’s C# is the same as .NET’s C# in its approach to coding conventions.

Naming Conventions

they are blah…

I famously (famous in my little world) published my coding standards years ago. They were based on ECMA-script standards and Hungarian notation. I used it myself and within my teams extensively. My projects were non-C# at the time. Now my projects are C# (Unity), so this post is exclusively related to C#.

Terms

  • Naming/Coding Conventions – This relates to the how a developer chooses to name and capitalize the custom keywords he uses. Generally each platform/language has a recommended format but NOT a required format. Some IDE’s offer compiler warnings (not errors) which encourage adoption of its recommended format. That is the focus of this post.
  • Style Conventions – This relates to the how a developer chooses to indent, comment, and add whitespace to his or her programming. Generally each platform/language has a recommended format but NOT a required format. Some IDE’s offer an ‘autoformat’ which will convert your file to its recommended format. That is NOT the focus of this post.
  • Lower Camel Case - Naming convention where the first letter of a name is not capitalized and each element of the name begins with a capital letter. e.g. iPhoneCase.
  • Upper Camel Case (aka Pascal Case) – Naming convention where the first letter of a name is capitalized and each element of the name begins with a capital letter. e.g. PowerPoint.

Benefits of Adopting A Coding Convention

Regardless of which convention you choose to use for Unity or other platforms, having some sort of convention is considered a good idea by the majority of the development community. A hallmark of Getting Things Done efficiently is to automate what can be automated. Once a team has standards and adopts them (both admittedly time consuming) the time improvements in the daily workflow are notable. There is less discussion on why or how to name things. It just gets done.

  • Consistency - The code base as a consistency in presentation regardless of team location, spoken language, or individual programmers.
  • Integration – The code, the review of the code, and your team are more tightly integrated. Theoretically code is more interoperable (copy/paste) and mutually intelligible.
  • Maintenance – Conventions aid readability. Readability helps new and existing programmers revisit the code base for fixes and improvements.
  • Communication – Developers more implicitly understand each other in written and verbal communication.
  • Ownership – More consistency in coding standards across a code-base encourages Collective Ownership, the feeling of respect, care, and reverence developers for their own work and for those who contribute thoughtfully to their own work.

To be fair, there are drawbacks too. The additional time required per team to develop standards, implement standards while coding each day, police such standards is considerable. You may find certain rebellious personalities and certain cultures which value independence may not take to the idea of standardization well. This may limit hiring options and lengthen on-boarding process. What are the other drawbacks?

Controversy

Few developers argue the benefits of coding conventions, yet many argue if the time and discipline required is worth it. Some developers simply refuse to add ‘cosmetics’ to their code. In their eyes, if it functions well, the code is good enough.

More contentious yet — what are the criteria of a good standards? A few criteria most people can agree on are here.

  • Consistency – Whatever rules there are should be applied evenly and applied everywhere.
  • Pragmatism – The convention should be concerned with ‘important’ things and nothing else.

Comparison: C# vs RMC

I created a single example of both 1. RMC naming conventions and 2. C# naming conventions. You can see that snippets 1.1 and 2.1 between the two standards are similar, however all other snippets are different. The code is below (and also attached as CSharpCodingStandardsTemplate.cs). Below the indentation has been removed for easier reading.

void Start ()
{

//—————————————————————–
// 1. RMC Naming Conventions
//
// (See http://www.rivellomultimediaconsulting.com/c-sharp-coding-conventions-and-standards/ )
//
//—————————————————————–

// INSTANTIATE
//1.1
ClassWithRMCConventions classWithRMCConventions = new ClassWithRMCConventions();

// STATIC MEMBER
//1.2
ClassWithRMCConventions.SamplePublicStaticMethod(“foo”);
//1.3
string s1 = ClassWithRMCConventions.SAMPLE_PUBLIC_STATIC_CONSTANT;

// INSTANCE MEMBER
//1.4
classWithRMCConventions.samplePublicMethod(“blah”);
//1.5
classWithRMCConventions.samplePublicVariable = “foo blah”;

//—————————————————————–
// 2. C# Naming Conventions
//
// (See http://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx)
// (See http://msdn.microsoft.com/en-us/library/ms229045.aspx)
//
//—————————————————————–

// INSTANTIATE
//2.1
ClassWithCSharpConventions classWithCSharpConventions = new ClassWithCSharpConventions();

// STATIC MEMBER
//2.2
ClassWithCSharpConventions.SamplePublicStaticMethod(“foo”);
//2.3
string s2 = ClassWithCSharpConventions.SamplePublicStaticConstant;

// INSTANCE MEMBER
//2.4
classWithCSharpConventions.SamplePublicMethod (“blah”);
//2.5
classWithCSharpConventions.SamplePublicVariable = “foo blah”;

//—————————————————————–
// A. Analysis of Naming Convention – Class External
// (Referring ONLY to outside of a class, its API, as shown above)
//
// 1. RMC Convention is **unique** across each; public vs. static,
// method vs variable, non-constant vs constant.
//
// 2. CSharp Convention is **the same** across each.
//
//—————————————————————–

//—————————————————————–
// B. Analysis of Naming Convention – Class Internal
// (Referring ONLY to inside of a class)
//
// 1. RMC Convention is TBD.
// 2. CSharp Convention is TBD.
//
//—————————————————————–

}

References

What Do YOU Think?

Have a comment? Please post below. This is a hot topic and I’ll respond promptly over the next month.

Intro To Unity3D and AR (Augmented Reality)

Category: Industry News, Quick Tips     |     Tags: Augmented Reality, C#, Games, Mobile, Unity3D

Learn Unity 3D & C# – From Basics to Advanced

Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development. As always, RivelloMultimediaConsulting.com/unity/ will be the central location for deep articles and tutorials, Facebook.com/RivelloMultimediaConsulting (like us!) will engage the growing RMC+Unity community, and for the latest opinions and cool links follow me at Twitter.com/srivello. There is incredible momentum in the Unity3D product and its community. Here is more information on using Unity3D with Augmented Reality.

Augmented Reality

Augmented reality (AR) is a field of computer science that involves combining the physical world and an interactive, three-dimensional virtual world. I originally wrote a complete demo, source code, and article for my client Adobe – “Augmented Reality With Flash“. Now I’ve updated the information regarding Unity3D. In a future article I may make the full Unity demo source code available. While mainstream audiences are now becoming aware of AR, it is not new. Its background is intertwined with decades of computer science development. Virtual reality (VR), AR’s more familiar counterpart, is the replacement of the user’s physical reality (particularly that which is experienced through sight and hearing) with a computer-generated reality. The idea of a virtual experience is exciting — creating entertaining and educational sensory encounters that do not exist in our everyday lives.

From a consumer standpoint, it seems that AR advances have come out of nowhere to surpass VR advances. The acceleration in AR technology is due to two major factors: First, users are still experiencing reality, so believability is easier to achieve. Adding simple graphics (such as text or simple shapes) and color effects (such as night vision or thermal vision) to reality creates a better user experience. The user is still seeing a mostly familiar world. Second, this more subtle use of computer graphics is less expensive with today’s technology, making it more feasible than VR. Let’s take a look at augmented reality, its current uses, and its future potential.

Practical Uses of AR

The video game industry has released major augmented reality products for more than a decade. The Eye Toy for Sony PlayStation 2 and 3 takes input from an inexpensive video camera and composites the live video feed with CG onto the TV screen. This toy detects the user’s body position in front of the camera as an alternative input method to the typical joystick or gamepad, deepening the user’s immersion into the game world. Detection schemes continue to advance, allowing for more engaging interaction.

There are AR applications outside of console games, including military and consumer products, too. Night-vision goggles and targeting-assistance technology help marksmen in battle, and children’s stories come to life with AR-enhanced books. The uses are vast. With AR-enhanced books, each page of a real-world book is outfitted with a marker — a pattern that is detectable by AR. As the child turns each page, a computer is able to place a virtual 3D animation on top of a physical image printed on paper. While the marker is often an image as in this example, it could also be the user’s face.

Basics of AR

  • Marker Detection – The marker is located by the application. Typically the device webcam is used. The webcam inspects the physical reality near the user to find a predetermined marker (image or the users face).
  • Transform Mapping – The transform (position, rotation, scale) of the marker are interpreted. Move the marker and the transform updates.
  • Rendering – Now the 3D model is updated to rendered to the screen.

Essential Libraries

Because of the growing popularity of AR, many platforms have 3rd party packages (free and premium) to facilitate development. Unity too. While you could create you own system from scratch, it is highly recommended to find the best 3rd party library and use it. Your end product will be higher quality and you will save greatly on time to market. You can choose any one from this list; Unity3D Packages for AR

*Seem to be popular

Vuforia is the best and free to use. I tried with Metaio, it’s easy to use than Vuforia, but the tracking quality don´t convince me. Vuforia handles the pattern occlusion is robust, and it’s framerates are high, much higher than Metaio and NyARToolkit. – 3rd Party Blog Comment

There are pros and cons to each. In a future article, I may evaluate each of these options. Some of the key differences are cost, ease of use, completeness of documentation, breadth of features, and accuracy (speed) of tracking the marker from the camera and transforming the model. Each package surely has its own workflow and API, however the major concepts are the same. So once we choose a package, we follow this the basic setup.

Developing Augmented Reality

Marker Setup

Figure 1. Marker Image

Figure 1. Marker Image

The marker image is a graphic drawn, printed, and shown to the end application as it runs. Your AR package, with help from the marker data file and parameters file, will detect this shape via webcam. To design a graphic, fit the desired shape within a white square that is centered within a larger black square. Keep your shape simple for best results. Note the sun shape in the graphic. This helps the application detect which way is up for the marker and assists its angle and rotation detection. Your design doesn’t need to have this shape per se, but it should be asymmetrical in some way for best results. Webcam Setup Unity features webcam support. As the application runs and a camera is detected, Unity will show the video onscreen. This functionality may or may not be included in the AR package you choose. AR Package Setup

Figure 2. Marker Detection

Figure 2. Marker Detection

A cornerstone of this project is marker detection. As the marker graphic is detected via webcam, its position, rotation, and scale in the user’s physical space are calculated. This calculation will be used in the next steps. The AR package will search each still-frame of webcam footage for the predefined marker graphic (Pattern object). The detection scheme uses just the latest still-frame of video at any given time. Model Setup

Figure 2. 3D Model Setup

Figure 3. 3D Model Setup

The 3D model is loaded and inserted into the 3D scene, and the view into that scene. Luckily 3D is a strength in Unity and much of this work is all done for you. In the final project, this view is layered on top of the 2D webcam Video object shown earlier so the composite (See Figure 4.) of 2D and 3D will look believable. Repeated Loop: Detect-And-Update

Figure 4. Complete Process

Figure 4. Complete Process

Generally speaking your loopToDetectMarkerAndUpdate3D function will be called 60 times per second. Each frame the latest frame of the webcam footage is grabbed. The AR package runs detection on the frame. If the marker is detected the AR package will update the position, rotation, and scale data. This modifies the 3D model so it appears to be at the same position in the user’s physical space as the marker. The resulting effect is nothing short of amazing for first-time viewers.

Great Slideshow on Unity3D & AR



Want More Video Tutorials?

We are currently creating tons of new training content for Unity3D.

Unity 3D Best Practices

Category: Industry News, Quick Tips     |     Tags: C#, Debugging, Project Planning, Unity3D

Unity 3D & C#

Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development.

As always, RivelloMultimediaConsulting.com/unity/ will be the central location for deep articles and tutorials, Facebook.com/RivelloMultimediaConsulting (like us!) will engage the growing RMC+Unity community, and for the latest opinions and cool links follow me at Twitter.com/srivello.

There is incredible momentum in the Unity3D product and its community.I recently posted “The Best C# Code Naming Conventions” and wanted to expand the discussion on best practices in this post below.

NOTE: I’m still working on this post, but wanted to get feedback on just the parts below. Drop a comment below.

Best Practices

Folder Organization

I created a custom menu option to create default folders.

unity_create_default_menu_v1

I add these folders to a new project (or existing) when it is first created. I put 3rd party packages into the ‘Community Assets’. The ‘Standard Assets’ folder is of course where Unity puts its own packages. I then rename the ‘[Project Name]‘ folder to match my current project. Any suggestions?

unity_project_folders_v1

What Do YOU Think?

Have a comment? Please post below. This is a hot topic and I’ll respond promptly over the next month.

Unity3D & C# Training

There are MANY best practices included in my free, HD Video training series on “Unity3D & C#“. Check it out!

vimeo_screenflow_video_thumbnail_UWK_poster_v1

Unity3D Case Study: Rochard

Category: Industry News     |     Tags: Games, Review, Unity3D

Unity3D is a powerful suite of tools (Project IDE, Code IDE, run-time) for game development. Read my full articles of “Introduction to Unity3D” and “Tutorial Series: Unity3D & C#“.

As always, RivelloMultimediaConsulting.com/unity/ will be the central location for deep articles and tutorials, Facebook.com/RivelloMultimediaConsulting (like us!) will engage the growing RMC+Unity community, and for the latest opinions and cool links follow me at Twitter.com/srivello.

There is incredible momentum in the Unity3D product and its community. Here is a look at the successful game ‘Rochard’ which developers Recoil Games, Ltd created using Unity3D.

Rochard

From the IGN review of the game we learn that Rochard puts you in the role of John Rochard, an astro-miner who works for a megalithic company known as Skyrig. The game’s look works extremely well. Rochard is a comedic game at its core, and its character design, environments, enemies, sound effects and other sonic touches certainly lend to it moving in that direction.

Figure 1. Game Logo

Figure 1. Game Logo

 

QA With Developers

The site VideoGameWriters presented a terrific interview with Samuli Viikinen (Lead Level Designer), Juhana Virtanen (Lead Designer) and Sampsa Lehtonen (Programmer) detailing Rochard‘s use of Unity3D.

What was Unity’s appeal to your team?

The beauty of Unity is that the game can be published on any of the supported platforms with relative ease. Unity is also really fast and easy to use, making prototyping and implementing new features a breeze.

Often when any of our designers had new tech requirements, a programmer just sat next to the designer and implemented the new feature right there on spot together with the designer.

Figure 2. Gameplay

Figure 2. Gameplay

Did certain features change from the original design during development?

Yes, much. The gameplay itself was done iteratively. Unity did not impose any strict limitations to us, quite the contrary actually.

For instance, originally we didn’t have such a strong physics-based gameplay, but after seeing what Unity was capable of and learning what was possible with its physics engine we gradually implemented a more and more elaborate physics system for the game.

What are Unity’s advantages?

The strong point of Unity is the speed of the iteration cycle when developing the game. Some of the previous engines required us to shutdown the editor for compiling scripts, but in Unity the changes are immediately applied to the engine. This keeps the flow of development going instead of interrupting your work. Extending the editor was also really easy, and we ended up doing quite a lot of tools and small scripts to get rid of some of the laborious repetitive work.

Another feature is the use of so-called prefabs, which stands for “prefabricated game objects”. This allows you to build a palette of game objects that can be easily maintained and placed in the game world. This feature was found in the previous engines too, but they were far more clunky and error-prone.

Figure 3. Cut-Scene

Figure 3. Cut-Scene

What are Unity’s disadvantages?

Unity is not packed with rendering and animation features out-of-the-box. You can always go under the hood and implement things the way you want – that’s the whole purpose. For the games that we are making, it’s just perfect.

How has the Unity engine used by artists, programmers, level designers?

Unity is an all-around engine, and it caters to everybody in the team. Because it’s so expandable, you can improve the work flow for any discipline if such need should arise. For example, we ended up doing our custom prefab browser for the editor as our requirements for levels in our game were quite specific. We were originally using the industry standard Perforce for version control, but the built-in Asset Server in Unity had better integration to the engine so we ended up using that instead even though it was not as feature-complete as Perforce is.

Critics’ Review

IGN game the game very positive reviews. You can see gameplay footage on Youtube too.

Figure 1. Rochard's review from IGN

Figure 4. Rochard’s review from IGN

 

Your Thoughts On Unity?

Are you considering using Unity for your next commercial project? Comment thoughts below.

Already completed a game? Complete this poll and add a link to your project too.