Celestial Sounds: Placeholders, Post Effects and Particle Effects.
It’s my second week of development for Celestial Sounds and all placeholder objects have been created and implemented into the project. To help get feedback for playtesting next week, I’ve also done Post Processing Effects and Particle Effects to see what testers think and how testers react to the effects for the final build.
Placeholders
Similar to last week, I made assets using MagicaVoxel for this project. I haven’t nailed down some art details for the art bible as of yet so I tried making objects of different sizes — The number of cubes an object is — to see what works best for Celestial Sounds as well as works well with other cube amounts.
After looking at my art bible as well as asset list, I knew I needed to make basic UI, assets for puzzles — Bins, rocks, logs and Bridges — as well as other world platform pieces that are a catalyst for the puzzles to be completed.

I did initially have trouble putting the UI objects — Next, Prev and Song Playing — into Unity appearing to the camera when in the canvas but after a look at the Unity Manual for cameras, I found that 3D objects couldn’t work when the camera is set to ‘Overlay’ To resolve this, I changed the camera from ‘Overlay’ to ‘World Space’, this meant that the UI is an actual physical object in the world that casts and receives shadows which caused a lack of lighting on the buttons due to the light source actually being behind it instead of in front. I added a spotlight that didn’t cast a shadow on the world to light up the UI icons without affecting the world. However, by adding the UI into the World Space, I’ve been able to angle the buttons slightly, adding just a bit more character to the UI.

A huge issue that isn’t apparent in the renders above that I currently cannot find a reason for it occurring or solutions for it online or from my peers. THe actual problem is that some world platform pieces actually have a different colour on a chunk of the blocks, specifically blocks I’ve changed from a previous save of said world piece. However, the miscoloured chunks are only when imported to Unity and not present in MagicaVoxel. Currently, this isn’t actually a huge bother for myself as I plan on not having to worry about it when I replace these current assets as they are only placeholders.
Post Processing Effects
I don’t have too many post effects at this current point in time, in fact, I only have 1 post processing effect and that would be sun shafts. Originally, I couldn’t find the Sun Shaft script in Unity 5, but I did find it in the standard asset pack that can be imported to a project in Unity 5. I didn’t have to touch any scripting for it, but I am currently having troubles finding the settings that create the effect I was initially looking for but I’m not sure if its because it can’t be done the way I want it to in Unity, or if I’m not familiar enough with the Sun Shaft options.
At the time of writing this developer diary, I am satisfied with the the ‘God Rays’ interacting with particle effects and it’s intensity. However, it was not my goal, as I was trying to get a Sun Shaft with an extremely long fall off but have it transparent, not blinding and relatively opaque. I will have to conduct more research on Sun Shafts before playtesting to achieve my goal but for now, the current effect is enough for playtests.
Object Movement
Instead of scripting, I have opted for moving puzzles obstacles — Bins, Rocks, Bridges, etc. — with Unity’s inbuilt animator. I have in fact done movement already in a script for the sun for last weeks developer diary but I never talked about it as it was taken out.
public float x;public float y;public float z;public GameObject SunLight;// Use this for initializationvoid Start (){SunLight.transform.localEulerAngles = new Vector3( -45,145, z);}// Update is called once per framevoid Update (){StartCoroutine(RotateSun());}IEnumerator RotateSun(){float moveSpeed = 0.0001f;while (SunLight.transform.rotation.y < 180){SunLight.transform.rotation = Quaternion.Slerp(SunLight.transform.rotation, Quaternion.Euler(x, y, z), moveSpeed * Time.time);yield return null;}SunLight.transform.rotation = Quaternion.Euler(x, y, z);yield return null;}}
Above is a block of code with a coroutine to make the light source rotate to give an affect of the time of day changing. However, giving that I wanted it for multiple weather affects and to have clouds, I thought it would be best to scrap it and just make a skybox that I rotate instead as doing a coroutine was a lot more complicated for me and took too much time to do what I wanted.
I have public float x; public float y; and public float z; in the block of code above as public instead of private so that they can be edited in Unity’s inspector for quick changes. Originally they were private as I try to keep variables as that because I believe it is good coding practice, but it was wasting time opening Microsoft Visual Studio, making the change, saving the change, testing the change, going back to Visual Studio and then rinsing and repeating.
To smooth the coroutine, I added a lerp so that the rotation would start slow, speed up and slow down again. Lerping was exactly the effect I wanted, otherwise, the light source would’ve instantly changed it’s rotation instead of doing it over time in an appealing manner.
I also tried doing a coroutine for position instead of rotation in regards to a tree puzzle. However, the script for tree movement itself is what made me abandon script for it and swap over to animation.
//World Objectspublic float ObjectSpeed;public GameObject StartPosition;public GameObject Destination;public void Update(){MoveTree();print(transform.position.y);}public void MoveTree(){Vector3 startPosition = StartPosition.transform.position;transform.position = Vector3.MoveTowards(transform.position, Destination.transform.position, ObjectSpeed * Time.deltaTime);}
I’m actually unaware why the coroutine was not working correctly for this but I know it worked when I changed it to rotation instead of position, so I tried the next method that jumped into my head and that’s using Vector3.MoveTowards, as it’s what I typically used and I knew it worked. The tree did in fact work, but it would’ve been a waste of time doing a script for each obstacle or tagging every single obstacle and assigning a class to a tag. Not only this, but I wasn’t able to implement a lerping effect like I was able to with the coroutine.

Now that I have moved to using Unity’s animator instead of just C# scripting, I was able to make this tree move and have a lerping effect in just a minute. However, as these are still obstacles that are activated at a certain time, the tree loops constantly in the gif as seen to the left, so I will have to use some code to start, stop and reverse animations. However, this is saving a lot more time than scripting and past issues I’ve had with the animator and the animation not actually playing out was because that project required a rigid body but luckily this project does not have a rigidbody on obstacles resulting completely normal game physics.
Particle Effects

As of writing this developer diary, the last thing I worked on was the rain particle effect as seen to the left. Although I didn’t use any texture for the particle system, and only needed a basic particle system, and although it was easy because I am new to particle systems, it was all very time-consuming.

To compensate for fast movement, I had to expand the particle emitter shape to cover where the player will be. There was no real issue to doing this, but I will definitely see how much the performance was affect when I test the Celestial Sounds on less capable devices.

To the left are the settings that I’ve used on the Particle System. As the rain weather effect is possibly always on depending on how the level loads, I have the emitter set to loop just to avoid the rain particles disappearing and no longer emitting.
I’ve ticked 3D start size as I was just using a cube mesh from Unity and wanted to make the cube look like it’s moving faster than it is, so it has been a stretch on its y axis to give this effect.
The simulation space was set to ‘World’ so that when the particles hit the world, they either bounce or destroy and not just go through everything.
When the particles collide with the ground, the sub emitter is triggered. Which is another particle emitter, that instead of constantly falling towards the ground and destroying on collision, it goes up for a moment and falls to the ground as it is affected by gravity. Doing this made the particles bounce on the ground a few times before disappearing giving a splash effect which is exactly what I wanted to do.
Before The Next Diary
This week I was unable to work on Celestial Sounds as much as I wanted to due to work on another project for University. I knew that I had another project coming up when I started Celestial Sounds and I still wanted to complete the game within a month, as I have found myself short on time, I believe that Celestial Sounds is slightly overscoped.
With that being said, by next week, I plan on having all animations and menus complete as well as having all major scripts complete in time for play testing next week.