Coder Social home page Coder Social logo

apress / devel-2d-games-unity Goto Github PK

View Code? Open in Web Editor NEW
209.0 209.0 53.0 276 KB

Source Code for 'Developing 2D Games with Unity: Independent Game Programming with C#' by Jared Halpern

Home Page: https://www.apress.com/us/book/9781484237717

License: Other

C# 100.00%

devel-2d-games-unity's Introduction

Apress Source Code

This repository accompanies Developing 2D Games with Unity: Independent Game Programming with C# by Jared Halpern (Apress, 2018).

Cover image

Download the files as a zip using the green button, or clone the repository to your machine using Git.

Releases

Release v1.0 corresponds to the code in the published book, without corrections or updates.

Contributions & Corrections

If you find any typos, errors in code, or otherwise incorrect information, please feel free to file an Issue in GitHub. See the file Contributing.md for more information on how you can further contribute to this repository.

General Notes

Credit: @RenatiusvanSander

As noted here, occasionally the Unity Editor will set the Z-coordinate on a newly created GameObject Transform to be negative. If this happens and the Z-coordinate is set to a negative number, you won't see it when the Scene plays. To fix this, change the Z-coordinate to be 0 on the GameObject Transform.

Errata

Chapter 3, Page 53

Credit: @omundy

After stopping the playing scene, add the animation for the player's idle state. From the Sprites folder, select the last two sprites from the Player32x32 sprite-sheet, titled: Player32x32_12 and Player32x32_13 and drag them onto the PlayerObject. When prompted by the Create New Animation save window, name the created animation-clip, "player-idle" and save to the Animations -> Animations folder.

Chapter 4

Credit: @josenerydev

Issue with format of file: OutdoorObjects.png. (fixed in GitHub repo)

Chapter 4, Page 93

In the Creating Tile Palettes section, the Tile Palette window in Unity 2018.3 is now located under Window -> 2D -> Tile Palette.

Chapter 4, Page 128

Credit: @omundy

Make sure to attach the RoundCameraPos script to the virtual camera object. Drag and drop the RoundCameraPos onto "CM vcam1".

Chapter 4, Page 137

Credit: @omundy

The interface has been updated in Unity 2018.3. The menu item "Edit Physics Shape" has been renamed to "Custom Physics Shape". After selecting Custom Physics Shape, click the "Generate" button on the right before editing.

Chapter 5, Page 147

Credit: @omundy

Create the GameObject in the hierarchy view (not project view).

Chapter 5, Page 161

Credit: @mprogers

In the Build the Consumable Script section, third paragraph, note that there is a distinction between the behavior of Scriptable Objects when running a project in the Editor, versus when running in a deployed (to device) build: Scriptable Objects cannot be used to save changes to data in a deployed build. More on this subject can be read here.

Chapter 5, Page 162

Credit: @omundy

In the Assembling Our Item section, third paragraph, rename the Scriptable Object, "Coin" (not "Item").

Chapter 5, Page 164

Credit: @omundy

In the Player Collisions section, the first line of code section // 3, should be:

print("Hit: " + hitObject.objectName);

Chapter 5, Page 166

Credit: @omundy

Steps 10 and 11 are duplicates of step 3 and can be disregarded.

Chapter 6, Page 198

Credit: @omundy

Under the heading Create the HealthBar Script, right-click in the MonoBehaviours folder and create a new C# script called HealthBar."

Chapter 6, Page 202-204

Credit: @omundy

Ensure a copy of the HealthBarObject is in the Hierarchy view and select it. Add the HealthBar script this HealthBarObject. When working with the HealthBar in these next 3 pages (202-204), work with the copy of HealthBarObject in the Hierarchy view, not the copy in the Prefab folder. Make sure to apply changes when you're done, so the changes propagate to the Prefab.

Note: The location of the button to apply changes to a prefab has changed in Unity 2018. The button is now located in the top right of the Inspector, in a drop-down menu called Overrides.

