#archived-code-general

1 messages · Page 357 of 1

spare island
#

the same general idea at least

leaden ice
#

It sounds like you might have had some exposure to the callstack

spare island
#

i kind of skipped from C# straight to assembly for a little

#

and then did some stuff building circuits and RAM and such (in minecraft, i can't afford to build real life ones lol)

spare island
#

@leaden ice thanks for the help seems to be working fine!

shell scarab
#

how do I check if this thing is on or off?

leaden ice
#

Depends what that is

#

Share some context?

swift falcon
#

yo guys any tutorials and documentations on how to code 3rd person camera without cinnemachine

sleek bough
#

@swift falcon Don't cross-post, please.

swift falcon
#

mb

ionic zenith
#
SteamFriends.ActivateGameOverlayInviteDialog((CSteamID)current_lobbyID);

I currently have this to open the invite menu, but it just opens steam overlay with a list of friends, how do I get the menu where you have those "invite" buttons?

tawdry pecan
soft shard
# tawdry pecan I have an system where players can pick up dropped weapons by pressing F. But wh...

I would check the pivot of your hand transform and the pivot of your weapons, you should also make sure you are zeroing the local position of your weapons after parenting it, if all your weapons have different origins, they will be positioned differently once they are a child, you could give each weapon its own parent and move the base of the weapon (the part the hand should cover) to the origin of that parent, this way when you set a weapon as a child and zero the local position, it will be on the parent that contains the specific weapon positioned where you would like

proper valley
#

i have this gameController structure i want to pass into this script. but i cant drag and drop it in there. I assume its because there are children attached? Are there any workarounds?

#
public class TileClick : MonoBehaviour, IPointerClickHandler
{
    public GameObject gameController;
    public void OnPointerClick(PointerEventData eventData)
    {
        gameController.GetComponent<GameController>().clickTile(transform.position);
    }
}```
if i try and select it from the available objects it says there is a type mismatch but i dont understand why
knotty sun
#

you cannot set a scene object onto a script, only an instance of the script attached to a gameobject in the same scene

proper valley
#

so i have to create an instance of GameController?

knotty sun
#

that you already have, you need to attach this script to a game object and assign there

proper valley
#

i attached it to an object, but it doesnt let me drag and drop the GameController object in the object field

knotty sun
#

show the inspector

proper valley
knotty sun
#

that is a prefab not a scene object

proper valley
#

ah
do i have to make a GameController prefab then?

knotty sun
#

no

proper valley
#

do i assign the function/object when making a new tile instnce?

oblique spoke
#

Most likely want to assign the scene references when you instantiate the prefab.

knotty sun
#

yes

proper valley
#

how do i do that?

#

i already have a script attached to the tile, in the start function, how to i get the GameController object?

knotty sun
#

after instantiating the prefab get a reference to the TileClick script and set the reference to the GameController

knotty sun
proper valley
# proper valley

The tiles are instanciated by the tile handler script, do i put the reference in there?

#

ah ok

knotty sun
#

if GameController is a singleton it's even easier

proper valley
#

i got it working, thanks!

grim cypress
#

I am a beginner in unity requesting some support
Can someone guide me on How to make a search dropdown and then use the selected option as a variable input into a script
Kinda like the search bar on top of google maps ui

worthy raptor
#

alright so not sure if this would fall under animation or coding, but I'm trying to get my characters attacks to actually deal damage. I've only dealt with platformer movement, but this new project I'm working on has 4 directional top down movement, and I genuinely have no idea how to get my character to attack. I've looked up multiple tutorials, but I just can't seem to find something that works with my character

#

for reference the asset package I'm using doesn't have a visible "weapon" and most tutorials require an attack point object to be created on attack

cosmic rain
worthy raptor
#

for example this is what my character sprite looks like

rigid island
mellow barn
#

bumping this, deltaTime indicates we're not on a timescale of 0, is there something else i should be aware of that might be causing problems?

simple void
#

typeof(Object).IsValueType
You can actually use reflection to check for almost anything, templates, generic types, unmanaged, etc

#

For value types, if you create one in a function it's on the stack. If you have a reference type holding one, instead of a seperate memory block and a pointer to it, it literately holds all the values inline

#

ie. If I had a class A which holds an instance of class B, where sizeof(B) is 24 bytes, sizeof(A) is 8. But if class A holds an instance of struct B with the same size, sizeof(A) is 24.

shell scarab
#

Should avoid reflection in unity, causes extra gc overhead and is slow

spare island
#

maybe they mean for just testing

shell scarab
#

maybe. But i dont think typeof and sizeof is really going to affect it, i think its mostly the stuff in System.Reflection

wide terrace
#

Is typeof reflection? I thought that was compile-time shtuff 👀

spare island
#

i think typeof is compile-time and GetType is reflection

twin egret
#

i'm having a weird issue where using Camera.WorldToViewportPoint returns different results for the same position, could something like SRP be the cause?

wide terrace
spare island
wide terrace
twin egret
wide terrace
twin egret
#

yeah, give me a second, gathering everything rn

shell scarab
#

Well, technically, i think typeof is reflection but just known at compile time.

twin egret
#

oh wait, i found the issue. camera wasn't in the same position

jolly kettle
#

what's the standard method for handling different bullet impact effects based on the materials of an object?

#

my initial thought was using CompareTag but I have stuff that needs tags for other gameplay reasons

leaden ice
jolly kettle
#

and then just grab the script for each shot?

#

Seems reasonably efficient

leaden ice
simple void
shell scarab
#

why do you need to test if its a value type?

spare island
#

i dont need to i just want to know how to

shell scarab
#

ohh okay

devout parrot
#

My game world has ~10,000 objects, and I only want the objects in a specific range of the player to be visible. However, the objects refuse to be enabled when they enter my sphere collider. Here's the code to turn them off at launch:

private bool init = true;
    // Attached to objects
    void Start()
    {
        if(init)
        {
            gameObject.SetActive(false);
            Debug.Log("Outside Render Distance!");
            init = false;
        }
    }

Here is the code for the sphere collider:

void OnTriggerEnter(Collider other)
{
    if(other.tag == "Decoration")
    {
        Debug.Log("Spawning Object");
        other.gameObject.SetActive(true);
        Debug.Log(other.gameObject.activeSelf);
    }
}
    
void OnTriggerExit(Collider other)
{
    if(other.tag == "Decoration")
    {
        Debug.Log("Despawning Object");
        other.gameObject.SetActive(false);
        Debug.Log(other.gameObject.activeSelf);
    }
}

This feels like this should be simple, but I just can't wrap my head around this. Any assistance would be appreciated.

somber nacelle
#

well first of all, unity already has built in frustum culling so anything not in the camera's view frustum will already not be visible. second, occlusion culling is also a thing so you can cull even more objects that are occluded by other objects so you don't need these trigger messages for stuff like manual culling

devout parrot
#

I don't believe this will help in my case. The game environment is a procedurally generated planet, and the objects placed on it are also procedurally generated. Because the planet itself moves, occlusion culling won't work. For the debug messages, the objects that are initially within the sphere collider report a collision, and activeSelf is true.

somber nacelle
#

well frustum culling already exists and works with proc gen stuff, and the camera's clipping far plane can be used to not render objects beyond a certain distance, so unless you are doing anything special in OnEnable/OnDisable or you need specific components to not update when those objects are out of range, what you are doing is mostly pointless

shell scarab
#

Um are the objects disabled? Cus it won’t send the messages if they’re disabled.

somber nacelle
#

that would be one of the things covered in the link i sent regarding physics messages

meager tinsel
#

Running into an issue, where I'm just trying to get some simple background music to play. I start up the game, but it doesn't go. Anyone have any thoughts as to why?

using UnityEngine;

public class AudioManager : MonoBehaviour
{
    //Set up a variable for playing music.  I'm setting them up to be separate, music and sfx.
    [SerializeField] AudioSource musicSource;
    [SerializeField] AudioSource sfxSource;

    //Now we'll create a variable to keep the music and sound effects in an AudioClip.
    public AudioClip background;
    public AudioClip jump;
    public AudioClip winLevel;

    //This function will set up the background music to play when the game starts.
    private void Start()
    {
        musicSource.clip = background;
        musicSource.Play();
    }
}
somber nacelle
#

any errors in the console? have you confirmed that the clip is set on the correct audio source and that the audio source is active and enabled?

#

also have you ensured that the editor isn't simply muted?

knotty sun
#

and you dont have audio muted in the editor

meager tinsel
somber nacelle
#

your camera does not have an AudioListener component. which means you either have no camera, you manually removed the AudioListener from the camera, or you just added a camera component to some object manually

meager tinsel
#

Gotcha! So, what should I do if I want the music to continue to play to the next level? Since it only plays for that level, and then stops once it loads the next level.

knotty sun
knotty sun
#

Dont Destroy On Load

meager tinsel
#

Ah, gotcha.

#

Running into this error. Trying to set up this script so when the character goes hits the trigger, it plays.

public class FinishLevel : MonoBehaviour
{
    [SerializeField]GameObject victoryTextObject;
    [SerializeField] float levelLoadDelay = 5f;
    [SerializeField] string levelToLoadName;

    //Reference into audio manager script.
    AudioManager audioManager;

    //Setting up sound stuff here.
    private void Awake()
    {
        //Setting up the sound effect here.
        audioManager = GameObject.FindGameObjectsWithTag("Audio").GetComponent<AudioManager>();
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        //Taking advantage of player tag here for collission stuff.
        if(collision.gameObject.CompareTag("Player"))
        {
            StartCoroutine(LoadNextLevel(levelToLoadName));
        }
    }

    IEnumerator LoadNextLevel(string newLevel)
    {
        //Enable victory text.
        victoryTextObject.SetActive(true);

        //Play sound effect.
        audioManager.PlaySFX(audioManager.winLevel);

        //Wait for levelloadDelay number of seconds.
        yield return new WaitForSeconds(levelLoadDelay);

        //Load new level here.
        SceneManager.LoadScene(levelToLoadName);
    }
}
vague radish
#

any one know why triangle is disappearing?

devout parrot
somber nacelle
#

yes because OnTriggerEnter won't be called on a disabled collider

#

so again, what you are attempting to do is pointless

wide terrace
knotty sun
rigid island
#

smells like AI code
..actually I dont even think AI code would fuck this one up tbh

devout parrot
somber nacelle
#

no, it says it will call OnTriggerEnter on disabled MonoBehaviours, but the colliders still need to be active

#

which means the gameobject must be active

meager tinsel
devout parrot
#

So I need to disable just the mesh renderer instead of the entire gameobject? Let me try that and I'll report back.

knotty sun
somber nacelle
#

you are not saving any performance by doing this manually

devout parrot
#

The objects are spawning and despawning as intended. The issue is that the colliders are still loaded, causing performance issues. Also, since every object is dynamic, fustrum culling won't work.

somber nacelle
#

wdym frustum culling won't work? frustum culling will cull anything not currently visible by the camera within the camera's view frustum

#

and if colliders being enabled is causing performance issues, then using trigger messages to enable/disable those colliders won't exactly work because a disabled collider wouldn't have trigger messages called on it

devout parrot
#

I managed to get my culling script working. I switched from a collision sphere to comparing Vector3.Distance. It works flawlessly with good FPS now.

smoky escarp
#

Guys, does anyone know any sane way of enabling nullability per asmdef, that would work in both IDE and Unity?
I know I could turn it on in csc.rsp, but that's for the whole project, I just want to turn it on for specific core projects that are more pure c#

rigid island
#

cant you do that inside the asmdef file already?

#

I'm stil fuzzy on asmdefs

#

google says something about

  "additionalCompilerArguments": [
    "-nullable:enable"```
smoky escarp
#

Thanks mate
I think both of these would work on the entire Unity project, not specific asmdefs
For example, Asmdefs have a nice checkbox for "Allow unsafe code" but nothing similar for nullabiity
Basically it would be ideal if I could plug in "additionalCompilerArguments" into asmdef somehow
Maybe this Build.Props thing can be customized

rigid island
#

oh for the inspector ? yeah tats beyond my skill level 😛

smoky escarp
#

I just hoped Unity has something inbuilt I am not aware of, there is probably some painful way to hack it

proper valley
#

im having issues making this empty game object collide with other objects. i have some tiles which the object passes trough if i have isTrigger set to true in the collider settings, but can detect the collision via script. however if i set isTrigger to false, it collides with the tile and doesnt get detected by the script

#

these are the settings for the tile

rigid island
#

also how do you move the rigidbody

#

oh nvm I see its a kinematic on this empty

proper valley
#

OnTriggerEnter(Collider other)
oh im using this

rigid island
#

you need OnCollisionEnter if its not trigger

#

collisions are very tricky with kinematic

#

you need the other to be at least dynamic for OnCollision to work

proper valley
#
private void OnCollisionEnter(Collision other)
    {
        Debug.Log("clic");
        if (other.gameObject.tag == "tile")
        {
            Debug.Log("Colliding with tile");
        }
    }```
`other` in this case is still a game object right?
proper valley
#

got it, thanks

plush ridge
#

Could someone point me in the right direction to set up handling player turns?

rigid island
#

scroll through indexes

plush ridge
rigid island
#

when in doubt , use the KISS principles 😛

ripe zealot
#

I have a (hopefully) quick question. Is there a way to set a UI horizontal layout 200 pixels away from the scene/camera border at this resolution?

modern creek
ripe zealot
#

gotcha

shell scarab
#

Can someone help me understand materials rq. When are they coppied? I need to make sure I don't get a memory leak (I think that can happen with CoreUtils.CreateEngineMaterial)

So I create a material in object A and pass it to object B through a method, where it stores the material locally to object B. If object A destroys that material, object B's reference will go null because it points to the same material right?

simple void
shell scarab
#

when are they copied/new instances made?

rigid island
#

iirc when you modify the materials properties

meager tinsel
#

Just trying to make an instance of an object moving back and forth between two points, but the gameObject in question keeps going off to the right. Not sure what to do to fix it.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyPatrol : MonoBehaviour
{
    //Creating to the points where the enemy will patrol.
    public GameObject pointA;
    public GameObject pointB;
    //Rigid body for moving the body.
    private Rigidbody2D rb;
    private Transform currentPoint;
    public float speed;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        currentPoint = pointB.transform;
    }

    // Update is called once per frame
    void Update()
    {
        //We're going to set it so the object goes between point a and b, and then reversing it once it hits the right point.
        Vector2 point = currentPoint.position = transform.position;
        if(currentPoint == pointB.transform)
        {
            rb.velocity = new Vector2(speed, 0);
        }
        else
        {
            rb.velocity = new Vector2(-speed, 0);
        }

        if(Vector2.Distance(transform.position, currentPoint.position) < 0.5f && currentPoint == pointB.transform)
        {
            currentPoint = pointA.transform;
        }
        if (Vector2.Distance(transform.position, currentPoint.position) < 0.5f && currentPoint == pointA.transform)
        {
            currentPoint = pointB.transform;
        }
    }
    //This is just something I saw in a tutorial to help visualize the points for ease of use.
    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(pointA.transform.position, 0.5f);
        Gizmos.DrawWireSphere(pointB.transform.position, 0.5f);
        Gizmos.DrawLine(pointA.transform.position, pointB.transform.position);
    }
}
wide terrace
meager tinsel
wide terrace
# meager tinsel Okay, so they're all getting procced, so I'm not sure what the issue is. It's n...

I meant log your values, like transform.position, currentPoint.position, Vector2.Distance(transform.position, currentPoint.position) etc. :)

But in any case,

Vector2 point = currentPoint.position = transform.position;

This seems suspect... currentPoint.position is always exactly equal to transform.position, so not only are your point transforms likely moving, but Vector2.Distance(transform.position, currentPoint.position) is likely always 0 👀

meager tinsel
#

Okay, you were right, it was supposed to be currentPoint.position - transform.position;

Though now it just seems to make it go right, hit the point B, then go left and just...go off course.

wide terrace
# meager tinsel Okay, you were right, it was supposed to be currentPoint.position - transform.po...

I'm not sure... this code does depend on pointA being to the left of pointB. And I think it'll also break if speed is higher than the framerate. It also won't be too happy if point A and B are within 0.5 units of one another. But failing those conditions, you'll need to log the values to see what's going on

Debug.Log(
$@"currentPoint: {currentPoint == pointA.transform ? "A" : "B"}
currentPoint Pos: {currentPoint.position}
transform Pos: {transform.position}
distance: {Vector2.Distance(transform.position, currentPoint.position)}"
);
calm echo
meager tinsel
calm echo
# meager tinsel Oh, uh, neat. Where should I insert that, if it's simpler? I'm not opposed to ...
{
    //Creating to the points where the enemy will patrol.
    public Transform pointA;
    public Transform pointB;
    //Rigid body for moving the body.
    private Transform targetObject;
    public float speed;
    public float totalTime;
    private float currentTime;


    void Update()
    {
        currentTime += Time.deltaTime * speed;
        var t = Mathf.PingPong(currentTime, totalTime);
        targetObject.position = Vector3.Lerp(pointA.position, pointB.position, t / totalTime);
    }

    //This is just something I saw in a tutorial to help visualize the points for ease of use.
    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(pointA.transform.position, 0.5f);
        Gizmos.DrawWireSphere(pointB.transform.position, 0.5f);
        Gizmos.DrawLine(pointA.transform.position, pointB.transform.position);
    }
}```
meager tinsel
#

Okay. I'll give this a shot, thank you!

calm echo
#

edited just now ^

meager tinsel
#

I'm, uh, getting a few errors, gonna try to sort em' out.

spring creek
meager tinsel
#

Oh, it is?

spring creek
#

If you copy pasted the above code, then you missed everything that should come above it.
The using statements I mean

meager tinsel
#

Oh, gotcha

spring creek
#

Ah I see the MonoBehaviour error is on line 1, so yeah. No usings at all

meager tinsel
#

Okay, so that's inside Unity, but getting this error, and the sprite just dropps to the ground.

spring creek
#

Something on line 21 is null.
NullReferenceExceptions are extremely common.
So get to debugging and figure out what reference on line 21 is not assigned

#

Debug.Log or the debugger with a breakpoint would tell you immediately

meager tinsel
#

Okay, I've got it moving.

#

Okay, this part is done. Thank you everyone for your assistance with this.

rigid moon
#

hi i need help a bit im trying to change color on a texture using this, i did create a new texture at runtime, with RGBA32 format but idk why the alpha channel just reduce the value of the color like this

#

i did tick alphaIsTransparency when creating the texture

#

not im not sure why

dusk apex
#

Maybe you should explain what has happened and what should happen instead.

rigid moon
#

oh yea my bad so basically instead of the transparency like this, the alpha doesn't change the transparency but the value instead basically darker/ lighter

dusk apex
#

So if the alpha was zero, what would you see?

#

(I understand that you'd want it to be invisible but what actually happens instead?)

rigid moon
#

it turns black

#

it lost the color completely

dusk apex
#

Can you show the inspector for the material?

rigid moon
dusk apex
#

What shader? Is it a transparent/defuse shader?

rigid moon
#

i dont think so it just this

dusk apex
dawn nebula
#

So in my case, I have a level, and in that level there are entities. Enemies, collectables and structures are entities. If a player kills an enemy, or collects a collectable, or destroys a structure, I need to track that so when the level is reloaded the state is maintained. How should I go about doing that?

As a start I was thinking of creating a Entity ScriptableObject for each type of entity. The Entity SO's would have some entity ID, a reference to the prefab, and any other useful data about the entity. I would then have a EntityInstance SO to represent an instance of that entity in the level. These SOs would contain an entity instance ID, and a link to the Entity SO which should be spawned.

I would also have a EntityManager in the levels which would have a list of these EntityInstance SOs. On scene load, these managers would be given some LevelData, which contains a hashset of IDs that represent the entity instances that are still alive. For each EntityInstance that it has, the EntityManager checks if its ID is included in the hashset. If yes, spawn, if not, don't spawn.

#

This sound good?

inner charm
#

Anyone have a good tutorial on how to create 2D armor overlays on my humanoid sprites?

cold parrot
little meadow
# dawn nebula So in my case, I have a level, and in that level there are entities. Enemies, co...

Seems a little cumbersome, but I might be missing something. I'd say just implement some interface ISaveable on all such objects that you pass a LevelData when you wanna save/load and they write/read what they need there. It might have a Dictionary<id-type,object> or just a HashSet<id-type> if you only care about the "is destroyed/collected" thing, and you'll add data by ID there. Aaand yeah, you'll need a system that assigns IDs to these objects automatically, which might be 10% annoying, but once you have it - you're good for saving whatever you want, I think. 🤔

#

Well, that's the case where you do all the setup on the scene and then you destroy the already collected things... the other direction would be more optimal if you care and better if you wanna randomly spawn those objects anyway... in which case your idea is good, but I think it can go without all those SOs and just have a manager with prefabs, and it can auto-assign IDs and all that as it instantiates them and call some initialize method 🤔

slate imp
#

Hi, I have a voxel game with a bunch of chunks, i'd like to have all of these to be asynchronously updated, like all these chunks dispose themselves if they are too far from the player, but i dont know how to create a asynchronous method without an await inside

knotty sun
#

dont cross post

inner charm
cosmic rain
#

Or a coroutine

#

Or just a condition check in update

slate imp
# cosmic rain async void method should work

Asnc void didn't worked because I did not have await in the method
I used a task.run but now I have another issue... Because I have a bunch of objects and small updates it creates a bunch of tasks and makes it even worse XD

I will need to pool the tasks and computation

cosmic rain
#

If it requires you to use an await, then you're doing something wrong.

slate imp
cosmic rain
#

Though, in unity it would be executed on the main thread, so sort of, yes.

#

You do need an await inside the method of course.

#

You can await Task.Yield() for it to yield until the next frame.

slate imp
cosmic rain
#

Share your code. At this point I've no clue what you're doing.

#

You don't need tasks if you execute it async on the main thread.

slate imp
#

The code is a bit complicated, here is a simplified version :

public ChunkManager{
/// Create a bunch of "chunks" and give them the player camera
}

public Chunk {
  void Update(){
    if(isTooFarFromPlayer()) isVisible = false
    else isVisible = true
  }
} 

#

but i have like 8 000 chunks

cosmic rain
#

Where are you creating the tasks that you're talking about?

slate imp
#

on the update of the chunk

cosmic rain
#

Show the actual code

#

I don't see any tasks in that snippet you shared.

slate imp
proper valley
#
private void PlaceTile(int x, int z)
    {
        Vector3 position = new(x * TILE_SIZE, 0, z * TILE_SIZE);
        GameObject tileInstance = Instantiate(tile, position, Quaternion.identity);

        Tile tileScript = tileInstance.GetComponent<Tile>();
        tileScript.Position = new Vector2(x, z);

        tileDict[new Vector2(x, z)] = tileScript;

    }```
i have this function to create new tile game objects. each tile has also a script attached with fields such as position. I want to make a dict using the pos and Tile object as key-value pairs. however `tileDict[new Vector2(x, z)] = tileScript;` throws an error saying "NullReferenceException: Object reference not set to an instance of an object"
gloomy path
#

does anyone know how to make particles splat onto surfaces? im trying to make a blood splay that prints onto surfaces but I cant find any ways online, any help would be great

cosmic rain
mossy snow
knotty sun
proper valley
slate imp
slate imp
mossy snow
#

I guarantee you, even if this did work, this will have far worse performance than doing it all on the main thread. You might have a chance if you were using Jobs and doing the distance computation there, but I think the whole strategy is fundamentally wrong

#

are your chunks not arranged in some order?

slate imp
slate imp
cosmic rain
#

Not to mention that you're probably gonna get a hell of a race conditions.

cosmic rain
#

To answer your initial question, you can destroy the chunks async on the main thread - over several frames.
It can be as simple as an current iterated chunk int in your manager and iterating the chunks in update with that index. Then you limit how many chunks you want to iterate per frame.

cosmic rain
slate imp
slate imp
# cosmic rain Google. It's too much to explain here.

i seen what is it, i didn't know the term but know what it is.

I don't see much where i would have race condition, because each chunk is looking for himself, the only thing that could change would be the position of the player, and even that would not create an issue, i dont have much shared data

cosmic rain
slate imp
#

Ohhh that way, yeah I understand the issue

floral nacelle
#

Hello I need help with my game design, as everything breaks when I create a build for an android game on my macos. Everything is out of position and not set in the positions I placed them. Can someone please help me with this?

leaden ice
dusk apex
#

(I'm assuming it's a screen ratio / anchor problem.

spring creek
floral nacelle
floral nacelle
marsh carbon
#

Hi, is there a way to find out more about the stack of calls to my functions in a crash dump?
My game crashes at a random moment, while nothing useful has time to be recorded in the log file.

leaden ice
marsh carbon
leaden ice
#

and what do you see in the log file when it crashes?

#

usually a hard crash wouldn't come from any C# code

#

That's more likely to happen from lower down in the engine itself

marsh carbon
#

The person who had the crash bug didn't even have a folder on the way
"AppData\Local\Temp.......\Crashes"

#

everything is written to the log file a moment before the hang and departure

leaden ice
#

if it "hangs" before crashing it might be an infinite loop

visual flare
marsh carbon
#

that's the problem of finding out exactly where, because not only our code is in the project, it can also be code in assets

rigid island
pearl burrow
#

hi guys

#

i added a render texture camera to my project and now i have 3 cameras.
One is an overlay camera that only renders some parts of the UI
antoher is the main camera that renders to a texture
and the 3rd is the camera that shows to the player the rendered texture

now at first all my interaction were off and i found a solution by changing the physics raycaster with a script i found online. The problem is with the overlay camera where the drag event position seems like they changed with the new camera added ( the one that shows the render)
here is a before and after

#

and the script i used before is a simple screentoworld point of the mouse position

#
public void OnDrag(PointerEventData eventData) {
        Vector3 screenPoint = eventData.position; 
        screenPoint.z = planeDistance * 0.8f;
        dragPosition = overlayCamera.ScreenToWorld(screenPoint);
    }
}```
#

it uses ViewportPointToRay instead of screenpointToRay

#

in addition the overlaycamera has a canvas in screen space camera since I'm rendering 3d elements in it

#

hope anyone can help

severe onyx
#

Hi all, I'm trying to update an animation layer's mask via code - How do I do that?

leaden ice
severe onyx
#

my usecase - I have a baseLayer with an avatar mask that masks just the upper half of the body, but I only want this in effect, when the character is holding something with their upper body (eg. a gun). When they're not holding said item. The baseLayer's avatar mask needs to be empty so it plays the regular set of animations without any masking.

leaden ice
severe onyx
leaden ice
#

For example have two layers with different avatar masks. Have one with a weight of 0 and one with a weight of 1

#

Swap them when you want

#

If I understand what you mean

severe onyx
#

Yep that would work, but then I would need to create duplicates of the baseLayer for every type of masking I need. If I can just set it's avatar mask to none during runtime, it'll save a bunch of work

severe onyx
#

that seems like it's an unity editor only thing

#

I don't think I have access to that via the runtime

leaden ice
tropic plank
#

hello i wanted to ask if there is a solution for corner collision with gameobjects,i have been looking and trying to code it,the results are not working as intended

tropic plank
tawny elkBOT
lean sail
#

Cant view that on mobile

tropic plank
weary sail
#

I have a 3d labarynth generator that changes dynamically, but I don't want the walls to be able to change while they're on screen, is there any way to implement this?

knotty sun
weary sail
#

But I have to disable the renderer to hide the wall, then it doesn't work

#

At least I think

lean sail
# tropic plank https://paste.ofcode.org/g5P7MD2kZdX56VNY9AEeGb

You'll have to specify more at what the issue is, rather than "it works when it wants". You have logs but you should print out more useful stuff like what it hit. Printing out just literal strings isnt gonna tell you much. Also this looks incredibly hardcoded

lean sail
weary sail
#

I don't want the walls to be shown or hidden while they are in the camera's view

weary sail
#

I want it to be able to detect if an object is in the way causing the wall not to be visible

#

Actually if anyone has a better idea it would be appreciated as this method makes it incredibly cheesable by just facing away from a wall and walking backwards into it

lean sail
# weary sail I want it to be able to detect if an object is in the way causing the wall not t...

I'm somewhat confused by what you're actually trying to do so heres a link on detecting if something is visible
https://discussions.unity.com/t/how-can-i-know-if-a-gameobject-is-seen-by-a-particular-camera/248
As for your last message, you could just do some physics query or have a trigger collider to let you know which objects are close to the player. Then just dont change walls which are also very close

weary sail
barren hazel
#

Hi my animation events are firing twice and I have no idea why? Any help?

leaden ice
barren hazel
leaden ice
barren hazel
#

This is the event

#

Ive checked, there is only one event in that inspector, its not two overlapping

leaden ice
#

not of the event

barren hazel
#

And I used debug log to verify that there is only one source, a single component on my main player char

barren hazel
leaden ice
#

The entire object

#

perhaps you have two copies of the component for example

barren hazel
#

SoundController is the one receiving animation events, and there is only one

leaden ice
#

which script has the function?

barren hazel
#

SoundController

leaden ice
#

Have you tried Debug.Log($"Animation is called on {GetInstanceID()}", this.gameObject);?

barren hazel
#

Not instanceId, let me see

#

Called twice, same instance ID, and same gameobject name (which I tried earlier)

leaden ice
#

Alright so how are you p[laying this animation clip exactly?

#

Perhaps the animation is quickly starting twice or something

#

what does your AnimationHandler script look like

barren hazel
#

Its unrelated to this essentially, its more for procedural movement of the character, not the animation states itself

#

This is the animation state to transition to it

#

I guesss it could transition to itself?

#

Wait

#

There is a checkbox for that let me disable it and see

#

Ah

#

That'll be it

#

Thanks for rubber ducking for me @leaden ice

leaden ice
#

nice

inner charm
#

Any ideas why my static variables (inside a public class) is not saved between scenes in WebGL builds, while it works just fine (between scenes) in the game preview thing in Unity?

public class StaticItems : ScriptableObject
{
    public bool looted;
    public string itemName;
    public Sprite inventoryIcon;
}

From console we can see that the item is set to true, and then we switch scene back and forth and it's false. Could it be related to this part? Unloading 34 unused Assets to reduce memory usage. Loaded Objects now: 2107.:

interact_with_item.cs: looting the staticItem -  staticItem.looted is:True

intro_test.framework.js:10 Trying to get length of sound which is not loaded.
intro_test.framework.js:10 [PhysX] Initialized SinglethreadedTaskDispatcher.

intro_test.framework.js:10 UnloadTime: 11.255000 ms

intro_test.framework.js:10 Unloading 0 Unused Serialized files (Serialized files now loaded: 0)

intro_test.framework.js:10 Unloading 34 unused Assets to reduce memory usage. Loaded Objects now: 2107.

intro_test.framework.js:10 Total: 2.835000 ms (FindLiveObjects: 0.105000 ms CreateObjectMapping: 0.045000 ms MarkObjects: 1.985000 ms  DeleteObjects: 0.700000 ms)


intro_test.framework.js:10 [PhysX] Initialized SinglethreadedTaskDispatcher.

intro_test.framework.js:10 UnloadTime: 1.665000 ms

intro_test.framework.js:10 Unloading 0 Unused Serialized files (Serialized files now loaded: 0)

intro_test.framework.js:10 Unloading 29 unused Assets to reduce memory usage. Loaded Objects now: 2090.

intro_test.framework.js:10 Total: 2.080000 ms (FindLiveObjects: 0.145000 ms CreateObjectMapping: 0.070000 ms MarkObjects: 1.445000 ms  DeleteObjects: 0.420000 ms)


intro_test.framework.js:10 interact_with_item.cs: staticItem.looted is:False
spring creek
#

Yes, probably due to the unloading. Generally you do not want to mutate SOs. Treat them as immutable as much as possible

spring creek
inner charm
spring creek
wide terrace
#

Quoth the manual:

When you use the Editor, you can save data to ScriptableObjects while editing and at run time because ScriptableObjects use the Editor namespace and Editor scripting. In a deployed build, however, you can’t use ScriptableObjects to save data, but you can use the saved data from the ScriptableObject Assets that you set up during development.

Data that you save from Editor Tools to ScriptableObjects as an asset is written to disk and is therefore persistent between sessions.

spring creek
#

SOs are kinda like prefabs. Just variants of data. Use them when you want to swap in and out presets of data in the inspector

inner charm
spring creek
# inner charm Cool, I'll check out POCO, thanks again!

Keep in mind, to persist between scenes, they need to be referenced. POCOs will be garbage collected like normal when no references exist (like when a scene is unloaded). So look into additive scene loading or DontDestroyOnLoad as well. The object referencing the POCO needs to be in a scene that is not unloaded

inner charm
#

So much new stuff, I just want to create the best game ever (TM) on my first try with unity 😉

wide terrace
oblique spoke
#

I don't think that manual quote is directly related to data persisting in SOs between scene loads.
@inner charm I believe you can avoid SO being unloaded if the next scene is referencing the SO early enough.

wide terrace
oblique spoke
knotty sun
wide terrace
#

Interesting... I feel like the majority of conversations I have witnessed err towards just treating them as immutable data. But I have no horse in this race as of yet. I'll have to poke around some more. I appreciate the insights 🙂

leaden solstice
oblique spoke
wide terrace
leaden solstice
wide terrace
leaden solstice
#

and cleanup issue when you having some weird event stuffs on it, etc

wide terrace
#

It certainly adds up to a very persuasive argument against doing so. I'll have to find some time to experiment a little more and see if I can appreciate any qualities of stateful SOs in practice, but I do think I may be leaning in the opposite direction.

inner charm
#

My intended use for SOs are to check them if certain conditions are met, that for example allows progressions to another scene

#

So when I loot a key, that scriptable objects looted property is true. This means that the key is never displayed again in it's original location, and it also means I can pass a certain door, and progress to the next scene.

This works great in the editor, I can loot the key and move back and forth between the scenes, but in my build it "forgets" the scriptable object when switching scenes ... 😦

#

First line in the manual:
"A ScriptableObject is a data container that you can use to save large amounts of data"

Later in the manual:
"In a deployed build, however, you can’t use ScriptableObjects to save data ..."

cosmic rain
serene stag
cosmic rain
#

No they don't. They are just an asset. Thinking of modifying them is as crazy as thinking of modifying a mesh or a texture asset and expecting the changes to carry on to the next session.

lean sail
#

the whole conversation above was specifically how SO are not to save data in a build also

inner charm
#

But that might just be me being an enthusiastic noob 🙂

lean sail
cosmic rain
young tapir
#

Am I missing something from this? It should be working the same as the others I've got but for some reason nothing happens :/

inner charm
cosmic rain
#

I can guarantee that any similar feature in unreal would also not work as you expect.

simple egret
young tapir
#

Why is there a random } lmao

#

Oh they're just messy nvm

simple egret
#

Yes, but at the time the method runs it might be false.

#

Use logs or the debugger to find out if the code runs

young tapir
#

It runs every frame, no?

simple egret
#

You return; if !isCasting.

#

Did you write this code?

young tapir
#

If it's not casting I don't want it to run, will it still not run when isCasting is true?

simple egret
#

It will run if it's true, that's guaranteed.
But you said that "it doesn't work" so you need to find oit why
It will not overlapsphere if isCasting is false, which is why I'm asking these questions

cosmic rain
inner charm
#

(I also agree that I don't think that this makes unity inferior, however this will give my team more reasons to bash unity)

leaden solstice
#

Argument is that you shouldn’t bash the engine for the reason that you are using features in unintended way 🤔

young tapir
#

(From around 90FPS to like 15)

simple egret
#

Not sure how that's related to the issue in any way, but glad you got it solved
Next time make sure to include more information on what the issue is, though

deft dagger
#

hey im trying to change my projects editor version from 2022.3.8f1 to 6000.0.11f1 but i got this error what should i do ?

#

and i tried before to switch the unity editor version but when i tried to build before i always got a gradle build error

simple egret
sterile cradle
#

why is my audio crackling?? I've already disabled doppler effect tried changing to streamed and yet still this happens I didn't do anything prior but it just started happening (though I did add a lot more objects so that may be why) but otherwise I have no idea.

deft dagger
simple egret
#

Okay, so in that case let's not remove it, so you'll need to install Git on your computer to proceed

deft dagger
#

so do i just install git from my browser and restart unity ?

simple egret
#

Yep, restart your computer in between, because Git makes change to the PATH so it can be executed from anywhere

deft dagger
#

ok i will try and comeback

deft dagger
simple egret
#

There will be more errors on a failed build, check the console for other messages. You'd want to ask that in #📱┃mobile though, if the issue does not come from your own code

deft dagger
simple egret
#

Make a backup and update all

deft dagger
#

do i just continue to use it like normal ?

knotty sun
#

remove it, use the Visual Studio Editor package

deft dagger
#

oh i just realised its not even the normal visual studio

#

i dont use visual studio code

simple egret
#

That's one more reason to get rid of it

#

VSCode uses the Visual Studio Editor package too nowadays

deft dagger
#

i dont even know these codes xd

simple egret
#

Yeah it's package code (TextMeshPro here). Close the project, go to where it's saved and delete the Library folder, and open the project again

#

That will force a full reimport of package contents

deft dagger
#

okk it will take longer though right ? cause its gonna reimport everything again or something

simple egret
#

Yes

deft dagger
#

ok i will try that, thank you a lot again :D

#

i got the same errors even after deleting the library folder

simple egret
#

Ah these don't come from the library folder. If you don't need the TextMeshPro examples, delete the folder mentioned in the error messages

#

Assets/TextMeshPro/Examples_Extras

deft dagger
#

yeah i dont think i need them i just use tmp for the ui stuff

simple egret
#

Yeah when you use it for the first time it asks you whether you want to import examples along with the base stuff

deft dagger
simple egret
#

It's a sound engine that can replace the one Unity has built-in

plain moon
#

I have issue with scrollbar on IOS devices. In WebGL and android it's works fine but in IOS it's laggy and jittering
But it's still default Unity Scroll

balmy dove
#

without using the dampen settings et al, exactly how were you supposed to make it such that the cinemachine virtual camera rotates with the follow target focused in the center?

near birch
#

guys i am having issues with unity

#

like this

#

it is still loading

narrow sphinx
#

Anyone have any good design patterns they use for save/load systems? In particular, how parts which rely on the save state get their references.

deft dagger
fleet gorge
fleet gorge
#

at the start of the game i call Load() in my save system

near birch
#

none

narrow sphinx
fleet gorge
#

but syntax is very clean

near birch
#

dawg 😭 🙏

fleet gorge
#
SaveSystem.variables["username"] = "uldynia"

and it will get written to the save file next time

fleet gorge
# near birch

i dont have access to your pc so idk how to help you

#

restart your pc

near birch
fleet gorge
#

uh if your unity is on an external drive it probably has issues

fleet gorge
# near birch

broad statement hold on imma see where the logs folder is

near birch
#

you mean editor logs?

fleet gorge
#

idk if its a hubs issue or editor issue

deft dagger
fleet gorge
#

not really

#

i never published ios before

near birch
#

what is mandetory ASLR?

deft dagger
fleet gorge
deft dagger
#

i want to publish on android and windows

fleet gorge
fleet gorge
#

users here said that I should keep the file handle open.

frigid turtle
#

Hello guys, how can i update Google Play purchases? Is it enough to update Unity com.unity.purchasing package?

tiny mountain
#

Any idea why this gives this error? Using the .jslib plugin at Assets/Plugins/WebGL, trying to call the function from that plugin

leaden ice
tiny mountain
#

used this same plugin in an older version of unity for another project

#

called it the same way

#

for some reason this gives an error now

leaden ice
#

i.e. by commenting them out one by one (is it all of them)?

tiny mountain
#

rebuilding takes a lot of time, but if that's the only option alright

leaden ice
#

I guess I'm trying to see how you determined it was exactly these functions causing the issue

tiny mountain
#

also sorry if i sound rude, did not mean that

leaden ice
#

no worries, didn't feel any rudeness

leaden ice
rigid island
tiny mountain
leaden ice
tiny mountain
#

it was this thing

leaden ice
#

oof

swift falcon
#

anyone know of any .net libs i can use to make a vitual audio input from a unity application, or even a .net lib to make one myself?

near zephyr
#

can someone please help me, im currently making a game, but i have absolutely no knowledge of coding so i just watch some tutorials, but now i want subtitles to show when i walk trough an audio trigger but the subtitles wont show up

eager yacht
# tiny mountain it was this thing

Something that may help you in the future:

  • Open your jslib/etc in vscode
  • Ctrl+Shift+P > Change Language Mode > JavaScript
  • Now you'll have some basic JS coloring/syntax/partial error help
rigid island
weak perch
#

Hi, I have an object which acts as the collider and rigidbody for a gameobject but doesn't hold the main script. It's de-parented on start. What would be the best way to link a collision on that object back to the object with the main script?

rigid island
#

its complex library but powerful

weak perch
weak perch
#

Ah no worries

swift falcon
weak perch
rigid island
#

though frankly from your question you should wait a while before doing networking

swift falcon
weak perch
rigid island
rigid island
swift falcon
weak perch
#

Basically i need to access the manager script from the sphere when it collides because i need to send data from the object it collided with to the manager to be stored in a network variable

#

But i dont want to just have a script with a reference on the sphere because thats not great

rigid island
#

yes you do that with proper referencing

rigid island
#

use as many scripts as you need

#

anything else is nonsense complexity added on

weak perch
#

Fair enough you're right i am overcomplicating it

rigid island
knotty sun
chilly surge
# eager yacht Something that may help you in the future: - Open your jslib/etc in vscode - `Ct...

A classic case.
Most people eventually will have to write some JS at some point in their career, and a lot of people go "okay I don't care about JS, this is just an one off task, I'll just raw dog it with notepad and zero tooling" and wonder why they have a bad time and blame it on "JS bad."
There are good reasons why code channels here require people to have IDE set up to receive help, because practically any programming language is terrible to work with without tooling, JS or else.

modern creek
#

I'm building a hex-based world where some tiles have integer based movement costs (usually just 1 or 2). Should I use NavMesh for this or just roll my own pathfinding?

#

(I've never used navmesh)

rigid island
#

probably your own with A* if you need precision

#

just dealing with tilemap though is annoying

modern creek
#

Yeah.. I think I previously wrote some hex based nav code but.. I remember it being a big pain in the butt

rigid island
#

the redblobgames snippets were kinda difficult for me to adapt to unitys tilemap coordinates on hex

modern creek
#

Like having to convert to a custom coordinate system.. cubal? cuboid? from some website

#

redblobgames was it, I think

rigid island
#

yes redblob is goat

#

just a pain how unity did their tilemap system the formulas dont translate 1:1

modern creek
#

yeah

#

I'm not sure I'll use unity's tilemap system.. for this game the world will be a pretty small set of hexes and won't change so.. tilemap might not be the right hammer for this nail

rigid island
#

if you are able to make your own would be easier

modern creek
#

oh yeah I vaguely remember writing this

rigid island
#

I just...too much math for me

modern creek
#

and basically just being like "🤷‍♂️ well redblob says it works"

#

no idea what that chunk of code does tbh

rigid island
#

hah yea

swift falcon
# rigid island you might need another plugin with this though

so im finding alot of things, it will allow me to make unity work with virtual audio devices and be able to select them, however it cannot make them, so ether ill need to make my own driver OR i need to find a drive and a .net lib that allows me to make as many as i like in this case i dont see anyone useing more then 6. but ill also need to be able to make more as well as ill need to be able to make virtual outputs so that other applications can feed in to this program there for allowing me to make my own custom DAW, onec that small little issue if figured out e.g how i want to do it, then ill be set.

rigid island
modern creek
#

haha "black god damned magic"

#

yeah maybe I'm afraid to open this can of worms again, i dunno

rigid island
modern creek
#

yeah

#

in this (year-old?) chunk of code i wrote, it's basically that:

#

looks like something that can take a tilemap x and y and convert to/from the cube/axial Q/R/S

#

i remember it busting my head but.. theoretically? once I do the hard work of A* and conversion from x/y to q/r/s it "should" be easy to consume

rigid island
#

A* is probably the easier part tbh

#

I was doing point top btw

modern creek
#

point top?

rigid island
modern creek
#

oh right, orientation of the hexes

#

yeah it seems like i was doing point top too

#

this project i'm working on now will be in 3d, but the "map" will be 2d internally.. probably will do cinemachine and isometric

#

the models i have came with animations and everything

rigid island
#

ala xcom?

#

cause thats one of my fav games

modern creek
#

i think so? i can't exactly recall xcom, I didn't play it

#

remind me again - turn based strategy sorta thing?

rigid island
#

grid turn based action strategy game

modern creek
#

yeah

lyric basalt
#

its remind me Ratch & Clank

modern creek
#

so this game is actually just going to be a web demo of a board game

#

the assets come from a video game that didn't succeed like a decade ago

#

i probably ought to not share it though 🙂

#

... and like that poof he was gone

#

🙂

rigid island
#

I feel exclusive to have seen the sneak peek UnityChanLOL

modern creek
#

in any case! I suppose i'll have to warm up my brain for the hex stuff again.. seems better than using navmesh

#

ha

#

it's on a pretty short timeline and it'll be public, so.. I'm sure you'll see me post about it from time to time again 🙂

rigid island
#

navmesh just feels clunky for a hex but ig it can work

#

its a* anyway at the end of the day

modern creek
#

i'm trying unity6 for the first time, given URF is irrelevant for this, and the client wants it purely in web

#

apparently unity6 has some great improvements to "Unity Web" aka WebGL

#

We'll see. 👀

rigid island
#

Oh yeah heard that too. Looks promising

modern creek
#

I'm sorta diving all-in on this one.. the project will be with 3d assets, animations, etc.. if Unity6 can handle this all and get me 30+ fps and a reasonable load time.. I'll be impressed

#

Although tbh more with myself since I'm a 2d game dev, this 3d shit is all new to me. I'm a dinosaur. 😛

rigid island
#

besides the assets its not that much different in unity thankfully

modern creek
#

Yeah, just a lot of stuff to learn.. stuff I'm "familiar" with but not an expert in.. Like, I'd say I know my way around the UI framework pretty well.. but meshes, cinemachine, and rendering is all stuff I haven't really needed to really dive into yet so.. it'll be a journey.

cunning burrow
#

LoadSceneAsync isn't working for me...

leaden ice
#

also why is that first coroutine... not actually yielding on anything?

#

Doesn't seem necessary for it to be a coroutine

cunning burrow
#

Well I'm not sure why but I thought it needed to be in one, didn't change anything tho. It just instantly loads the scene

leaden ice
cunning burrow
leaden ice
#

Show the rest of the code

#

!code

tawny elkBOT
cunning burrow
#

in update it checks the progress of a bunch of data requests handled by the data manager, if all the checks pass and all the data is loaded it waits for the animation to get to the end before loading the next scene

if (!LoadingAnimator.IsInTransition(0) && LoadingAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime > LoadingAnimationReferenceTime + 0.56f)
            {
                LoadingAnimationReferenceTime = -1;
                LoadingOperation.allowSceneActivation = true;
            }```
#

@leaden ice

#

there's not much else to the code idk what else you are looking for

#

the loading screen takes time to fetch the data from the server, so the line
LoadingOperation.allowSceneActivation = true; is only called once all that and the animation finish

leaden ice
#

I have no idea when this is running

cunning burrow
#

in update ...

leaden ice
#

Well time to Debug.Log the animation reference time and what normalizedTime is coming out of your animator etc

#

(you could/should probably use an animation event for this)

cunning burrow
#

umm no all of that was fine. I had SceneManager.LoadScene there before, not to mention there are other checks before it, the game scene shouldn't be loading instantly, the async thing is just not working idk why

#

and the animation is fine, it is very specific to have a smooth transition

#

alright I fixed it

#

just don't put LoadSceneAsync in Awake

quaint crypt
#

how can i make onvalidate run only after a value has been completely changed in the inspector for an int let's say, and not while typing the integer into the inspector field, thus making weird valiudations. e.g.: i want to enter 123, but it starts validating after i've typed 1

steep herald
#

In a project where scenes are never loaded additively, what's a working flow to clear all data from a static class whenever loading a new scene? My problematic constraint is it has to be prior to awake on any object. Hooking onto sceneloaded fires after awake on monos in the scene

I understand I could manage with a mono singleton but I'd like to know if it can be done differently

leaden ice
steep herald
weak perch
#

hey, could someone give me a hand with structuring an item system? right now i'm using a system with abstract classes. it has a scriptable object base with a total uses variable and an abstract use method. each different item works off of this, but the problem is that each method requires different parameters for the use method

#

i want to be able to randomly pick them so they should all have the same base class

leaden ice
#

Inheritance usually ends up being an antipattern for an item system

#

It's usually better do go with a composition/tagging system

weak perch
#

how would that work? ive not heard of that before

leaden ice
#

Imagine you have:
Item < Weapon < Sword < WoodenSword
< Armor < Shield < WoodenShield

How do you check if a given Weapon is made of wood? Or if an item can be held? This structure doesn't help us

Instead just make something like:

public class Item {
  public string name;
  List<ItemComponent> components;
}```
or 
```cs
public class Item {
  public string name;
  List<Tag> tags;
}```

Tags can be something like:
```cs
public class Tag {
  public string name;
  public float value;

  public bool ValueAsBool => value != 0;
  public int ValueAsInt => Mathf.FloorToInt(value);
}```
#

Then you could have a "damage" tag, a "wooden" tag, a "holdable" tag

#

etc

#

durability, whatever you need.

#

youi can even make these things serializable so you can set them in the inspector

#

and this doesn't force any particular item to have any particular set of tags

#

a health potion doesn't need a "damage" tag

weak perch
#

ahh i think i get u

leaden ice
#

but it might have a "consumable" tag and a "healing" tag

weak perch
#

and you could have methods inside those tags that dictate how you'd do that?

leaden ice
#

well the method wouldn't be in the tag

#

but your player might have an Attack() method that does something like:

if (equippedWeapon.HasTag("Damage", out float amount)) {
  DealDamage(amount);
}```
#

in this scenario Item has a function that is checking if a given tag exists and getting its value if it does

#

You can also do some fancy stuff with enums and delegates in a modified version of this if you want to get fancy

weak perch
#

this is very clever i really like this

#

especially because it will save me loads of time as im working with networks

leaden ice
#

yeah you'll want to set this all up to be serializable then ofc

weak perch
#

so for items that spawn projectiles i can use one base method for separate server/client objects

weak perch
#

im not going to have loads of items its a mario kart type system

leaden ice
#

Ah I see

weak perch
#

lots of variations basically

#

but this is perfect tysm

weak perch
#

say a 'boost' tag also had the boost amount and duration

#

or the 'spawner' tag had the prefab it needs to spawn etc

queen saffron
#

Hello, i'm having this bug upon swapping between scenes. The first "chess" plane represents the main scene ,3 axis scene represent the secondary scene which i intend to translate between main to secondary.
in the runtime, upon a top click on the "Enter Editor Mode" which aims to move to secondary scene ... it makes the scene 1 infused with scene 2... why is that happening?

somber nacelle
#

are you perhaps loading the scene additively instead of in single mode?

queen saffron
#

wait it actually is lol

#

i'm dumb haha

spare island
#

and treat those like parameters, it might get messy though

#

Usually in those kinds of situations I'd be using a separate component on that object

queen saffron
#

how can i store a game object and not let it destroyed upon loading a new scene? i put it in a singleton class but it resets with new scene

queen saffron
#

i did use this function on the selected gameobject but i think i could be using it wrong

#
public class LoadEditor : MonoBehaviour

{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    public void LoadEditModeScene()
    {
        if (GameManager.Instance.activeGameObject != null)
        {
            DontDestroyOnLoad(GameManager.Instance.activeGameObject);
        }

        SceneManager.LoadScene("Editor");
    }

    public void UnloadEditModeScene()
    {
        SceneManager.UnloadSceneAsync("Editor");
    }

}
#

I'm using a button to trigger LoadEditorModeScene where i hoped it would store gameobject and load the scene called "Editor"

dusk apex
queen saffron
#
public class GameManager : MonoBehaviour
{
    // Static instance for Singleton
    private static GameManager _instance;

    // Public property to access the instance
    public static GameManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = FindObjectOfType<GameManager>();

                if (_instance == null)
                {
                    GameObject singletonObject = new GameObject();
                    _instance = singletonObject.AddComponent<GameManager>();
                    singletonObject.name = typeof(GameManager).ToString() + " (Singleton)";
                }
            }
            return _instance;
        }
    }

    // Prevent the Singleton from being destroyed when scenes are loaded
    private void Awake()
    {
        if (_instance == null)
        {
            _instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else if (_instance != this)
        {
            Destroy(gameObject);
        }
    }

    // List of game objects
    public List<GameObject> gameObjectList = new List<GameObject>();

    // Active game object
    public GameObject activeGameObject;

    // MORE nonrelated code
}
dusk apex
# queen saffron ```c# public class LoadEditor : MonoBehaviour { // Start is called before t...
    public void LoadEditModeScene()
    {
        if (GameManager.Instance.activeGameObject != null)
        {
            DontDestroyOnLoad(GameManager.Instance.activeGameObject);
            Debug.Log($"Set active object to DDOL {GameManager.Instance.activeGameObject}");
        }
        else
        {
            Debug.Log($"There wasn't an active object to DDOL");
        }

        SceneManager.LoadScene("Editor");
    }```Try to log if there simply wasn't an object to set to DDOL
#

Else you're likely manually destroying it somewhere

queen saffron
dusk apex
queen saffron
dusk apex
#

The inspector for your singleton manager instance likely isn't the same as that which was printed

#

This looks very unconventional ```cs
// Public property to access the instance
public static GameManager Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType<GameManager>();

            if (_instance == null)
            {
                GameObject singletonObject = new GameObject();
                _instance = singletonObject.AddComponent<GameManager>();
                singletonObject.name = typeof(GameManager).ToString() + " (Singleton)";
            }
        }
        return _instance;
    }
}```
#

Why do you need to find the object if it's sure to be in the scene and would have set itself to the instance on awake?

#

Do you've got race condition issues?

#

Try to avoid accessing external objects in Awake methods to avoid the race conditions (assuming something has attempted to access the manager before it sets itself as the instance)

#

In fact if you access the manager instance before it calls it's awake, it'll not set itself as DDOL because the instance check in it's Awake would not ever be null.

#

tldr: if instance is not null when awake is called, the game manager will not be made DDOL

#

Log this to see if the manager was made DDOL cs // Prevent the Singleton from being destroyed when scenes are loaded private void Awake() { if (_instance == null) { Debug.Log($"{this} has become the manager and was set DDOL"); _instance = this; DontDestroyOnLoad(gameObject); } else if (_instance != this) { Debug.Log($"{this} was Destroyed because a manager already exists"); Destroy(gameObject); } }

queen saffron
dusk apex
queen saffron
# dusk apex Log this to see if the manager was made DDOL ```cs // Prevent the Singleton ...
Active GameObject:
  None
Current Main Tool:
  Tool: none
Current Transform Tool:
  Tool: none
Current Brush Tool:
  Tool: none
2D Counter: 0
3D Counter: 0
Draw Line Color:
  Color: RGBA(0.000, 0.000, 0.000, 0.000)
Draw Line Material:
  None
Game Objects:
  None
 has become the manager and was set DDOL
UnityEngine.Debug:Log (object)
GameManager:Awake () (at Assets/Source/Script/GameManager.cs:52)
UnityEngine.GameObject:AddComponent<GameManager> ()
GameManager:get_Instance () (at Assets/Source/Script/GameManager.cs:25)
BrushKit:Update () (at Assets/Source/Script/BrushKit.cs:44)

dusk apex
#

My advice would be to not set the instance anywhere else other than in the Awake method and that nobody should be attempting to access the manager (or any other object) in their Awake - relative to external objects.
They should only be modifying values on themselves in Awake with no dependency on other objects in the scene
Use Start to avoid race condition

queen saffron
#

ahh so probably it's all behind the get functionality emm

#

aight thanks man for the assistance i will look more into get later on.
but just make things clear,
the whole issue is probably related to Wake or the get?

#

cause you just made me more confused about it sry

dusk apex
queen saffron
#

i just replaced awake with start but it initalized the values from the beginning

queen saffron
# queen saffron

if you notice in the editor view, after i added a game object called cube, i have a 3d counter that increased and kept the same after scene swap

dusk apex
#

The singleton should assign itself as the single instance in Awake. No one should be calling the manager instance in their awake method.

#

My concern is with this being none after cube zero has already been set as DDOL (it's the active game object) - assuming you're showing the inspector after the log message .

queen saffron
#

weird thing...
cause this is how i initalize it with these values
and after adding cube 0 and swap i get this while other values are still preserved

queen saffron
#

one second

dusk apex
#

I'm not sure which object being access threw your nre but the game manager with the missing object references indicates that the object was destroyed. When do you call LoadEditModeScene?

queen saffron
#

i called it upon triggering a button "Enter Editor Mode"

#

the follow error log message is resulted from attempting to print out the singleton class

dusk apex
queen saffron
#

yeah the cube doesn't appear cause it is destroyed somewhere

dusk apex
#

Maybe don't load a new scene that very frame after setting DDOL

#

I'm assuming you aren't destroying the cube anywhere

queen saffron
#

would you think that probuilder runtime objects are destroyed automatically upon scene swapping?

#

like i need to override it

dusk apex
# dusk apex Maybe don't load a new scene that very frame after setting DDOL
    public void LoadEditModeScene()
    {
        if (GameManager.Instance.activeGameObject != null)
        {
            DontDestroyOnLoad(GameManager.Instance.activeGameObject);
            Debug.Log($"Set active object to DDOL {GameManager.Instance.activeGameObject}");
        }
        else
        {
            Debug.Log($"There wasn't an active object to DDOL");
        }
        StartCoroutine(LoadSceneNextFrame("Editor"));
        //SceneManager.LoadScene("Editor");
    }
    private IEnumerator LoadSceneNextFrame(string scene)
    {
        yield return null;
        SceneManager.LoadScene(scene);
    }```
queen saffron
#

i just tried the new LoadEditModeScene but 😢

#

the debug is still fairly printing the game object (cube 0) as previous

#

Set active object to DDOL Cube 0 (UnityEngine.GameObject)

dusk apex
#

Undo the changes to LoadEditModeScene. Do you've got any scripts that would destroy the cube other than loading a new scene?

queen saffron
#

there is the delete operation but i never used it

#

using this button "delete"

dusk apex
#

Alright, try simply not loading a new scene and see if the active object (cube) is actually made DDOL

#
    public void LoadEditModeScene()
    {
        if (GameManager.Instance.activeGameObject != null)
        {
            DontDestroyOnLoad(GameManager.Instance.activeGameObject);
            Debug.Log($"Set active object to DDOL {GameManager.Instance.activeGameObject}");
        }
        else
        {
            Debug.Log($"There wasn't an active object to DDOL");
        }
        //SceneManager.LoadScene("Editor");
    }```
#

Check the hierarchy to verify

dusk apex
queen saffron
dusk apex
queen saffron
#

it doesn't appear also in hierarchy but it does in the singleton

dusk apex
dusk apex
# dusk apex ```cs public void LoadEditModeScene() { if (GameManager.Instance...
    public void LoadEditModeScene()
    {
        if (GameManager.Instance.activeGameObject != null)
        {
            DontDestroyOnLoad(GameManager.Instance.activeGameObject);
            Debug.Log($"Set active object to DDOL {GameManager.Instance.activeGameObject}", GameManager.Instance.activeGameObject);
        }
        else
        {
            Debug.Log($"There wasn't an active object to DDOL");
        }
        //SceneManager.LoadScene("Editor");
    }```Try this and single click on the log mesasge. Which object in the hierarchy is highlighted?
queen saffron
#

it highlight this object here

dusk apex
#

Set it's parent to null before calling ddol (or you may need to redesign some stuff)

queen saffron
#

i see

#

well thanks to you i would not think about it
really appreciate it

#

i will modify it accordingly in the morning, i will update you about it
it's nap time haha

#

the issue about it all that i don't want to destroy objects but keep them all. Even after scene swapping, cause my project is aim to help interior designing using VR and meshs shape manipulation

dusk apex
#

Maybe have Objects (the root scene object) be DDOL and simply have two sets of Meshs: Persistent and Non Persistent
Where you'd manually destroy the children of non persistent on loading a new scene.

queen saffron
#

so storing the game objects between scenes swap is a must, unless i preserve each game object value to the singleton and rebuild each game object upon returning to main scene

queen saffron
#

glad to know that the whole issue is not about singleton class itself

#

anyway, really appreciate the help and assistance and thanks for your time.
goodnight!

tall heath
#

Does anyone know if this is a good way of instancing UI materials? I'm thinking it might leave some cache, but overall, is it a good way to do this?

#

I'm using URP canvas shader graph

spring basin
#

Or is it a different material?

#

you could probably try using ProfilePicture.material.mainTexture and flag _texture as your main texture in your shader

#

you won't have to create a new material

#

ProfilePicture.material.mainTexture = GetSteamImageAsTexture(ImageID);

tall heath
spring basin
#

yea you should be able to mark a texture field in your shader graph as _mainTex

#

i think its _mainTex? or _mainTexture

tall heath
#

Thank you so much, I’ve been asking around for this, lemme test it

dawn nebula
#

Is that improper?

spring basin
#

haven't had a usecase where I needed to create a new material instance

#

usually i just access the component and its material attached and modify its properties

tall heath
#

It doesn't work, I forgot to tell you but I need it to have different textures but in the same material

#

So I don't want the pfp to be like this

#

But instead like this:

tall heath
#

Thanks

#

But again, by doing this, it does create cache. Is this problem really unavoidable?

tall heath
#

Thanks for your guy's help!

vale bridge
#

Is there a way to preserve data after modifying a scriptableObject class? Or am I stuck with having to update the SO values every time I make a change to the ScriptableObject class?

#

Does this mean that people often keep something like a spreadsheet to read into SOs?

dawn nebula
#

Otherwise you need to keep track of them and destroy when needed.

vale bridge
spring basin
#

if so, there's a provision for that

#

[FormerlySerializedAs("oldFieldName")]

vale bridge
sleek bough
sleek bough
spare island
#

I didn't know you can instantiate them

errant flame
#

Hi, I have a simple question,

The application that exports the package we created for the Unity asset store , it asks if it is dependent on any asset store asset, but does it automatically get my dependency on newtonsoft json automatically from the manifest file in the package manager?

Or do I need to add that dependency while uploading my package from somewhere?

spare island
#

to avoid every asset that uses it importing it's own version of json

knotty sun
errant flame
#

@spare island @knotty sun thanks a lot

faint hornet
#

Hey everyone.
quick question about async await.

I am trying to structure a part of my games "style" to have async functionality to perform stylistic behavior and i want these features to be indipentant from the actual game loop.

my question is, is there a way to make sure the regular game logic isn't affected by the async function/s?

spare island
#

give an example maybe of what youre trying to do

faint hornet
# spare island you need to be a bit more specific

lets keep it simple. so imagine the only game loop thing is just a timer that always needs to be updated regularly. now for the example of the async functionality, clicking the mouse button will begin to trigger async await functions.. lets say 3 seperate, one following the other after completion ( time based ). now how do i ensure that the game clock isn't awaiting the other async functions but only the async functions listen to eachother?

spare island
faint hornet
#

how do i prevent the clock from 'stopping' during a async function in the background

spare island
faint hornet
#

@spare island

Game loop: constant clock ticking up, and never stops for anything.

OnMouseClick : asyncFunc1 => asyncFunc2 => asyncFunc3;

during mouseclick async functions, game clock is still up-ticking reguardless of async functions executing or not.

#

^^^ this is the functionality i want. how do i make sure this never fails

spare island
#

why would the clock stop

faint hornet
# spare island why would the clock stop

idk, maybe if the game loop becomes more "intertwined" with complexity, it might start affecting some of the game loop functionality since the game loop is indirectly tied to all user behavior. my question is how do i make sure that the async functions never stop game loop functions but only stylistic functions.

spare island
#

are you sure you're not wanting to use coroutines?

faint hornet
# spare island are you sure you're not wanting to use coroutines?

you make a good point, i guess i'll redirect my question: can i make sure my async functions behave similarly to coroutines?

the reason i don't want to use coroutines is because i will have to chain complex functions together depending on the situation, and async is just a much better option for that.

cold parrot
spare island
#

the problem with async is that it doesn't play well with the unity event loop

cold parrot
#

Unless you do heavy lifting in those tasks nothing will block

faint hornet
spare island
#

like debug.logs tend to be completely skipped

cold parrot
faint hornet
spare island
hard estuary
cold parrot
faint hornet
quartz folio
spare island
quartz folio
#

I have never seen them be skipped in an async method

spare island
#

i had an issue a while ago where i was trying to debug some async functions and for some reason they just never printed

#

but i found out later that the method was being run the whole time

#

just the logs weren't printing

faint hornet
#

this has happened to me as well

spare island
#

glad to know im not crazy

cold parrot
#

I smell async void

hard estuary
quartz folio
#

You can also use Debug.Log off the main thread iirc

mossy snow
#

you can

faint hornet
#

within the block of code

spare island
#

i was way less experienced when i had those issues

faint hornet
#

why would you ever use async void? whats a good example

mossy snow
#

I'd guess you had debug logs (threadsafe) trying to log stuff only available on main thread, which would throw an exception. And if it's in an async void where you aren't catching those exceptions, it would just look like the method didn't work until you removed the logging

spare island
#

i wonder how many times i used async void

faint hornet
#

lol

hard estuary
quartz folio
#

async void is likely not a problem, it's not awaiting a Task that is

faint hornet
#

alight guys/girls. goodnight. thanks for the help

spare island
#

i have quite a few async voids

#

and logs are working in those i believe

cold parrot
spare island
#

should they all be tasks

quartz folio
#

You really should be using a cancellation token in almost every async method

#

and passing the destroyCancellationToken to it at the very least

cold parrot
quartz folio
#

The exceptions in async void will be captured by Unity—unlike what happens in other .NET applications. It's a fine way to do fire and forget.

cold parrot
#

Best is to never use void

spare island
#

im getting mixed messages

#

wait so when an exception happens inside of an async function it never gets collected?

quartz folio
#
Example();

...

async void Example() {
  await Task.Yield();
  throw new Exception("Example");
}```
#

what you need to be worried about is any case where you fail to await a Task

#

if you do that, then no exceptions will be printed to the console

spare island
#

oh so thats why i was always wrapping everything in try catches

#

well not everything but the async stuff im running

quartz folio
#

and Anniki is right that any async function will continue to run and unlike coroutines will escape play mode if you don't stop/cancel them

cold parrot
spare island
#

i've been manually adding a check to see if the app is still running and stopping the task if it isnt

quartz folio
#

and just generally learn how cancellation tokens work

cold parrot
spare island
#

i'm just wondering because i'm going to have to change every time i used async void

#

and im going to have to learn what a cancellation token is and how to use it

cold parrot
spare island
#

im importing it atm

cold parrot
#

Read its docs!

#

They are quite short

spare island
#

for example with LobbyService there is no cancellationtoken argument

#

I guess i dont understand how im meant to use it fully even looking at the examples

#
Lobby lobby = await LobbyService.Instance.JoinLobbyByIdAsync(ID);
craggy pivot
#

What the heck? What does -0 mean?

civic isle
craggy pivot
#

Touche

knotty sun
#

just like any other number

craggy pivot
#

I love programming 😍

#

It probably doesn't interfere with math though right?

knotty sun
#

no not at all

craggy pivot
#

And comparisons?

knotty sun
#

float comparisons should never be for equality anyway, so as long as you dont do that you're ok

craggy pivot
#

Yeah, currently only using < for this variable

cold parrot
spare island
#

wait how would i use multiple cancellation tokens though

cold parrot
#

To support cancellation you typically have to go nothing more but in complex functions or where a task you are awaiting doesn’t support cancellation you check the token manually and throw or return when cancellation is requested

cold parrot
#

That allows you to combine tokens

spare island
#

so like put it in a while loop?

cold parrot
#

you should however keep your token sources few

spare island
#

well since i hav ethe power to do so now i'd like to have a timeout for joining a lobby

#

i'd need a second cancel source for that

cold parrot
#

The cancel exception then breaks out of the task

cold parrot
spare island
#
                Lobby lobby;
                lobby = await LobbyService.Instance.JoinLobbyByIdAsync(ID);
                SetLobby(lobby);

so for this how would i wrap this await to wait for it to be done?

cold parrot
spare island
#

theres no parameter for a cancellationtoken

cold parrot
#

What’s does it return?

spare island
#

Task<Unity.Services.Lobbies.Models.Lobby>

#

something like that

#

can i just put it in a while loop and check its status

cold parrot
#

No

#

The result is only available when the task is completed

spare island
cold parrot
spare island
#

i believe thats for passing things like a password to join but i can check rq

cold parrot
#

Yes, nvm

spare island
#
                Task<Lobby> task = LobbyService.Instance.GetLobbyAsync(ID);
                while (task.IsCompleted == false)
                {
                    if (this.GetCancellationTokenOnDestroy().IsCancellationRequested)
                    {
                        throw new OperationCanceledException();
                    }
                    await Task.Yield();
                }

                if (task.Result != null)
                {
                    SetLobby(task.Result);
                }

it looks like it would work but it also looks stupid

cold parrot
spare island
#

this guy came to the same conclusion i did

#

checking if application is playing

cold parrot
spare island
#

and then this guy came to the conclusion you did

cold parrot
#

Unitys async APIs aren’t the grandest

spare island
#

im guessing the lobby service must handle cancellation itself

cold parrot
#

Async in unity suffers a lot by loads of legacy event based APIs and defaults to using coroutines. This makes code very ugly

#

Unitask aims to smooth over those

spare island
#

UniTask doesn't seem to cover the Lobby API

cold parrot
#

Ofc not, unitask is generic and can’t fix bad APIs just incomplete ones

spare island
#

its like im watching history repeat itself

#

as i go through this year old thread

#

doesn't seem like theres an official solution to it

cold parrot
#

There is a chance that the api is designed in a way that cancels are unnecessary or undesirable

spare island
#

i dont currently have any strange behavior happening that i think i can attribute to runaway tasks

#

the game does basically collapse if i load a scene in the wrong order but i think thats just because of how i have it set up

#

very stronk code

spare island
#

i know that

#

maybe because of the way lobby works its not even possible to cancel it once the request is sent

#

and ill probably prefer using coroutines to just avoid the mess of async altogether

cold parrot
spare island
#

using them in situations where i can to avoid having to make sure they get destroyed

spare island
#

at least in terms of support

#

i will probably go and convert the voids to Unitasks though

wind meteor
#

Good morning everyone, or whatever time it is for you. I created a third person camera script. The rotation works fine, so my next step was implementing camera colission. For that, I used a RayCast that shoots forward out of the camera to the player and checks if there is an object inbewtween. But the RayCast only returns true if there is a whole object in its path. As you can see in the video I added for further clearance, the camera colission works on the thin wall, while working not working on the big cube. I was wondering if there is an alternative to RayCasting that has the same or similar approach. I know CheckSphere etc exist, but there isn't a version that works like RayCast.

lean sail
spare island
#

third party repos like this on github are liable to just stop being updated

#

it is open source which reduces that risk a bit but its still there

wind meteor
spare island
wind meteor
lean sail
lean sail
spare island
#

'dont re-invent the wheel'

wind meteor
#

Well, you've convinced me. After implementing Cinemachine it's working as it should.

plain moon
knotty sun
plain moon
#

To get ready to use solution

deft dagger
#

hey guys, when i switch my unity editor version i always get this message and i normally press yes but then i start getting gradle build errors when im trying to build, so is there anything i should do ? or is there a fix ?

cold parrot
jagged plume
#

Though yes, it will take a bit more time than if one was to import everything

#

I mean, going even further in the reasoning, why make games in the first place if similar games already exist

#

because we like doing

#

making the stuff

#

learning about it

#

having meaning in life through hardship

#

so yes, do re-invent the wheel

#

But again, it depends what one cares about

knotty sun
#

I would echo that, know how to do it yourself, then use a library if it fits the use case, at least that way you will know how to fix it when it goes bang

jagged plume
#

yes exactly

#

and also it makes you aware of functionalities you didn't even know about sometimes

#

like "oh it does that too?"

knotty sun
#

indeed

spare island
#

maybe if it aint broke don't fix it may apply better

jagged plume
#

well, that's more of a 9 to 5 dealing with legacy code kind of mindset I think lol

#

But in this case, we are working on greenfields (?)

#

maybe not ofc

spare island
#

all of unity is legacy code 😭

jagged plume
#

well

#

ha

spare island
#

honestly a miracle of engineering it works

knotty sun
spare island
#

seeing as unity barely has an internal game dev team i'd say its probably luck

jagged plume
#

though last time, when I was working on a ParticleSystem, I was really surprised to learn about how you could initialize a variable with a property of the ParticleSystem, and that the initialized variable would "basically" be passed "by reference" (exactly but it's the idea) instead of by value as all variables typically are in C# (?)

knotty sun
spare island
#

they had one didn't htey?

knotty sun
#

nope

spare island
cold parrot
spare island
#

yknow, the "triple A quality sample game" they were making https://www.youtube.com/watch?v=-S6J8zm_w1E

*UPDATE: Production of Gigaya has been discontinued. There are currently no active plans to publish it, but it will remain as an internal resource at Unity. We want to thank you for your support and excitement for this project. You can find more information on our forums and feel free to ask any related questions there, we will do our best to an...

▶ Play video
#

and then abruptly cancelled like a year later because they found working in unity too difficult

cold parrot
#

A demo team is pointless for informing anything outside basic UX improvements

spare island
#

sorry it didn't even last FOUR MONTHS

knotty sun
spare island
cold parrot
#

it’s not a DCC app like blender

#

You’re supposed to make the tools yourself in U

#

Try making any custom tooling in any other engine

spare island
#

unreal Clueless

merry ibex
#

yall do you know if theres a way to prevent strings from being stored in globalmetadata with il2cpp enabled?
theres some sensitive strings that I wanna keep secret from being accessed

spare island
#

like what

jagged plume
#

What do big teams use then?

#

Mostly Unreal?

cold parrot
spare island
#

Either unreal or they pay for the fancy version of unity where you can modify the source

merry ibex
spare island
#

well they usually have to modify unreal too