2D Projectiles in Unity - Tutorial

Поделиться
HTML-код
  • Опубликовано: 26 сен 2024

Комментарии • 33

  • @roberto1899
    @roberto1899 4 месяца назад +10

    I think you have a good tutorial voice.

  • @g-han5565
    @g-han5565 4 месяца назад +3

    Damn... This is the type of tutorial which interests me. A very unique and reusable system. I'll be waiting for more tutorials then...

  • @AliceEverglade
    @AliceEverglade 3 месяца назад +3

    watching this at midnight was a bad idea. I actually got flashbanged by ur visual studio xD

  • @GarnetKane
    @GarnetKane 7 дней назад

    Incredible tutorial - this was awesome, so well explained, paced everything. Loved it, thanks so much my friend! Easiest sub of my life. Appreciate it

    • @UnPawsGames
      @UnPawsGames  7 дней назад

      Thanks a lot! You're welcome, I'm glad I could help 😊

  • @ECAKJ
    @ECAKJ 4 месяца назад +4

    You read my mind! This looks awesome. I’ve always wanted you to make tutorials. I’m curious how you did this in hidden tactics, along with how you did the animations since there’s a lot of weapons on seperate sprites. I’m still somewhat of a beginner

  • @mitsuhagd
    @mitsuhagd Месяц назад +1

    I think you were a very good student at math

  • @EinfachMichii
    @EinfachMichii 3 месяца назад +2

    Actuallly nice system. To improve it even further (performance wise), try to limit the amounts of scripts (MonoBehaviours). It might become pretty important, even in your game when you've got a insane amount of projectiles in the scene. Also think about Object Pooling, which is commonly used for systems like that. Great Job!

    • @ECAKJ
      @ECAKJ 3 месяца назад

      yes object pooling would be a good addition for sure

    • @UnPawsGames
      @UnPawsGames  3 месяца назад

      Yep object pooling would be a great addition ! Thanks for your comment 😁

  • @jutekpixel
    @jutekpixel 4 месяца назад +1

    Really awesome :)

  • @ECAKJ
    @ECAKJ 4 месяца назад +1

    Also curious how you change sprites on runtime. Like in Starve when you cut down trees or your last jam game with the plants growing

    • @UnPawsGames
      @UnPawsGames  4 месяца назад +1

      You can serialize the sprite renderer and different sprites, then set the spriteRenderer.sprite at runtime whenever you need it !

    • @ECAKJ
      @ECAKJ 4 месяца назад

      @@UnPawsGames sweet! Ill try to figure out how to do that. Thanks!

  • @pixgamesstudio5884
    @pixgamesstudio5884 3 месяца назад +1

    I can't seem to get it working when the enemies are moving

    • @UnPawsGames
      @UnPawsGames  3 месяца назад

      What do you mean by not working ?

  • @ECAKJ
    @ECAKJ 4 месяца назад +1

    Odds you can put the scripts in the description? I have no idea what Im doing wrong but I can not get it to work. I feel dumb, but trying to learn.

    • @UnPawsGames
      @UnPawsGames  4 месяца назад

      I just added them ! I hope it helps :)

    • @ECAKJ
      @ECAKJ 3 месяца назад

      @@UnPawsGames you’re the best! Thank you

  • @isaacpapillon8098
    @isaacpapillon8098 3 месяца назад

    I keep getting null reference exeption on every part of the code that reference the target but I set the target correctly I dont understand.

  • @gabinchollet8153
    @gabinchollet8153 2 месяца назад

    Hi ! Thanks for the tutorial its very nice but i have a problem the projectile stay on the position of the shooter, it seem that he as no target so i retry and retry but it's still doesn't work, can someone help me ?

    • @gabinchollet8153
      @gabinchollet8153 2 месяца назад

      I usualy dont do that but i copy paste the scripts you put in the description but it dont work too

    • @UnPawsGames
      @UnPawsGames  2 месяца назад

      Hi ! For more help, feel free to join my discord server (its in many of my video's decription). Peoplr there will be glad to help you :)

    • @gabinchollet8153
      @gabinchollet8153 2 месяца назад

      @@UnPawsGames ok i'l join it thanks !

  • @ECAKJ
    @ECAKJ 3 месяца назад

    how can I set a new target?

    • @UnPawsGames
      @UnPawsGames  3 месяца назад

      You can do that through script! For example, find a new target using a detection method and replace the target in your script!

    • @ECAKJ
      @ECAKJ 3 месяца назад

      @@UnPawsGames thanks! I have a detection method, I guess im still too much of a beginner. I don’t know how to replace the target in script. How did you learn programming so fast?

    • @UnPawsGames
      @UnPawsGames  3 месяца назад +1

      @@ECAKJ You can go for : target = newTarget in you script, whenever your condition to change target is fulfilled.
      I'm full-time, so that gives me a lot of time to learn !

  • @soco5338
    @soco5338 Месяц назад

    Good tutorial. This does exactly what I needed and it's really easy to integrate into my object pooling. I had two issues that I had to correct though that weren't any fault of OP, just the way my game is already set up. The first was easy, if your arrow has a rigidbody on it, you might need to set it to static or kinematic. The second issue was a bit more strange, but you need to make sure that the projectile is facing right when it's at rotation 0,0,0. Mine isn't, so I needed to subtract 90 degree from the z-axis in the UpdateRotation method.
    private void UpdateProjectileRotation()
    {
    Vector3 projectileMoveDir = projectile.GetProjectileMoveDir();

    float angle = Mathf.Atan2(projectileMoveDir.y, projectileMoveDir.x) * Mathf.Rad2Deg;
    angle -= 90; // Adjust based on your arrow's initial orientation
    projectileVisual.transform.rotation = Quaternion.Euler(0, 0, angle);
    }

  • @Magma-uw7yo
    @Magma-uw7yo Месяц назад

    5:53,: I have no Ideas why but my arrow go at the speed of light, I need to decrease the speed. My code is correct :
    Projectile :
    private Transform target;
    private float moveSpeed;
    private float distanceToDestroy = 1f;
    private void Update()
    {
    Vector3 moveDirection = (target.position - transform.position).normalized;
    transform.position += moveDirection * moveSpeed;
    if(Vector3.Distance(transform.position, target.position) < distanceToDestroy)
    Destroy(gameObject);
    }
    public void Shoot(Transform target, float moveSpeed){
    this.target = target;
    this.moveSpeed = moveSpeed;
    }

    • @UnPawsGames
      @UnPawsGames  Месяц назад

      Dont't forget to *Time.deltatime your transform.position 😉

    • @Magma-uw7yo
      @Magma-uw7yo Месяц назад

      @@UnPawsGames still have the same problem, now it's in fixed position