Chapter 6, Page 204

Credit: @omundy

The property, Character Category which appears in the source and in Figure 6-22 may be disregarded, or used later on in your game to broadly distinguish between what is/isn't an enemy, or the player (or even an NPC) instead of creating a tag for each character type.

Chapter 6, Page 207

Credit: @omundy

With InventoryObject selected, in the Canvas Scaler component, set Reference Pixels Per Unit to 32.

Chapter 7, Page 263

Credit: @omundy

In the The DamageCharacter() method section, the code should be added to the Enemy class.

Chapter 7, Page 269

Credit: @omundy

In the Refactoring Prefab Instantiation section, remove all four lines from Start() and add them to the new ResetCharacter() override.

After you add the ResetCharacter() method to the Player class, add the following method

private void OnEnable() {
	ResetCharacter();
}

Chapter 7, Page 275

Credit: @omundy

You'll notice when you run into the enemies they spin. Like you did with the PlayerObject, check Freeze Rotation for the Z axis inside the Rigidbody2D on the EnemyObject prefab.

Chapter 8, Page 287

Credit: @omundy

In the Enemy Walk Animation section, select the Enemy prefab then open the Animator window as seen in Figure 8-3.

Chapter 8, Page 357

Credit: @VADS

In the implementation of the GetQuadrant() method, disregard the first two variable declarations: Vector2 mousePosition = Input.mousePosition; and Vector2 playerPosition = transform.position; as they are not used.

Chapter 8, Page 360

Credit: @rdimitriev

In the method UpdateState(), the case for Quadrant.West: should be changed from: quadrantVector = new Vector2(-1.0f, 1.0f); to quadrantVector = new Vector2(-1.0f, 0.0f);

devel-2d-games-unity's People

Contributors

jaredhalpern avatar jessicavakili avatar omundy avatar rdimitriev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

devel-2d-games-unity's Issues

Issue with Enabling ItemImage and QtyText

I'm currently on Chapter 6 and I've run into a issue. I can't seem to figure out why this is happening, but when I run the game,
Capture
Capture1
Capture-1
Capture-2

the ItemImage and QtyText (even when interacting with multiple coins) is still disabled on all five slots. To ensure that this issue is not with the code of my inventory, player, character, or any other script that was altered this chapter or the last, I have copied and pasted the code from this website. I know for sure that the coin sprite is being added and the code is being activated because I used a print out test in the console. Additionally, I enabled both the ItemImage and QtyText manually by dragging the prefab onto the scene view and using the override button to change all instances. Doing that allowed me to visually see that the coin is being added and the text is being changed. So, after all of this I am truly stumped as to what could be causing the issue. I have included screenshots of what the ItemImage/QtyText looks like with it enabled and disabled. Any attempts at helping me would be much appreciated. I am going to save my progress desperately and continue on with the book, so I can come back to this issue if/when anyone figures out what I am doing incorrectly.

Chapter 6 - Cannot Drag Inventory Object Prefab Into Player Inventory Properties

The final step to creating the inventory system for the player was to "Select the Player prefab and drag the newly created InventroyObject prefab into the Inventory Prefab property of the Player script". I have the Inventory Prefab property for the Player script available, but when I try to drag the InventoryObject prefab into it I get a black cancel icon (meaning this is not a viable option). Perhaps I am doing something incorrect, but I have since triple checked all of my scripting. Perhaps, this is a version issue as I am using version 2020.1. Honestly, this is the first issue that I have run into while going through this book.

Chapter 4 - Page 95 - reference to "Outdoor Tiles" folder

On page 95 of the book, the third paragraph says:

When prompted to "Generate Tiles into folder", navigate to the Sprites -> Tiles -> Outdoor Tiles folder we created earlier[...]

But when viewing the image in Figure 4-1. on page 94 with the folder view, we can see this is most likely the Sprites -> Tiles -> Outdoors folder instead.

Chapter 7 causing same issue for me as zantannafrost

running virtual camera with the Spawn player seems to be causing the screen to render the UI elements and the background that is set in the virtual camera brain, if i add the player object back into the scene from prefabs and ask the Vcam to follow this it appears to work fine shows the playerobject from prefabs and also the spawn player. how to do i resolve this so that it shows all layers when just running with the spawn player.

Improper or unclear directions for the OutdoorsObjects tilemap

Location 1275-1277 of Kindle edition (not sure how to find the book page)

Text from book: "Select one of the rocks from the Outdoor Objects Tile Palette by clicking and dragging a rectangle around all four tiles. Use the paintbrush to place a single rock on your Tilemap."

Issue: The rocks in the OutdoorsObjects.png file, when converted to sprites via the indicated process, only take up a single tile in the tile palette. (This is true for every sprite in said palette).

Date found: 7/27/2019
Local repository up to date as of this posting.

Chapter 4 - Page 130-132 - References to a Layers_Objects / Layer_Objects Tilemap?

On Page 130, under the section Tilemap Collider 2D, paragraph 3, it says:

You'll notice that all the sprites on your Layers_Objects now have a thin green line surrounding them[...]

From what I can tell at this point we don't have a Layers_Objects Tilemap -- we do have Layer_Ground and Layer_Trees_and_Rocks Tilemaps however.

This is also referenced in a slightly different way on Page 132, paragraph 2, when it says:

[...] We've just added a Collider 2D to every tile sprite on Layer_Objects [...]

This time, it's referenced as Layer_Objects vs Layers_Objects.

For both cases, I assume this is just still the Layer_Trees_and_Rocks Tilemap, but it tripped me up a bit.

Chapter 6 AddItem Method Why are we only filling first slot? Why don't we use the other 4 slots?

The first time the AddItem method is called after colliding with a Coin, all of the items[i] elements are null so it jumps to the 2nd if block, and fills items[0]. Then after that, it just keeps falling into the first if block because items[0] != null. What is the purpose of the other 4 slots? Note this code below was copied and pasted from Github, with the insides of the if blocks removed, so I didn't add any extra return statements.

public bool AddItem(Item itemToAdd)
{
    for (int i = 0; i < items.Length; i++)
    {
        if (items[i] != null && items[i].itemType == itemToAdd.itemType && itemToAdd.stackable == true)
        {
            //this runs the second, and every other time the method is called because the 0th element in the items array
           // is not null. 
          //it exits with a return true statement

        }

        if (items[i] == null)
        {
           //this runs the first time this method is called, and never runs again.
           //it exits with a return true statement
        }
    }
    return false;
}

Persistant Scriptable Objects

In chapter 5, it says "As mentioned earlier, if we change any data in this Scriptable Object reference, we would change the data in the Scriptable Object asset itself, and those changes would remain when we stopped running our game". However, the Unity docs [seem to imply otherwise.](https://docs.unity3d.com/Manual/class-ScriptableObject.html. In particular, the line "In a deployed build, however, you can’t use ScriptableObjects to save data" seems relevant.

Player Script (Chap 6)

On Page 194, it was mentioned that the properties have to be added above the Start ( ) method. But the current player script does not contain any start method even the instantiate method.

HeartGameObject not visible (with solution)

I share this solution with others. Newer Unity versions place the Haeart item of chapter five above or below the tiles. The camera cannot catch that. change z position to zero and everything is fine.

Animation issues

When I move my player it faces in that direction but animation doesn’t play

[Typo] finalPos vs pos

pp. 126-128: Comment 6 (//6) has Vector3 pos = state.FinalPosition;
Later, on p. 128, it is referred to as finalPos throughout the remainder of the instructions.

Game Win Streaks 2D Unity Code

How do I create a code that causes win streaks to lead to a power up.For example,if player 1 scores 3 goals,Player 1 gets a power up?

Chapter 8 tip: Enemies stuck on Walking Animation (Wander script)

Hello there. Loving the book!

This is similar to #14 .
Since it took me about an hour and led me to debug, read Coroutine docs, triple check code, double check math..I'll just leave this here.
Make sure the Enemy Spawn Point (or any objects, really) has a Transform Z-axis 0.

On my end, the Enemy Animator isWalking bool was always True, and was never set to False. This was due to the enemy spawn point being in Z -1, which would never allow the Move method to work correctly, leaving Wandering enemies stuck on the Walking animation.
I had the same issue with the coin, as per #14

Thanks folks!

E: Here's a gif showing my newly-created GameObjects start with a Z-axis value of over -2. It caused me a bunch of weird issues, not sure why it does that by default! (sorry for the horrid quality, forgot Github doesn't like Mp4)
ezgif com-video-to-gif

Chapter 5 - Player Script - Page 164

After adding the following code:

Item hitObject = collision.gameObject.GetComponent().item;

when I run the game, the character collides with an Coin object and it disappears as it is supposed to. However, before moving the character, the Console prints the following message:

NullReferenceException: Object reference not set to an instance of an object
Player.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/Scripts/MonoBehaviours/Player.cs:12)

I checked several times to see if I missed a previous step, but I don't think I have. I am not sure if this issue will cause problems later in the book; I wanted to resolve before I moved on.

Can't touch and consume the Heart Prefab

I'm in chapter 6.
I already finish the UI and I created a HealthBar UI
And I change the player.cs
The way you did.
switch(hitObject.itemType)
{
case Item.ItemType.COIN:
shoulddisappear = true;
break;

case Item.ItemType.HEALTH:
shoulddisappear = AdjustmentHitPoints(hitObject.quantity);
}

And so on.
I really don't know what to do i stack to this chapter for almost 3 weeks.

Chapter 7 - Camera Manager - Pg 251 - This section breaks camera - Causes white background

After following instructions on pages 251 - 255, the camera/virtual camera no longer works properly. It will not render the background images - water, land, consumables - coins, heart, etc. It will only render the spawned player character and the spawned enemy character, as well as the UI - all over a white background. It does follow the player character as it walks around on a completely white background.

Chapter3 which pictures are used for player-idle?

Would you please add the sprites for player-idle animation. I bought your book, but more and more are missing some sentences for the player animations. I cannot create player-idle for state machine figure 3-33 on page 76, because this animation is never explained and which pictures are to use to create animation player-idle. Would you please add the sprites for player-idle animation.

Issue in Page 274

StopCoroutine(damageCoroutine);
should be call in the same object that was started.

player.StopCoroutine(damageCoroutine), if not the coroutine wont stop.

Player & Enemy Respawn

It's not clear if the game is supposed to but after finishing Chapter 7, I played the game, let the enemy kill me, and I didn't respawn. The enemy actually continually respawned instead. I even tried switching out my scripts for the ones in the downloaded assests and the same thing happened. Anyone else have this issue? Is the game actually designed to be a one and done? Any assistance on this would be most appreciated. This issue aside, really great book and a lot of fun to put together so far!

Ch5 Coin Sprite

Hi, I'm having trouble getting the coin sprite to be visible in the scene view. I've put the sorting layer to objects just like the book instructed, but for some reason the sprite still won't render, any help/ideas?

Still In Tutorial Hell

This book teach me how to make games.
but the only problem I have is that..
I code or develope a game like a beginner.
Obviously I'm beginner..
I developing my own games and when I'm writing codes or develope game codes. I'm always following your code step by step
Instead of writing all the code.
For example i write the code and finish the movementcontroller.
instead of writing the code step by step.

SORRY FOR BAD ENGLISH

Chapter 6 - Multiple corrections (Pages 208, 215, and 221)

  1. On page 208, in Figure 6-26., the scale is marked as 0.625 for the X, Y, and Z coordinates but is never mentioned as an attribute to change. Their default values are 1.

  2. On page ~215, when creating the Prefab for InventoryObject, we never create or change any configuration settings for this prefab -- such as setting the Rect Transform to the upper left, and positioning it in the top left corner so the inventory will resemble the picture on page 241, Figure 6-43. The result of not configuring this object is that when we finally do view our inventory / slots at the end of Chapter 6, the inventory is placed right in the middle.

  3. On page 221, under the explanation for // 4, it says:

This script will be attached to InventoryObject. The InventoryObject prefab has a single child object: Inventory.

Set the Parent of the instantiated Slot to the child object at index 0 of InventoryObject. The child object at index 0 is: Inventory, as seen in figure 6-40.

In the image of Figure 6-40. on the same page below, it also shows an Inventory child under InventoryObject.

For all of these mentions of Inventory, I believe is incorrect -- the child object of InventoryObject is InventoryBackground, as shown on Figure 6-36. on page 215.

No player-idle clip instructions

On page 76 the book says to make a transition to the player-idle state. But there are no instructions to make this clip so it doesn't exist for to make the transition.

