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();
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
}
}
}
}
↧