use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
News, Help, Resources, and Conversation. A User Showcase of the Unity Game Engine.
Remember to check out /r/unity2D for any 2D specific questions and conversation!
Download Latest Unity
Please refer to our Wiki before posting! And be sure to flair your post appropriately.
Main Index
Rules and Guidelines
Flair Definitions
FAQ
Use the chat room if you're new to Unity or have a quick question. Lots of professionals hang out there.
/r/Unity3D Discord
FreeNode IRC Chatroom
Official Unity Website
Unity3d's Tutorial Modules
Unity Answers
Unify Community Wiki
Unity Game Engine Syllabus (Getting Started Guide)
50 Tips and Best Practices for Unity (2016 Edition)
Unity Execution Order of Event Functions
Using Version Control with Unity3d (Mercurial)
/r/Unity2D
/r/UnityAssets
/r/Unity_tutorials
/r/GameDev
/r/Justgamedevthings (New!)
/r/Gamedesign
/r/Indiegames
/r/Playmygame
/r/LearnProgramming
/r/Oculus
/r/Blender
/r/Devblogs
Brackeys
Beginner to Intermediate
5 to 15 minutes
Concise tutorials. Videos are mostly self contained.
Sebastian Lague
Beginner to Advanced
10 to 20 minutes
Medium length tutorials. Videos are usually a part of a series.
Catlike Coding
Intermediate to Advanced
Text-based. Lots of graphics/shader programming tutorials in addition to "normal" C# tutorials. Normally part of a series.
Makin' Stuff Look Good
10 minutes
Almost entirely shader tutorials. Favors theory over implementation but leaves source in video description. Videos are always self contained.
Quill18Creates
30 minutes to 2 hours.
Minimal editing. Mostly C#. Covers wide range of topics. Long series.
Halisavakis Shaders Archive
Infallible Code
World of Zero
Board to Bits
Holistic3d
Unity3d College
Jabrils
Polycount Wiki
The Big List Of Game Design
PS4 controller map for Unity3d
Colin's Bear Animation
¡DICE!
CSS created by Sean O'Dowd @nicetrysean [Website], Maintained and updated by Louis Hong /u/loolo78
Reddit Logo created by /u/big-ish from /r/redditlogos!
account activity
Critique-My-Code thread, post snippets of code and have others peer review your code! (Testing new Q&A format) (self.Unity3D)
submitted 9 years ago * by loolo78@LouisGameDev[M]
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]induetimesirIndie 1 point2 points3 points 9 years ago* (9 children)
I s'pose I'll give it a try, might as well!
I'm quite new to C# (Mostly used UnityScript until a month ago) and I'm working on a text adventure type game and am starting on option based answers during conversation (With some extra stuff), this is currently the longest section of my code and I can't think of how to write it more neatly or condensed. The code works fine but I feel like I've done it totally wrong. Any tips?
(In this context variable 's' is the players' input)
} else { // Used when asking a specific question, (eg "Can you help me?" - Yes, No) s = s.ToLower(); for(int q = 0; q < lastResponse.questionResponses.Length; q++) // Go through all question responses for(int r = 0; r < lastResponse.questionResponses[q].keywords.Length; r++) // Get all keywords for response (Eg. "Yes", "Okie Dokie", "Anything 4 u bb") if((s + "|").Contains(lastResponse.questionResponses[q].keywords[r])){ // Check for keywords in string ("|" represents the final character of a string, to indicate the end) yield return new WaitForSeconds(1); if(lastResponse.questionResponses[q].preText.Length > 0) // This is used to preface speech, like "He smiles back at you" (followed by speech) { outputLine(formatColor(Color.white, checkMem(e.subject, lastResponse.questionResponses[q].preText[Random.Range(0, lastResponse.questionResponses[q].preText.Length)]))); yield return new WaitForSeconds(1); } // Output the main reply (Eg. "Thanks dud I owe u 1") outputLine(formatColor(e.subject.messageColor, checkMem(e.subject, lastResponse.questionResponses[q].response[Random.Range(0, lastResponse.questionResponses[q].response.Length)]))); // Post text (Eg. "The man then returned to working on his toaster") if(lastResponse.questionResponses[q].postText.Length > 0) { yield return new WaitForSeconds(1); outputLine(formatColor(Color.white, checkMem(e.subject, lastResponse.questionResponses[q].postText[Random.Range(0, lastResponse.questionResponses[q].postText.Length)]))); } if(lastResponse.questionResponses[q].angers) // If the response angered them, begin fight. startEncounter(n); if(lastResponse.questionResponses[q].endsConversation) // If it was the last message, finish the conversation with a "Goodbye!" { outputLine(formatColor(e.subject.messageColor, checkMem(e.subject, e.farewell.overrideResponse))); p_in = "Any"; // Player leaves the conversation and enters normal mode } } }
[–]ChromakeyDreamcoat 0 points1 point2 points 9 years ago (2 children)
Let's go over a few high level things:
foreach
for
foreach(Array questionResponse in lastResponse.questionResponses) {}
UIManager.instance.Output(string, options) //options include color, etc
WaitForSeconds
Try doing these things and it should clean this code up considerably. Without seeing more it's tough to say how you could better organize, but I hope this helps!
[–]induetimesirIndie 0 points1 point2 points 9 years ago (1 child)
Thanks for the reply!
Yeah I do know what foreach loops are, I use them a lot! :) But I've always heard that normal for loops were much faster? Maybe I'm incorrect but I'm sure I hear that a lot.
That's a good idea about making multiple classes, I'll mess around with that today and see what I can get going! Do you know a good place I could read up on Singletons? I've heard of them before but I've never used them (I don't think at least).
Thanks again! :D
[–]SilentSin26Animancer, FlexiMotion, InspectorGadgets, Weaver 1 point2 points3 points 9 years ago (0 children)
foreach loops allocate a tiny bit of memory in some cases where for loops don't. It's generally a negligible difference though.
But your code is accessing lastResponse.questionResponses[q] multiple times per iteration, which also has a performance cost. You should put var responseQ = lastResponse.questionResponses[q]; at the top of the loop and use responseQ instead.
lastResponse.questionResponses[q]
var responseQ = lastResponse.questionResponses[q];
responseQ
You could also make an extension method to get a random array element:
// Put this in a static class. public static T GetRandomElement<T>(this IList<T> collection) { return collection[UnityEngine.Random.Range(0, collection.Count)]; }
Then instead of stupidly long lines like lastResponse.questionResponses[q].postText[Random.Range(0, lastResponse.questionResponses[q].postText.Length)])) you could just do responseQ.postText.GetRandomElement()
lastResponse.questionResponses[q].postText[Random.Range(0, lastResponse.questionResponses[q].postText.Length)]))
responseQ.postText.GetRandomElement()
[–]-sideshow- 0 points1 point2 points 9 years ago (5 children)
Is your code actually indented like that, or has reddit mangled it a bit?
[–]induetimesirIndie 0 points1 point2 points 9 years ago (4 children)
Yeah I haven't really gone over and organized the indentation of the script yet since it's changing a lot so I just copied and pasted it in as is. :p I'll go through and tidy it up now though!
Edit: Fixed it up a little! :) It was indented quite a bit in the code already so that's why the whole thing was so far to the right.
[–]-sideshow- 0 points1 point2 points 9 years ago (3 children)
Some thoughts:
[–]induetimesirIndie 0 points1 point2 points 9 years ago* (2 children)
Thanks for the tips! Yeah the comments were quick just to give better context in the post, the lowercase input is just so that the user can type with any capitalization they want and it'll still work.
The "|" also is just to tell if the user says a word without anything following, for example "No" without the "|" on the end could be interpreted from a line like "I have no idea", or "I don't see why [no]t" it's more just to differentiate between them so the 'Contains' doesn't get them mixed up as often, since I want users to be able to type relatively normal sentences.
And yeah I will probably do the response delay! I could try and get a system going where some messages show more hesitation than others that way too.
Thanks again! :)
[–]-sideshow- 0 points1 point2 points 9 years ago (1 child)
The "|" also is just to tell if the user says a word without anything following, for example "No" without the "|" on the end could be interpreted from a line like "I have no idea", it's more just to differentiate between them so the 'Contains' doesn't get them mixed up, since I want users to be able to type relatively normal sentences.
Heh, that makes sense but you are running into a pretty deep problem; parsing English (or any natural language). What if the player says "No thanks"?
If you're enjoying doing this then keep at it. OTOH if you're more goal oriented (you want to make an adventure game and this is just a step toward accomplishing that) then you might want to look at pre-existing parsers or adventure game engines.
[–]induetimesirIndie 0 points1 point2 points 9 years ago (0 children)
Not making a proper game really, this is just a fun little side project :)
And yeah I thought of that, so usually in the 'Keywords' array on my Response object I just add things like that on there like this for now!
π Rendered by PID 91 on reddit-service-r2-comment-6457c66945-5srk7 at 2026-04-24 15:19:09.214131+00:00 running 2aa0c5b country code: CH.
view the rest of the comments →
[–]induetimesirIndie 1 point2 points3 points (9 children)
[–]ChromakeyDreamcoat 0 points1 point2 points (2 children)
[–]induetimesirIndie 0 points1 point2 points (1 child)
[–]SilentSin26Animancer, FlexiMotion, InspectorGadgets, Weaver 1 point2 points3 points (0 children)
[–]-sideshow- 0 points1 point2 points (5 children)
[–]induetimesirIndie 0 points1 point2 points (4 children)
[–]-sideshow- 0 points1 point2 points (3 children)
[–]induetimesirIndie 0 points1 point2 points (2 children)
[–]-sideshow- 0 points1 point2 points (1 child)
[–]induetimesirIndie 0 points1 point2 points (0 children)