- Home /
multidimensional builtin vector3 array?
I know I can use this helper script in order to create multidimensional builtin arrays in Unity Javascript -- but can I create multidimensional builtin VECTOR3 arrays? I don't know C# so I tried tinkering with the helper script to no avail.
As a side question, are multidimensional builtin arrays as fast in Unity as single-dimensional builtin arrays? I'd rather have performance and a little extra coding...
Answer by jashan · Aug 05, 2010 at 12:35 PM
Sure, you'd probably simply add this static method to the C# script:
public static Vector3[,] Vector3Array (int a, int b) {
return new Vector3[a,b];
}
... so that would be for a 2-dimensional one ... for 3-dimensional, you'd add:
public static Vector3[,,] Vector3Array (int a, int b, int c) {
return new Vector3[a,b,c];
}
Regarding the question of performance: I'm pretty sure there is no performance difference between one-dimensional arrays and multi-dimensional ones. Of course, creating those arrays will likely take a little longer because usually they have more "space" so more memory needs to be allocated and managed. But writing/reading into/from those arrays shouldn't take a significant amount of time.
Of course, it depends on how "much" you do of it. As a rule of thumb: If it's just once per frame: Don't worry. If you're looping or doing nested loops in each frame: Watch out.
As with anything that has to do with performance: "Premature optimization is the root of all evil" (Donald Knuth). See also: Wikipedia: Program Optimization - When to optimize
I just tried that and got the following Console error:
Assets/Standard Assets/Scripts/$$anonymous$$ultiDim.cs(31,19): error CS0246: The type or namespace name `Vector3' could not be found. Are you missing a using directive or an assembly reference?
@Robin $$anonymous$$ing: you need to use the UnityEngine namespace for Unity-specific structs like Vector3.
Brilliant, that's something else I've learned about today. Thanks!
Answer by cncguy · Aug 05, 2010 at 12:41 PM
You can make a new class containing an array of vector3's
e.g.
class ThreeVecs
{
var v3Arr : Vector3[] = new Vector3[3]; // Array of 3 x Vector3
function ThreeVecs(){} // constructor - init the class variables here if you like
}
You can then create an array of ThreeVecs:
var multiArr : ThreeVecs[] = new ThreeVecs[10]; // Array of 10 ThreeVecs
multiArr[0] = new ThreeVecs(); multiArr[0].v3Arr[0] = Vector3(1,2,3); multiArr[0].v3Arr[1] = Vector3(4,5,6); multiArr[0].v3Arr[2] = Vector3(7,8,9);
Just one possible way. :)
[EDIT]
so a class to answer your question below and illustrate using the constructor to initialise:
class ThreeVecs { var corner0 : Vector3; var corner1 : Vector3; var corner2 : Vector3; function ThreeVecs(c0 : Vector3, c1 : Vector3, c2 : Vector3) { corner0 = c0; corner1 = c1; corner2 = c2; } }
var multiArr : ThreeVecs[] = new ThreeVecs[10]; // Array of 10 ThreeVecs
multiArr[0] = new ThreeVecs(Vector3(1,2,3), Vector3(4,5,6), Vector3(7,8,9));
Debug.Log(multiArr[0].corner0); //
I think I understand it! Could I ins$$anonymous$$d give the class three variables corner0, corner1 and corner2 - and then say... var multiArr : ThreeVecs[] = new ThreeVecs[10]; multiArr[0].corner0 = Vector3(1,2,3); ? I tried this and it doesn't work. Is it possible and I'm just getting the syntax wrong, or am I barking up the wrong SpeedTree?
You can put whatever variables you like in the class. something like That should work - what errors are you getting?
oh I see - don't forget to do this: multiArr[0] = new ThreeVecs();
See you create an array of ThreeVecs but then you have to assign each ThreeVec object in the array with an instance of ThreeVec. Then you have to assign the class variables of each ThreeVec instance;
Of course you can use the class constructor to assign the variables when you create each instance
Answer by Eric5h5 · Aug 05, 2010 at 02:43 PM
Multi-dimensional arrays are slightly slower than 1-dimensional arrays. It's unlikely to make any difference in practice though.
Your answer
Follow this Question
Related Questions
Move instantiated object towards player's posistion 3 Answers
How to set a target position in Vector3.MoveTowards using a variable 2 Answers
Applying Constant Force on Multiple Axes Via Javascript? 1 Answer
Move empty object random 1 Answer
Why Does Initialising Built-In Array of Classes Require Constructor? 1 Answer