“As I mentioned in another thread recently, the last time I went job searching, I posted my resume everywhere I could and got awful signal to noise ratio everywhere; the only one that was reasonable at all was Angel List, and I think that’s because I looked through postings and initiated contact myself. My conclusion is that you need to put in the work yourself to find jobs that fit you, because recruiters will not.
Also, I was getting half a dozen new conversations every day and it was draining. More leads is not better.
Don’t post a phone number in the first place – there’s no reason to. When recruiters send you a “I saw your resume when can I call you” email, reply with a template response telling them that you won’t take phone calls until you’ve seen a job description, and you’ll get job descriptions and be able to filter out the 90% that aren’t worth even talking about.”
“Dice is where I’ve seen some of my better leads come from. It’s dedicated to technical jobs. But honestly, I’d recommend putting up your resume on all of the job sites you can, more exposure is never a bad thing in my opinion. You’ll get a lot of calls/emails from low quality recruiters trying to get you to put in your resume for every position they have. Just ignore them if you can tell they didn’t even take the time to look at your resume/profile.
I downloaded Blender over a decade ago (before Youtube), tinkered with it, and let it rot because I couldn’t figure it out. To be fair I gave it no real investment of my time or energy but I was really happy it was so powerful and I was excited to get to know it when the time was right. A few years ago I read about Blender and how much it had matured. The impression I got was that although it works a bit unconventionally it had a fantastic user interface which some people swear by. A few months ago I downloaded it again when it was time for me to start making games and I read a book about it but it wasn’t until tonight I finally legitimately dug into it and figured out some of the things I can do with it.
In this article I’ll lay out what I know about the Blender 3D modeling tool and will keep track of the best resources that I find for the swiss-army-knife of 3D tools, the mighty Blender.
What I learned today
I learned a bunch of keyboard and mouse shortcuts:
Select, Deselect, Create, Extrude, Select Objects, Vertices, Edges, Faces.
I learned to turn on “Screencast Keys”
I learned to create cool pipes using bezier curves and related Bevel Objects.
I also learned how to navigate Blender from my MacBook Pro Trackpad.
Here I’ll list some specifics that I didn’t mention in the videos above:
Select a segment of faces easily.
select a face, then alt select a nearby edge to select the segment in that direction.
On this page I’ll keep resources related to the topic above. I have always had a special place in my heart for games that ran directly on “bare metal” hardware like consoles or the Commodore 64 because from some perspectives things were so simple and straightforward and there weren’t enormous layers of operating environment to bog your code down. Of course from other perspectives programming was vastly more complicated back then due to the limitations and quirks of computing and gaming hardware and this page will list some resources about low level things of that nature. I also have a soft spot for classic computing and gaming so there will likely be plenty of that going on here.
Low Level Computing
This video is about an hour long and explains in detail how your operating system works; for example it explains what happens when your computer boots up and ultimately shows you how to create an extremely bare bones operating system of your own that runs a tiny amount of software that you wrote!
@35:00 it shows that you have to do some byte skipping to put characters on the screen
Notes To Self: Other reasons: Wolfenstein 3D had to do some black magic with the VGA screen buffer turning the bitmaps sideways to get texture mapping to be fast enough.
in the NES video I watched earlier today about programming NES with 6502 assembly it talked about how you had to fill up a background buffer with loops bigger than the processor could handle.
On this emulator site you can emulate a bunch of old and new operating systems some with assemblers already installed.
I ran windows version 1 (interesting how much it has progressed) and freebsd.
This video (called How we fit an NES game into 40kb (~12Min)) has high production values and explains many of the optimizations they used to get their (relatively advanced) NES game to fit in the original NES rom size of 40kb which as you probably know is absolutely freaking tiny by todays standards. It notably does a fantastic job visualizing how their sprites were optimized to fit in the small amount of graphics memory available (8kb) which allowed them to add more actual content to the game.
Get started by building and running code that does something in assembly in just 20 minutes total. The most straightforward way to start dabbling in assembly programming is probably to watch this 10 minute video and then run the software he gives you to build and run an assembly program for the Sega Genesis. I watched the video and less than 10 minutes later I had built and run my first assembly program!
How does an ‘if’ statement work at a hardware level
I spent some time preparing an answer to a stack overflow question and although I’m not even sure I answered the question they were asking there is a lot of good information in my answer:
The answer to this has to involve an explanation of what software the hardware is executing.
Background: Each processor has a set of built in codes that tell it what to do (its “machine language” or assembly language) and on modern computers one of those is always a “branch” statement of some sort and I think this wikipedia article) will help answer your question.
More Information: A simple example of this is ‘jeq’ in x86 assembler which stands for ‘jump if equal’ which works like:
JEQ R1,R2,addr // IF R1 == R2 THEN PC addr ELSE PC++
which compares R1 and R2 and if they are equal then the program counter jumps to a location in memory (addr) and starts reading commands from that new location (which would be everything inside the if statements curly brackets). Slide 13 of this presentation has more on this.
A possible explanation of this code:
if (4 < 5)
one instruction would load 4 into register a a second instruction would load 5 into register b a third instruction would compare them and the result would be stored in a ‘condition code’ and a fourth instruction would look at the condition code and either jump the program counter to a new location, or continue executing the next instruction
This page is an easy read and does a good job explaining logic gates and multiplexers which are the building blocks needed to make the circuit you are describing
As I work my way through this tutorial I’ll post my findings here.
This tutorial shows how to test a game on iOS for free. It talks about how if you want to publish to the App Store and do other similar things you may have to pay for a developer license.
Xcode has changed in small ways since this was written. In the section called Building the sample project to your device using Xcode it says that in the top left you can open the project settings by clicking “Unity-iPhone” which didn’t work for me. Instead I found project settings in the menu but I don’t think it is right because there is no “general” tab nor any “identity section”. As a result I didn’t do any of this, but did “generate a new certificate” which was a simple two step process back in the same place where you added your Apple ID (Xcode->Preferences->Accounts)
When I plugged in my iPhone via usb (which I had never done before but only because its a new phone) it opened iTunes and made me verify that I wanted this trusted communication to take place then in Xcode it took a few minutes to “prepare it for debugging”.
Ok when I clicked build it failed and said that I needed to “select a development team in the project editor”. I did some googling and things have really changed so it wasn’t easy to figure out what to do instead: 1. I found a “Build Settings” in the main editor window that had identity in it which let me select my identity at least. After that it still required me to select the project on the left, then change the ‘target’ in the drop down just a bove the main editor window. From there I could get to most of the settings it spoke of earlier. I set the development team accordingly but then I had to go to the info tab and change the bundle id to something more unique than I had put in (per the tutorial I put com.unity3d.mobiledemo but thats not unique).
After that it still didnt launch so I had to go into my device in the general->device management settings and trust things from this developer. But after that it totally worked!
Getting my Game to Build and play on my iPhone
This is an entirely different prospect. I’m going to try doing the exact same things that I did with the other project but I know that my project has differences in its setup so I’m prepared to have to tweak things.
Update: Actually the build worked on the first try! My game is running on my iPhone now!!! YAY!
To get Touch Controls working I may choose to download an asset from the asset store but first I want to see what I’m getting into.
This is free and should do the trick so I’m going to try it out.
Final Virtual Joystick Decision:
I ended up using the CN Controls from the Asset store. It was really really easy. I just dragged it into my canveas and changed Input.GetAxis to CnInputManager.GetAxis in my code then built and deployed to my iPhone and it TOTALLY WORKED!! I’m glad I watched those videos because I now know that I could reproduce this on my own if I had to and I understand most of what these controllers are doing.
Problem with Shadows
I found a problem with shadows that only manifested on level 10.
One solution I saw at the unity answers suggested increasing the scale of my game, but I don’t think thats wise because of this:
I did NOT end up finding any good solutions online and I believe there is somewhat of a bug but people are pretty religious about this topic for some reason and seem to either think that it “shouldn’t be a problem” because “why do you need more than that distance of shadows anyway!?!” which I think is pretty lame. Regardless after hours of trial and error (including going back in time in git and copying the entire project and wiping things out behind the senes and re-generating them) I did find somewhat of a workaround. First I switched build settings from iOS back to Mac/PC and then back to iOS which seemed to clear some shit out and at least made the shadows consistent from one scene to another. Then I changed the shadow distance to 40 (Edit->ProjectSettings->Quality). 60 might have worked, 100 was pretty bad (My wife said it was Atari 2600 level!). This does not look nearly as crisp as it looks when the shadow distance is 10 or when you are using the Mac/pc build setting but the lower you go the more disadvantages you get and this was the lowest I could go without seeing any dramatic disadvantages of shadows disappearing and popping up unnaturally toward the back of the screen (it still happens its just not too terribly unnatural).
Half of the times you build (after you’ve plugged your phone in again or done a clean build or for whatever reason) you have to go manually change the Team ID in Xcode but Unity does have a workaround. In Unity->Preferences->External Tools there is an option to automatically sign your app but you have to put in a Team ID. I had created one in Xcode (documented somewhat above) but putting that email or my name from there didnt work. I had to dig deep to find the team. Almost everyone online pointed me to something that doesn’t exist and said that at developer.apple.com you can find your team id, but since I have the free account atm thats not available from there (There is no Account.Membership section of my account on that site). I was able to find the right Team ID using a real tricky bash script:
This is a simple guide to an asset in the Unity3D Asset Store called “Procedural Examples”. It states that it requires Unity 3.5.6 or higher which was written about five years ago so this asset is old and has experienced substantial rot and when you import it it doesn’t run. This guide will help you get it running in 2017.1 and help you experience most (if not all of what it has to offer).
Most of it actually works (after you do this one thing).
I wrestled with this asset for a few minutes and got nowhere so feeling dismayed I put it away and came back to it a few days later and when I looked at it with a fresh set of eyes and a new determination I decided to start removing things that didn’t work to see if any of it would work at all.
First I found several significant errors in the Lightning script so I tried to update them, but I didn’t get very far before I got discouraged and had to admit I don’t know enough about the old particle systems vs the new to be able to port this script. At that point I gave up and just deleted that script and gave up on that particular example but if anyone knows an easy way to get it working again let me know.
Once I did that all of the rest of the examples worked quite well!
How to use the procedural examples
When you import the asset into a new project you get this: (note: ignore the Textures folder – I added that later).
In the top level directory is the set of examples and all of them except for Lightning bolt work just fine. Just double click on them and go for it.
Some really cool results and effects
Most of them are either self-explanatory or come with simple in-game instructions in the top right. My favorites are below (Extrusion was actually really cool)
There are still some bugs here for example in the extrusion example if you make the ‘time’ too long then that shape just disappears saying that the triangles are out of bounds. As a result these aren’t going to be good platforms for production code but using their techniques and building upon them is certainly a workable implementation.
Conclusion about the Unity5 Procedural Examples
This is a good set of examples for how to manipulate meshes procedurally and I’m glad that its out there. It could clearly use a refresh and one of the examples doesn’t work at all but otherwise its informative and pretty easy to get working and could be of value to a lot of us developers. Thanks Unity Technologies!
In Unity5 there are often many different ways to accomplish your goals. Additionally there are many different things you can do but it isn’t always obvious that they are possible or how to do them. This page shows you implementations of things that can be done in Unity3D v5 which is why I subtitled this article: How to do shit.
Inversion Of Control
If you want to do Inversion of Control or Dependency Injection in Unity this is how
I was looking into available “tweening systems” this evening and found more than I bargained for:
iTween is the most popular but everyone complains about it having garbage collection problems.
DoTween and LeanTween are the runners up in the popularity contest but they don’t have any GC issues and are probably better choices overall
DoTween is documented better and some say is laid out better and is perhaps a more “complete”package but it requires that you get comfortable with lambda expressions
LeanTween has less documentation and examples but many people say it is straightforward, and incredibly fast
They are both free and open source
Theres this package called “Movement Over Time” which apparently does things different than a tweening system and is “more like a whole new way of thinking of and doing movement in your game” (from one of the reviews on the asset store). the same reviewer also said “I am amazed by all the new things I can do in only a couple of lines of code in this framework that seemed impossible before.”
Then I learned about Animation Curves which are built in and can apparently be used in the context of lerping to make that process entirely easy: transform.position = Vector3.Lerp(fromPosition, toPosition, animationCurve.Evaluate(t));
I could totally type these in for you but I choose not to because I don’t want to and because there is inherent brain/learning value in typing them in yourself and I believe you will get more value out of this page if you type them yourself. I type them in again every time I use them. Start typing or find the answers somewhere else.
How to do something periodically
The easiest way to do this is with “InvokeRepeating”. The second easiest way is with a coroutine. But if you want to do it with code in the update method:
How to Drag an object with the mouse
How to quit your application
How to affect a bunch of GameObjects at once
How to do Collision Detection
How to add a menu item to Unity
Cycling through an array the easy way
This is how to set an object to a different texture every time you press the space bar.
The official documentation is here but I can’t recommend that because I found this answer on StackExchange which very nicely sums up what to do, but I haven’t tried it yet because I got distracted by this cool site:
I was looking for a good .gitignore file for Unity3D projects and I found that a semi-official one is maintained here but I also noticed that there is a cool website that has .gitignores for tons of different types of things: https://www.gitignore.io/
In 2017 I used exclusively the command line git client but recently I’ve been using Git Kraken as a client and it has been working for me very well. I think the biggest advantage I can think of right now is having the tree of branches visible at all times.
Fork then do a Pull Request
Here are the best instructions for when you are working with someone else git repository: