Seleccionar Página

Imaginen que tenemos un cañon estatico, o una ametralladora de un avion que cambia su posición y rotación. Cuando presionamos click en el mouse o presionamos la barra espaceadora el cañon o cañones disparan. El proyectil debe tener la rotación del cañon y la posición.

Entonces en la escena debemos tener un cañon, en la punta del cañon un empty gameobject que va a funcionar como spawner, deben tener creado un prefab para instancearlo.

El código del cañon estático en el suelo, el cual rota sobre su eje:

public sealed class Canon : Component {

   [Property] public float VelocidadMovimiento {get; set;} = 100f;
   
   protected override void OnUpdate()
	{

		if(Input.Down("left")){
			float rotationZ = WorldRotation.Angles().roll;
			if(rotationZ > -85.14){
				WorldRotation *= Rotation.From(0,0, -VelocidadMovimiento * Time.Delta);
			}
			
		}

		if(Input.Down("right")){
			float rotationZ = WorldRotation.Angles().roll;
			if(rotationZ < 85.14){
				WorldRotation *= Rotation.From(0, 0, VelocidadMovimiento * Time.Delta);
			}
		}

	}

}

Luego el empty gameobject en la punta del cañon que funciona como el spawner de los proyectiles debe hacer una instancia del proyectil, luego tomar la posición y rotación del spawner.

public sealed class Spawner : Component {

   [Property] PrefabFile Proyectil {get; set;}
   
   protected override void OnUpdate()
	{

		if(Input.Pressed("jump")){
			GameObject ProyectilInstance = GameObject.Clone(Proyectil);
                        ProyectilInstance.WorldPosition= WorldPosition;
                        ProyectilInstance.WorldRotation = WorldRotation;	
		}	

	}

}

Finalmente en el componente de script de nuestro prefab podríamos tener algo asi:

public sealed class ProyectilScript : Component {

   [Property] public float PoderDeFuego {get; set;} = 1000f;
   
   protected override void OnUpdate()
	{

	Vector3 Direccion = WorldRotation.Up;
        WorldPosition += Direccion * PoderDeFuego * Time.Delta;

	}

}

Dependiendo de la dirección inicial del cañon la dirección podria ser forward. Esto es un mini ejemplo de como instancear cosas y que tenga la misma posición y rotación del spawner.