How can I combining two players to make one ?

Hello I’m a total newbie on Unity I hope anyone can help me

I want to create a Shoot Them Up where two player (two spaceship) can do a merge together to make one ship on one distinct input, after that the first player move and the other shoot

How can I do that ?

Thanks you

There are lots of ways to go about what you’re asking. What I’d do (in point form) is:

  • in the ship collider check if I’m colliding with another ship

  • if it’s another ship, child the shooter one to the steering one (up to you how you differentiate them). The transform of the child will be relative to the parent.

  • for the shooter shit set a bool to indicate it no longer can steer, in the onupdate portion that checks direction input

    bool canSteer = true; //in initial object

    canSteer = false; //once attached

     //in input on update code
     if(input.GetKey(player2left)&& canSteer)
     {
        //only do steering if enabled
     }
    
  • for the driver/parent do something similar to disable shooting.

I’d probably do a single script for both types of ship (so I can reuse it on both) and just set the ship type via an enum.

Something like the following (note: this is an example to get you started, don’t expect it to work… I mean it compiles, but that’s to make sure the syntax is ok):

using UnityEngine;
using System.Collections;

public class CombiningShip : MonoBehaviour {
	public enum ShipType { shooter, steerer};
	public ShipType shipType;
	
	public enum ControlInputs { player1, player2};
	public ControlInputs inputToUse;
	
	public bool CanSteer;
	public bool CanFire;
	
	string player1firekey = "b";//just for example so code compiles, not the way to do this
	string player1moveleft = "a";//again for example
	
	
	void Start () 
	{
		CanFire = true;
		CanFire = true;
	
	}
	
	
	void Update () 
	{
		switch (inputToUse)  //for example, plenty of ways to do this
		{
		case ControlInputs.player1: 
		{
			if( Input.GetKey(player1firekey) && CanFire )
			{
				//do fire	
			}
			if(Input.GetKey (player1moveleft) && CanSteer)
			{
				//move left	
			}
			
			
		}
			break;
		case ControlInputs.player2:
			//do stuff for 2nd play controls
			break;
		
		}
	
		
	}
	
	
	void OnTriggerEnter(Collider other)
	{		
		var possibleShip = other.GetComponent<CombiningShip>();
		if(possibleShip != null)
		{
			if(possibleShip.shipType==ShipType.shooter)//other ship is shooter
			{
				possibleShip.CanSteer = false; //stop if from being able to shoot
				possibleShip.transform.parent = this.transform; //child ship to this one
				this.CanFire = false; //stop this one from firing
			}
		}
	}
}