hello. i am trying to instantiate or spawn an object (an attack visualiser) infront of the player in the direction they are going rotated to match that direction but currently im unable to figure out how to do this. any help is appreciated.
this is my current code which simply plays an animation on the players location
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAttack : MonoBehaviour
{
public GameObject Player;
public GameObject attackSlash;
public Animator anim;
// Update is called once per frame
void Update()
{
attackSlash.transform.position = Player.transform.position;
if (Input.GetKeyDown(KeyCode.Mouse0))
{
anim.SetTrigger("attack");
}
}
}
Why spawn and despawn when you can just enable and disable the same object over and over.
If you spawn it and then destroy it and you spawn the next one which is also destroyed and so on, then that generates a lot of unnecessary garbage and you would probably want to use pooling to avoid that. But instead of all that hustle, just enable/disable the object - and you can set that up inside the animation if you want to.
You labled this as “intermediate” but it seems like a “beginner” question to me.
[SerializeField] private GameObject objectToEnable;
void Spawn()
{
objectToEnable.SetActive(true);
// and some time later ...
objectToEnable.SetActive(false);
}
thanks this is helpful for spawning but i made it intermediate because i want to rotate it and put it infront of the player which im still trying to do right now. but thanks for the tip anyways
I infer that you are trying to place something in front of the Player object. I don’t think the visualizer exists in that code snippet so assuming you will add it.
This will be an odd example but most of it should translate with minor (obvious) syntax changes. It is from my VRChat world. It uses a flavor of C# called UdonSharp which limits some of the things I can do.
The player object is obvious and the panel is what I pop up in front of the player. You can get the position and rotation properties easier in C# but it is obvious where I’m getting them.
See if this provides a clue for you.
private readonly Vector3 verticalOffset = new Vector3(0f, 1.5f, 0f);
private readonly Single offsetDistance = 2f;
private void Reposition(VRCPlayerApi player)
{
var rot = player.GetRotation();
var offset = ((rot * Vector3.forward) * offsetDistance);
var pos = ((player.GetPosition() + verticalOffset) + offset);
_panel.transform.SetPositionAndRotation(pos, rot);
_isPositioned = true;
}
thanks for the tip but because of how i made my character none of this works so currently im going to work on a ranged form of attack and then tackle melee later