Spikey Rain

Project Setup

In[]:=
Needs["UnityLink`"]
In[]:=
UnityOpen["SpikeyRain2"]
In[]:=
CreateUnityAssetDirectory[{"Scenes","Meshes","Materials"}];
In[]:=
CreateUnityScene[File["Scenes/Spikey Rain"]]
Out[]=
UnityScene
Scene : Spikey Rain
path: Assets/Scenes/Spikey Rain.unity

In[]:=
mesh=CreateUnityMesh[File["Meshes/Spikey"],​​PolyhedronData["Spikey","BoundaryMeshRegion"]]
Out[]=
UnityMesh
Mesh : Spikey
vertices: 180


Scene Setup

In[]:=
CreateUnityPlane["Platform",Properties->{"LocalScale"->{8,1,3},"EulerAngles"->{-25,0,0}}]
Out[]=
UnityGameObject
GameObject : Platform
position: {0.,0.,0.}

In[]:=
spikeyCount=10
Out[]=
10
In[]:=
positions=Table[{RandomReal[{-8,8}],20+i*10,10},{i,spikeyCount}]
Out[]=
{{2.70584,30,10},{1.11317,40,10},{-6.29331,50,10},{-1.57901,60,10},{3.22349,70,10},{0.783133,80,10},{-0.295151,90,10},{2.64514,100,10},{7.86213,110,10},{-6.38607,120,10}}
In[]:=
colors=RandomColor[Hue[_],spikeyCount]
Out[]=

,
,
,
,
,
,
,
,
,

In[]:=
materials=Table[CreateUnityMaterial[File["Materials/Spikey "<>ToString[i]],colors[[i]]],{i,spikeyCount}]
Out[]=
UnityMaterial
Material : Spikey 1
shader: Standard
,UnityMaterial
Material : Spikey 2
shader: Standard
,UnityMaterial
Material : Spikey 3
shader: Standard
,UnityMaterial
Material : Spikey 4
shader: Standard
,UnityMaterial
Material : Spikey 5
shader: Standard
,UnityMaterial
Material : Spikey 6
shader: Standard
,UnityMaterial
Material : Spikey 7
shader: Standard
,UnityMaterial
Material : Spikey 8
shader: Standard
,UnityMaterial
Material : Spikey 9
shader: Standard
,UnityMaterial
Material : Spikey 10
shader: Standard

In[]:=
gameObjects=Table[CreateUnityGameObject["Spikey ("<>ToString[i]<>")",mesh],{i,spikeyCount}]
Out[]=
UnityGameObject
GameObject : Spikey (1)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (2)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (3)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (4)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (5)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (6)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (7)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (8)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (9)
position: {0.,0.,0.}
,UnityGameObject
GameObject : Spikey (10)
position: {0.,0.,0.}

In[]:=
Do[SetProperty[gameObjects[[i]],"Position"->positions[[i]]],{i,spikeyCount}]
In[]:=
Do[SetProperty[gameObjects[[i]],"SharedMaterial"->materials[[i]]],{i,spikeyCount}]
In[]:=
Do[SetProperty[gameObjects[[i]],"LocalScale"->{0.5,0.5,0.5}],{i,spikeyCount}]
In[]:=
Table[CreateUnityRigidbody[go,Properties->{"CollisionDetection"->"Continuous","Drag"->0.25}],{go,gameObjects}]
Out[]=
UnityRigidbody
Rigidbody : Spikey (1)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (2)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (3)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (4)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (5)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (6)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (7)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (8)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (9)
use gravity: True
,UnityRigidbody
Rigidbody : Spikey (10)
use gravity: True

In[]:=
colliders=FindUnityComponent["Spikey (*)","MeshCollider",All];​​Do[SetProperty[collider,"Convex"->True],{collider,colliders}]
In[]:=
DeleteUnityGameObject["Directional Light"]
In[]:=
Table[CreateUnityLight[gameObjects[[i]],Properties->{"Type"->"Point","Color"->colors[[i]],"Intensity"->3,"Range"->5,"RenderMode"->"ForcePixel"}],{i,spikeyCount}]
Out[]=
UnityLight
Light : Spikey (1)
type: Point
,UnityLight
Light : Spikey (2)
type: Point
,UnityLight
Light : Spikey (3)
type: Point
,UnityLight
Light : Spikey (4)
type: Point
,UnityLight
Light : Spikey (5)
type: Point
,UnityLight
Light : Spikey (6)
type: Point
,UnityLight
Light : Spikey (7)
type: Point
,UnityLight
Light : Spikey (8)
type: Point
,UnityLight
Light : Spikey (9)
type: Point
,UnityLight
Light : Spikey (10)
type: Point

In[]:=
SaveUnityScene[]
Out[]=
True