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
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!
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 ?
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); }
@@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?
@@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 !
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; }
watching this at midnight was a bad idea. I actually got flashbanged by ur visual studio xD
🤣😅
I think you have a good tutorial voice.
Damn... This is the type of tutorial which interests me. A very unique and reusable system. I'll be waiting for more tutorials then...
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
Incredible tutorial - this was awesome, so well explained, paced everything. Loved it, thanks so much my friend! Easiest sub of my life. Appreciate it
Thanks a lot! You're welcome, I'm glad I could help 😊
Such· a excellent video!!!!
I think you were a very good student at math
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
You can serialize the sprite renderer and different sprites, then set the spriteRenderer.sprite at runtime whenever you need it !
@@UnPawsGames sweet! Ill try to figure out how to do that. Thanks!
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!
yes object pooling would be a good addition for sure
Yep object pooling would be a great addition ! Thanks for your comment 😁
Really awesome :)
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.
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.
I just added them ! I hope it helps :)
@@UnPawsGames you’re the best! Thank you
I can't seem to get it working when the enemies are moving
What do you mean by not working ?
Can you make a tutorial for 3d isometric game?
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 ?
I usualy dont do that but i copy paste the scripts you put in the description but it dont work too
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 :)
@@UnPawsGames ok i'l join it thanks !
i can't join your discord, it showing my mailId is already registered while claim my account.
That's weird 🤔
Did you try the link in my latest videos?
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);
}
how can I set a new target?
You can do that through script! For example, find a new target using a detection method and replace the target in your script!
@@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?
@@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 !
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;
}
Dont't forget to *Time.deltatime your transform.position 😉
@@UnPawsGames still have the same problem, now it's in fixed position