Chapter 8 - Multiple formatting issues & other corrections (Pages 282, 306, 318, 319, 324, 328, 346,

1. Page 282 (minor, formatting)

The variable moveCoroutine is where we'll save a reference [...]

I believe we want the code formatting for moveCoroutine, e.g.:

The variable moveCoroutine is where we'll save a reference [...]

2. Page 306 (minor, formatting)

if (collision is BoxCollider2D)
    {
    ....

The first left bracket is formatted indented, when it should be inline with the if statement.

3. Page 318 (bug?)

Initially, at the stage where we write the while loop:

while (percentageComplete < 1.0f)
{ 
    percentComplete += Time.deltaTime / duration;
   
    transform.position = Vector3.Lerp(startPosition, destination, percentComplete);
    ...
}

I kept running into an error where transform could not be used in the context provided. At the end of chapter everything seemed to work correctly, but at this stage of the app it wouldn't for some reason.

4. Page 319 (minor, formatting)

Take a look at this line again: percentComplete += Time.deltaTime / duration;

It looks like the whole line got turned into code, rather than just the latter half of the sentence:

Take a look at this line again: percentComplete += Time.deltaTime / duration;

5. Page 324 (multiple)

5.1 - Weapon Velocity set to 2 in the figure, but mentioned as 0.5

In Figure 8-15., and at the end of Page 323, we're told to set Weapon Velocity to 2. But in the very first sentence of page 324 it says:

We've chosen to use 0.5 for the Weapon Velocity because it feels like a natural amount of time [...]

I think this instead should be 2, not 0.5.

5.1 Multiple references to leaving lines alone

Under the section Arcing, it mentions and has the following lines twice:

// Leave this existing line alone.
percentComplete += Time.deltaTime / duration;

And then later on page 325:

        // Leave these existing lines alone.
percentComplete += Time.deltaTime / duration;
yield return null

6. Page 328 (mistake / correction)

Under the section Clean Up the Animator, it makes multiple references to "Idle State", including in Figure 8-18.. But the "Idle State" I believe is actually called "player-idle" -- we have never renamed it, as we can see from the previous Figure 8-17.

7. Page 346 (missing step)

Under number 14., it mentions two differences between the transitions:

  • When you create the isFiring condition, set it to: false.
  • Check the Exit Time property and set the value for Exit Time to: 1

The correct property to check would actually be Has Exit Time, so I think it would be better as three steps:

  • Has Exit Time should be set to: checked
  • Exit Time should be set to: 1
  • isFiring should be set to: false.

Chapter 7 - Minor corrections / confusion / formatting issues (Pages 251, 257, 272)

  1. On page 251, we're told to create a RPGCameraManager script, but most times we're also told where to put it. For the case of this Script, it probably makes sense to put this in Assets -> Scripts -> Managers.
  2. On page 257, under The Enemy Class, the last line in the section says:

[...] using a regular float variable to track hit-points instead.
The code formatting either shouldn't be present, or should end possibly after float variable.

  1. On page 272, under OnCollisionEnter2D, it later makes sense that we want both this method and OnCollisionExit2D to be part of our Enemy Class, but since the section starts off with explaining what the method is, it sounded like it was at first just mentioning what it was, but then immediately gave us a method. Comment // 2 seems to help clarify this is in Enemy, but it still caught me a bit off guard.

(Ch 7) Player and Enemy Spawnpoint not working

I have double-checked my code and compared it to the source code in this repository, but the spawnpoints for the player and enemies are not actually spawning any (visible) characters. While running the game in Game view, I can see in the hierarchy window that a player gameObject and multiple enemy gameObject clones are being created, but none of their sprite images show up in the game itself. I think the problem might lie in either sprite rendering/rendering order or having drag-and-dropped an object instance to a reference variable in the inspector instead of a prefab (or vice versa), but I'm not sure.

I can't see the coin on chapter 5.

Hi there, Hi Jared,
Great book so far, well explained !
But despite my efforts, i'm stuck at Chapter 5, where you show us how to create a coin object.

I can see it on the scene like this, but nothing appears when playing

What i have done so far :

  1. checked that sorting layers are correctly ordered. (Default/Ground/Objects/Characters) (here)

  2. Sprite renderer:

  • Sprite has been set to a coin image.
  • Sorting Layer is Objects
  • I imagine it is not relevant on this case, but Circle Collider 2D "Is Trigger" has been set.
  1. I tried to change layer to be ground but unsuccessfully.

I'm sure i've done something wrong.
May you please give me some hints on how to make that coin appear ?

Regards,
Pierre

GetQuadrant vars

On page 357, where you describe the implementation of the GetQuadrant() method, you seem to neither use the Vector2 var mousePosition not the playerPosition, if I see that correctly.

Really nice book though, I'm almost through! :)

Null Reference Exception thrown but is set to an instance of an object

I accidentally deleted RPGGameManager Prefab and I recreated it. Now I'm getting a null reference Exception but I check the code and it is set to an instance of the object. I check virtual camera when game is running and virtual camera isn't following the player even when the tag is set to "VirtualCamera". I checked all the prefabs in inspector and everything is correctly attached. RPGGameManager has PlayerSpawnPoint and RPGCameraManager, PlayerSpawnPoint has PlayerObject attached, RPGCameraManager has the script attached to it.

Chapter 5 -Heart Power Up unviewable

I completed Chapter 5 recently and the HeartObject is viewable on scene with its sprite but when I go into game view it is not visible. When I collide with the spot it should be in I get the console message that I picked it up and my heath went up 1. Would appreciate it if someone could assist on this issue.

Error Can't Enter Play mode

I can't enter the play mode im in chapter 3
Please help me.
And I see from console I have some errors even though I never touch it

Chapter 4 Water_Layer

I don't know why my character still move
To water..
Even though I create a new tilemap called
Water_layer add some tilemap collider2d and the composite
I already check the "use composite", and make the rigidbody static that your book say.
And it's never work

[Grammar/Punctuation] - "follow" vs "follows" (Ch. 4)

Top of p. 106, first paragraph, "... and we'll use a tool called Cinemachine to make the Camera follows the Player as he walks."

Suggest change to "... make the Camera follow the Player as he walks."
or
"make sure the Camera follows the Player as he walks.

Chapter 4 - Page 104 - Repeated directions to create "Characters" sorting layer from Chapter 3

On page 104, paragraph 2, it says:

[...] Add a Sorting Layer called "Characters" and move it to the bottom, after the Ground and Object layers [...]

This was already done in Chapter 3, on page 61, and shown in Figure 3-27.

Later, on page 105, paragraph 1, it also says:

[...] Select the PlayerObject and set its Sorting Layer to the Characters layer we just created.[...]

Again, this was also done on page 61 as well.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.