|
metadata
1) Monodevelop, the default code editor, hates javascript. [No, really.](https://bugzilla.xamarin.com/show_bug.cgi?id=5794) It’s not even classified as a bug.
2) 2D interface elements are a b\*tch to create.
(Primary reason? They use screen coordinates from the bottom left, on a scale of 0 to 1… **and** using pixel offsets. Secondary reason? You can’t get an accurate view of what will be rendered at your target resolution, as the camera’s aperture width/hight ratio is set to whatever viewable area your window has, _not_ the target resolution’s! There is _no way to preview the screen at the target resolution without compiling a full build!_).
3) All Function Names are in Leading Caps All the Time. Why?
(javascript DOM: `Mathf.max()` Unity javascript: `Mathf.Max()` for no explainable reason; I spent a half hour trying to figure out why the function `onTriggerEnter()` wasn’t calling)
4) No way to directly access a script attached to an object. You have to call a function in order to get to it. (No, really. `someObject.GetComponent(ScriptName)` oh, and `this` is “this script” not “this object,” you want the object the script is attached to? `gameObject`)
(Bonus points: of what type object does `someObject.GetComponent(ScriptName)` return?)
5) No `Array.IndexOf()` function. Secondarily, `Array.Remove(obj)` does not appear to work, nor does not appear in the Unity3D scripting reference, but DOES appear in Monodevelop’s code hinting. WTF?
6) Monodevelop is a piece of shit. It can’t code-hint properly half the time (it knows what `GameObject` is, but not `gameObject` but it does know _what type of object `gameObject` is!_ Not to mention half the time not being able to code hint _my own variables._ I have yet to figure out what the trigger conditions are).
(Yes, I realize that Monodevelop is actually a 3rd party program, but it comes with Unity’s installer and is automatically set as the default code editor)
7) Script defined public variables _don’t update_ when you change the code file! That is, if you have an object already spawned (by hand) and it has public variables, those variables will not update when you change the script: the unity interface for accessing those variables has precedence!
(I realize why, due to the need to define some of them in the interface, and saving the file would break that definition, but it’s a real pain when it’s an int! If it wasn’t changed in the interface, when it changes in the script, it should update, automatically.)
8) Asset creation. F\*ck 3D modeling. I was terrible at it in college and now I get to do more of it.
Followed by…
9) UV unwrapping.
and…
10) Texture creation.
|
|
|
metadata
I must agree with most of the complaints based on Monodevelop.
|
|
|
metadata
I use MonoDevelop for C# and find it works reasonably well. It’s not as good as Unity for Java, but it’s a little better than FlashDevelop for haXe (which I’m still pretty happy with).
My experience with 3D modeling consists of the following:
• Someone else doing it in Maya.
• Someone else importing it to Unity.
• Applying transformations and running animations via code.
I don’t have many complaints, but then I don’t have _that_ much experience (~1.5 semesters, for the record).
|
|
|
metadata
The 3D modeling gets to me, but what can we do? It’s a 3D program. Don’t you have to 3D model for Flash 3D?
|
|
|
metadata
> *Originally posted by **[player\_03](/forums/4/topics/279024?page=1#posts-6014259):***
>
> I use MonoDevelop for C# and find it works reasonably well.
That’s because they implemented automatic code indentation for C#.
> *Originally posted by **[lSWATLLAMA](/forums/4/topics/279024?page=1#posts-6014362):***
>
> The 3D modeling gets to me, but what can we do? It’s a 3D program. Don’t you have to 3D model for Flash 3D?
Do I use Flash 3D? No.
Can I make simple 2D graphical elements as I need a placeholder (such as a blank square, circle, etc. with or without text), and do it quickly? In Flash: Yes. In Unity: No.
|
|
|
metadata
Yeah, I used Unity but stopped since I can’t 3D model and have no friends that could.
Before someone says “Cause you have no friends”, that’s not true. I’ve got the rabbits outside that keep the grass from overrunning my rasberries. And the squirrels that pee on me.
|
|
|
metadata
> *Post by **[Draco18s](/forums/4/topics/279024#posts-6012627)***
1. because they’re idiots and don’t understand that the supported languages all use the same style, excepting C# and it’s UpperCaseOnEverythingStandard
2. what the fuck. the bottom-left thing you can get used to (potentially because some math-major had a bright idea and went against something that’s been used since… well, GUIs), but the others?
3. see end of #1
4. … ’kay. not using unity.
5. i don’t think AS2 has indexOf either, and some JS in older browsers lack indexOf
6. commonly seen in editors maintained by ulrtacrappy/lazy programmers
7. see #6
8. eh. what can you do? you don’t have it easy for placeholders like with flash, but main content in either will require 3D models. there’s never anything not-tedious about them; most of the time not difficult (since 3D is what we deal with just by walking across a room), but very tedious and time consuming and repetitive and annoying
9. [This space was intentionally left blank.]
10. this is easy in minecraft! _cubes. cubes everywhere!_
|
|
|
metadata
> i don’t think AS2 has indexOf either, and some JS in older browsers lack indexOf
I can live without indexOf(), it’s just annoying.
> but main content in either will require 3D models
Yeah, ones I don’t have to make. :P That’s why my boss hired a 3D animator.
|
|
|
metadata
11) Class constructors all have the same name. `Start()`. Which means that a subclass _automatically_ overrides a base class’s constructor, necessitating a `super.Start()` call. Ditto for any other “common” function name (`Update()`, `OnMouseDown()`, etc.)
|
|
|
metadata
|
|
|
metadata
> *Originally posted by **[GameBuilder15](/forums/4/topics/279024?page=1#posts-6033205):***
>
> Use UDK.
Or I could, you know, _not_ seeing as I have no choice in the matter.
12) When opening a script from Unity into MonoDevelop, MonoDevelop acts as if it was closed and reopened (briefly flashing the welcome screen before re-displaying previously open documents), which has the effect of _nuking the undo stack._
~~13) No ability to create a dynamic array of basic types (float, int, etc.) and have them function in anything resembling expected function.
(`myArray[index]` returns an object of type Object, which does not respond to the `as` keyword, nor can I `parseFloat()` or `ParseInt()` on it)~~
Edit: no, I can. I had to really dig around and locate the `List` type (equivalent to AS3’s Vector). Although for some reason Micro$oft didn’t give it a `length` property. They gave it a `Count` property. 9..9
|
|
|
metadata
My school has organized their own Ludum Dare Jam using Unity and will start in September. Problem?
|
|
|
metadata
> *Originally posted by **[DraygonRida](/forums/4/topics/279024?page=1#posts-6036792):***
>
> My school has organized their own Ludum Dare Jam using Unity and will start in September. Problem?
Have them do a warmup exercise over the summer. Unity Free is…free, and having them smash stuff together to learn the language and the interface will prepare them for the Jam so they have a good idea of the kinds of things they know they can do, which will enable them to decide if some functionality will take too long to implement.
I’d say something like “make a tower defense.” There’s parts of a nice tutorial [here.](http://cgcookie.com/unity/2012/05/22/unity-tower-defense-tutorial-part-01-autoturret/) The guy is still working on making it, but he does have a rather ingenious solution to the targeting problem (i.e. how does the tower know what’s in range?)
|
|
|
metadata
> *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6032951):***
>
> 11) Class constructors all have the same name. `Start()`. Which means that a subclass _automatically_ overrides a base class’s constructor, necessitating a `super.Start()` call. Ditto for any other “common” function name (`Update()`, `OnMouseDown()`, etc.)
Actually, that’s true only for MonoBehaviour.
|
|
|
metadata
> *Originally posted by **[Attila0413](/forums/4/topics/279024?page=1#posts-6037065):***
> > *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6032951):***
> >
> > 11) Class constructors all have the same name. `Start()`. Which means that a subclass _automatically_ overrides a base class’s constructor, necessitating a `super.Start()` call. Ditto for any other “common” function name (`Update()`, `OnMouseDown()`, etc.)
>
> Actually, that’s true only for MonoBehaviour.
And because documentation is a bitch to locate alternative methods…
What else can you extend a class from in order to be able to attach the script to a game object and end up with desired behavior?
|
|
|
metadata
> *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6037144):***
> > *Originally posted by **[Attila0413](/forums/4/topics/279024?page=1#posts-6037065):***
> > > *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6032951):***
> > >
> > > 11) Class constructors all have the same name. `Start()`. Which means that a subclass _automatically_ overrides a base class’s constructor, necessitating a `super.Start()` call. Ditto for any other “common” function name (`Update()`, `OnMouseDown()`, etc.)
> >
> > Actually, that’s true only for MonoBehaviour.
>
> And because documentation is a bitch to locate alternative methods…
> What else can you extend a class from in order to be able to attach the script to a game object and end up with desired behavior?
Since you cannot extend Component or Behaviour, I think MonoBehaviour is the only choice currently.
|
|
|
metadata
> *Originally posted by **[Attila0413](/forums/4/topics/279024?page=1#posts-6037331):***
>
> Since you cannot extend Component or Behaviour, I think MonoBehaviour is the only choice currently.
So in other words, my statement is still correct. :D
|
|
|
metadata
> *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6037808):***
> > *Originally posted by **[Attila0413](/forums/4/topics/279024?page=1#posts-6037331):***
> >
> > Since you cannot extend Component or Behaviour, I think MonoBehaviour is the only choice currently.
>
> So in other words, my statement is still correct. :D
You said class, not script lol
|
|
|
metadata
Reason #12 (I think that’s what we’re on)
No easy way to make dynamic text without using OnGUI(). Because OnGUI objects are sized in pixels and _do not scale_ between platforms with different screen resolutions (say…the iPad 2 vs. the iPad 3).
TextMesh does exist, but it’s a fucking pain in the arse to get it to the proper size and not look either block, blurred, or aliased to _hell_ and back because Unity _forces_ a bi-linear filter on the texture! And then the default size is (about) four screen-pixels per one texture-pixel! ARGH!
And that’s before even trying to deal with _building_ the project. Targeting the wrong platform? Whoops, “YourFont.TTF cannot be supported as a dynamic font” (which means you can no longer **bold** or _italicize_ it in the font settings. Not that you could do **mixed _formatting_** anyway!).
> (From [This page](http://docs.unity3d.com/Documentation/Components/class-TextMesh.html) )
> Hints
>
> When entering text into the Text property, you can create a line break by holding **Alt** and pressing **Return.**
Blatant lie.
Oh, and forget trying to swap from one font to another. You can’t without deleting the game object holding the TextMesh component. It doesn’t update it’s character sprite mapping!
|
|
|
metadata
> *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6012627):***
>
> 9) UV unwrapping.The fun never ends with UVMapping.
|
|
|
metadata
> *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6036896):***
> The guy is still working on making it, but he does have a rather ingenious solution to the targeting problem (i.e. how does the tower know what’s in range?)
Ingenious? Is it good or bad? I claim bad, as he retargets at anything that’s entered a sphere around a turret, regardless of any other conditions, and if a teaser enemy enters that range and leaves, the turret stops firing completely.
|
|
|
metadata
> *Originally posted by **[vesperbot](/forums/4/topics/279024?page=1#posts-6251595):***
> > *Originally posted by **[Draco18s](/forums/4/topics/279024?page=1#posts-6036896):***
> > The guy is still working on making it, but he does have a rather ingenious solution to the targeting problem (i.e. how does the tower know what’s in range?)
>
> Ingenious? Is it good or bad? I claim bad, as he retargets at anything that’s entered a sphere around a turret, regardless of any other conditions, and if a teaser enemy enters that range and leaves, the turret stops firing completely.
Well, his script isn’t complex, but easily adaptable. My point was that it avoids needing to constantly check an array of objects for their distance from the tower, and instead uses the event system. Sure, once an object throws the event, you need to decide if it’s an object worth tracking or not, but that’s easily doable. Hell, I took his design and was able to keep track of ALL enemies in range and then wrote a function that determines which one to aim and fire at.
|
|
|
metadata
In this case, yes, he used that tool the right way.
Actually, I did something like this too (2D tho), but thanks to my fixed path system I have even easier time to maintain target lists, while there is nothing yet done about retargetting, but it will be very easy to add. I’ve run my path and placed marks over it signalling a tower that a monster enters or leaves range, so it’ll start/stop firing.
|
|
|
metadata
3) because it’s .net standard?
4) how could you possibly access a component otherwise? and why would the this reference point to anything but the class instance? how could it? that’s just the way it is in any language.
5) there can’t be an Array.remove method, because arrays in mono/.net have a fixed size. and that’s good, because arrays have very little overhead because of that. that’s why there is this thing called list.
8) then you should use this engine where you just have to wish your creations into existence.
11) Start is not the constructor!!! and if you override a method, of course you have to call your parents method yourself if you want to. the compiler can’t guess what you want, you have to tell him.
13) nice job, you found the list type. i thought everyone using mono/.net would know it.
i wonder what kind of developer you are… not a software developer for sure, you obviously don’t even know the basics of oop.
|
|
|
metadata
> *Originally posted by **[jheiling](/forums/4/topics/279024?page=1#posts-6256619):***
>
> 3) because it’s .net standard?
Meh. .NET isn’t a standard. It can’t be, if it’s the only language using it.
> 4) how could you possibly access a component otherwise? and why would the this reference point to anything but the class instance? how could it? that’s just the way it is in any language.
`public class BulletObject extends GameObject` ?
OH WAIT, I CAN’T. GameObject is STATICALLY TYPED.
> 5) there can’t be an Array.remove method, because arrays in mono/.net have a fixed size. and that’s good, because arrays have very little overhead because of that. that’s why there is this thing called list.
Addressed only half the issue. What about `indexOf()`?
> 8) then you should use this engine where you just have to wish your creations into existence.
HA HA.
> 11) Start is not the constructor!!! and if you override a method, of course you have to call your parents method yourself if you want to. the compiler can’t guess what you want, you have to tell him.
`function Start()` does not say that it is an override. The override is implied and not noted in the documentation. Whoops.
> 13) nice job, you found the list type. i thought everyone using mono/.net would know it.
Because everyone who starts on a new language _instantly_ becomes aware of all of its little intricacies. (Also read as, “You have assumed that I have programmed in .NET before. Congratulations on making an ass of yourself.”)
> i wonder what kind of developer you are… not a software developer for sure, you obviously don’t even know the basics of oop.
See above comment in parenthesis. Also, you appear to have suddenly forgotten where your Shift Key is.
|