- Home /
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
Answer by dubbreak · Feb 14, 2013 at 08:28 PM
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
}
}
}
}