r/Unity3D – Telegram
r/Unity3D
263 subscribers
12.6K photos
15.6K videos
14 files
48K links
News about the Unity engine and project showcases from Reddit. Made possible with @reddit2telegram (@r_channels).
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Playtesting available for upcoming game, Xenopurge an Alien-inspired Auto Battler
https://redd.it/1hfouxl
@r_Unity3D
This media is not supported in your browser
VIEW IN TELEGRAM
📚 +450 FREE Amplify Shader Editor Learning Samples just dropped for Unity 3d (soft launch)
https://redd.it/1hfo8xi
@r_Unity3D
Media is too big
VIEW IN TELEGRAM
I launched my first indie game as a solo developer today!

https://redd.it/1hfqlnt
@r_Unity3D
Artifice Toolkit | Our in-house "Odin Inspector" inspired tool is now open-source

Hello everyone!

I’m thrilled to share this long-awaited post with all of you. What started as a small custom inspector for a single noscript used by my team has evolved into something great.

After a year of development during our in-between tasks, I’m excited to announce that this toolkit is now a fully-fledged, open-source Git package, ready to be integrated into anyone's project!

[AbZorbaGames/artificetoolkit: A Unity toolkit that allows easy editor customization with simple C# attributes.](https://github.com/AbZorbaGames/artificetoolkit)

It’s like the Odin Inspector but free and open-source. Its like MyBox and NaughtyAttributes but includes a Validator window while also being completely implemented using Unity's new VisualElements framework. Of course, it can be extended with your own attributes and validations in a similar fashion as Unity's own CustomInspectors and CustomPropertyDrawers.

If this all sounds unfamiliar, don’t worry—just take a look at the README file to get started!

I want to express my gratitude to **Abzorba Games**, the company under which I developed this tool, for gracefully allowing and supporting this tool on becoming an open-source project.

I recommend getting your hands on it an trying out our top 3 most used attributes:

* FoldoutGroup, the best visual fluff
* Required, the best validation
* PreviewScriptable, the best missing feature from Unity


Here are some examples from the documentation:

[Artifice Off vs On](https://preview.redd.it/6rx5ae4he87e1.png?width=1267&format=png&auto=webp&s=3f72eda408bbec43997402e037c839fe0a48c5c0)



[Artifice Validator](https://i.redd.it/i1tuisqme87e1.gif)



[\[Preview Scriptable\]](https://i.redd.it/xut1yl6oe87e1.gif)

[\[EnableIf\]](https://i.redd.it/f3cpwgspe87e1.gif)




Now for the disclaimer. The toolkit is definitely not bug-free, and not even close to the versatility of the Odin Inspector... but its free and waiting for your feedback and contributions!


PS: Also not mentioned in the documentation (somehow I forgot to add it), you can create Editor Windows as if they were simple components by inheriting the ArtificeEditorWindow class and calling through a menu item the GetWindow ;)

https://redd.it/1hfm5i3
@r_Unity3D
When giving a sprite a Custom Physics Shape, how do I delete a vertex?

Good evening,

When making a Custom Physics Shape for a sprite, how would I go about deleting a node?

Here's an example:

The sprite in question. It's a very simple grass tile edge.

How could I delete that node highlighted in blue? I've tried a few different things (hitting the delete key, control-clicking it, and every other key on my keyboard). Most of the guides I see either don't cover it, or they're for a different version of Unity.

All help is appreciated

https://redd.it/1hfyzpi
@r_Unity3D
I launched my first game about building a team with unique skeletons such as pop star, cook, pirate and many more to battle! It's completely free on Steam and play now!!
https://redd.it/1hg16to
@r_Unity3D
Trouble with spawning overlapped objects. Collider issue?

Hello!

I'm currently starting my first small hobby project, and I'm running into issues spawning room prefabs for my level generation. The original goal was to make a randomly generated series of rooms similar to Binding of Isaac. I initially followed this tutorial (Part 1: https://www.youtube.com/watch?v=qAf9axsyijY) but I never got it to work fully and have been troubleshooting since. I keep running into an issue where every 1 out of 20 rooms will be spawned on top of an existing room.

My current theory is that there's either an issue with the Spawn Destroyer's collider (an object that destroys room spawn points and overlapped rooms) or maybe an issue with Spawn Destroyers destroying each other first. I've also tried adding in various delays and limiting room spawns but it feels like the code is being treated as a suggestion rather than a rule.

Any suggestions would be greatly appreciated, but I may end up starting this part from scratch if I can't get it fixed.

My room spawn code and spawn destroyer code are listed below.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEngine.SceneManagement;
using Unity.VisualScripting;
using System.Diagnostics.Tracing;

public class RoomSpawn : MonoBehaviour
{
public int openingDirection; // Which direction of this room needs a door
private RoomTemplate template; // Object containing all of the room prefabs
private int roomCount; // Max number of rooms (assigned per floor)
private int rand; // Random integer
private bool spawned = false; // Boolean to determine if a room has already spawned

public StairSpawner stairs; // Stair gameobjects
public int upstairsCount; // Number of upstairs objects per floor
public int downstairsCount; // Number of downstairs objects per floor

//public int upstairsCount_Main;
//public int downstairsCount_F1;
//public int upstairsCount_F1;
//public int downstairsCount_F2;

private int rand2;

private float counter;
private float waitTime;

// Start is called before the first frame update
void Start()
{
StartCoroutine(Waiter()); // This will stall for time based on the openingDirection

//Find the room template object that hosts all of the room game objects
template = GameObject.FindGameObjectWithTag("Rooms").GetComponent<RoomTemplate>();

// Find the stair spawner object that holds the stairs game object
stairs = GameObject.FindGameObjectWithTag("Stairs").GetComponent<StairSpawner>();

// Get the current scene for scene transition
//scene = SceneManager.GetActiveScene();

// Determine which floor we're on and set the roomCount equal to the number of rooms available on that floor
if (gameObject.transform.position.y < 500f)
{
roomCount = template.maxRooms_Main;
}
else if (gameObject.transform.position.y < 1500)
{
roomCount = template.maxRooms_F1;
}
else if (gameObject.transform.position.y < 2500)
{
roomCount = template.maxRooms_F2;
}
}

IEnumerator Waiter()
{
// This is a coroutine that will wait a time determined by the opening direction of the spawn point
counter = 0f;
waitTime = (0.1f / 3f) * (openingDirection - 1f) + 0.1f; // Calculates the wait time by scaling the opening direction to a range of [0.1s - 0.2s]
while (counter < waitTime)
{
counter += Time.deltaTime;
yield return null;
}
}

// Update is called once per frame
void FixedUpdate()
{
// Count the
number of available stair objects to spawn (refreshed each frame)
upstairsCount = stairs.upstairsCount;
downstairsCount = stairs.downstairsCount;

if (spawned == false && roomCount > 0 && counter >= waitTime)
{
// Subtract 1 from the total room counter and set roomCount to the new value
if (gameObject.transform.position.y < 500f)
{
template.maxRooms_Main--;
roomCount = template.maxRooms_Main;
}
else if (gameObject.transform.position.y < 1500)
{
template.maxRooms_F1--;
roomCount = template.maxRooms_F1;
}
else if (gameObject.transform.position.y < 2500)
{
template.maxRooms_F2--;
roomCount = template.maxRooms_F2;
}
//// If multiple rooms have subtracted from the total at the same time, and the total count is 0, destroy the game object and break out of the loop
//if (roomCount < 0)
//{
// Destroy(gameObject);
// return;
//}
//SpawnStairs
rand2 = Random.Range(0, 3);
if (rand2 == upstairsCount && upstairsCount > 0)
// if the random number is the same as the number of upstairs available (random chance) and the active scene is Main floor and there are available stairs
{
// Spawn an "Upstairs" object and decrease stair count by 1
Instantiate(stairs.upstairsObject, transform.position + new Vector3 (18,18,0), stairs.upstairsObject.transform.rotation);
GameObject.FindGameObjectWithTag("Stairs").GetComponent<StairSpawner>().upstairsCount--;
}
else if (rand2 == downstairsCount && downstairsCount > 0)
{
Instantiate(stairs.downstairsObject, transform.position + new Vector3(-18, -18, 0), stairs.downstairsObject.transform.rotation);
GameObject.FindGameObjectWithTag("Stairs").GetComponent<StairSpawner>().downstairsCount--;
}

// Spawn rooms
if (openingDirection == 1)
{
rand = Random.Range(0, template.bottomRooms.Length);
// If this is the last room, make it a room with one door
if (roomCount < 2)
{
rand = 0;
}
Instantiate(template.bottomRooms[rand], transform.position, template.bottomRooms[rand].transform.rotation);
roomCount--;
}
else if (openingDirection == 2)
{
rand = Random.Range(0, template.topRooms.Length);
// If this is the last room, make it a room with one door
if (roomCount < 2)
{
rand = 0;
}
Instantiate(template.topRooms[rand], transform.position, template.topRooms[rand].transform.rotation);
roomCount--;
}
else if (openingDirection == 3)
{
rand = Random.Range(0, template.leftRooms.Length);
// If this is the last room, make it a room with one door
if (roomCount < 2)
{
rand = 0;
}
Instantiate(template.leftRooms[rand], transform.position, template.leftRooms[rand].transform.rotation);
roomCount--;
}
else if (openingDirection == 4)
{
rand = Random.Range(0, template.rightRooms.Length);
// If this is the last room, make it a room with
one door
if (roomCount < 2)
{
rand = 0;
}
Instantiate(template.rightRooms[rand], transform.position, template.rightRooms[rand].transform.rotation);
roomCount--;

}

spawned = true;
}

}

private void OnCollisionEnter2D(Collision2D collision)
{
// If there's a collision with any object (meaning a room or spawner is present), set Spawned to true to prevent a room from spawning
spawned = true;

// If it collides with a Spawn destroyer, destroy this spawn point
if (collision.gameObject.CompareTag("SpawnPoint") && collision.gameObject.name == "SpawnDestroy")
{
Destroy(gameObject);
}
// If it collides with a spawn point, compare opening direction values. The high value gets to spawn while the other is destroyed.
// If they have the same spawn point, something messed up and destroy them both.
// If it collides with anything else (like a floor) destroy this spawner
else if (collision.gameObject.CompareTag("SpawnPoint"))
{
if (collision.gameObject.GetComponent<RoomSpawn>().openingDirection > openingDirection)
{
spawned = true;
Destroy(gameObject);
}
else if (collision.gameObject.GetComponent<RoomSpawn>().openingDirection == openingDirection)
{
Destroy(collision.gameObject);
Destroy(gameObject);
}
else if (collision.gameObject.GetComponent<RoomSpawn>().openingDirection < openingDirection)
{
spawned = false;
Destroy(collision.gameObject);
}
else
{
Destroy(gameObject);
}
}

}


}

public class SpawnDestroyer : MonoBehaviour
{
private void Update()
{
//Destroy the "SpawnDestroy" after 3 sec so it doesn't destroy anything else
Invoke("DestroySelf", 2f);
}

private void OnTriggerEnter2D(Collider2D other)
{
// Destroys any trigger that touches the SpawnDestroyer
if (other.CompareTag("SpawnPoint"))
{
Destroy(other.gameObject);
}

}
private void DestroySelf()
{
// Destroy the Spawn Destroyer
Destroy(gameObject);
}
}


https://redd.it/1hg32d0
@r_Unity3D
I use the right name... of course.
https://redd.it/1hg43k5
@r_Unity3D
How to make a stretch at a point shader

Hi! I want to make a shader for grabbing a sprite at a point and it hanging down and stretching that point to the cursor. The problem is, I don't know how to code shaders. I was wondering if there is a existing shader or one I could use in the same way. Much appreciated thank you!

https://redd.it/1hg2z1n
@r_Unity3D
Spritesheet editor/extractor

With some more free time, I'd like to get back into learning C++ with the aims of exercising the grey matter and making some simple games. Some years ago I was using a program called darkFunction-Editor (github still there at https://github.com/darkFunction/darkFunction-Editor) to help me prepare spritesheets off the internet for use in a simple game. The developer (not active now) still has a youtube demo at https://www.youtube.com/watch?v=zMZa3TG58lQ.

In using this tool I was able to (amongst other features)...

1. Import a spritesheet and (if needed) set it's background colour to transparent
2. Automatically find each sprite on the sheet (placing a box around each), and allow for some fine tunning of the boxes.
3. Allow me to select and name different sets of single frames and animations on the sheet for inclusion in the final output xml file.
4. Pack the sprites into as small a space as possible.
5. Save the sprite sheet offset pointers as an xml file, whereby I was able to use the pugixml library to traverse the xml file, allowing me to select the sprite frames I needed for display.

Unfortunately, it looks like his main website is down so I can't get the installer, and my limited skills mean I don't know how to build the installer file from his github page.

Does anyone if the installer file can be rebuilt (and show me how) - or (maybe better) - can you suggest another tool to at least cover these same steps as above. The output file would still need to let me traverse the sprites on the actual sheet. Ideally, it would be nice to be able to cut out individual sprites and animations from one/more sheets and allow me to create my own custom spritesheet.

[Edit\] A bit more playing about with Google results and, oddly, I was pointed to a 'hidden' page on this same github location...

https://github.com/darkFunction/darkFunction-Editor/releases

The "/releases" page now gives me access to the installer .jar file, which I've just tested by successfully installing and running this utility on my system.

I'm sure there are other utilities that would perform the same functions and provide useful extras. Would be interested to know of any recommendations.

https://redd.it/1hg8een
@r_Unity3D
The fast-paced roguelite ink action game InKing has been released! You can now download my first game for free on Steam! Splash ink, collect it, and obliterate your enemies!

https://redd.it/1hgas0j
@r_Unity3D
This media is not supported in your browser
VIEW IN TELEGRAM
Constantly see a deceptive mobile ad promoting an on-the-rails style shooter. Trying to make a game out of it, but the gameplay is turning out to not be that fun and way too easy

https://redd.it/1hgb03w
@r_Unity3D
Character selection!

Can someone guide through about Recreating this kind of character selection system?
Where do i start from? i have no idea
Also, The sweet animations too

https://i.redd.it/y1wb828ldf7e1.gif



https://redd.it/1hgcqhn
@r_Unity3D