В общем, я бы не стал создавать клонов, наверное ... зачем создавать новый игрок? Почему бы просто не переместить его на новую позицию?
Здесь происходит следующее: после Destroy(collision.gameobject)
FollowCamera
теряет ссылку на target
, поэтому вам потребуется переназначить его после клонирования, например, в
private void OnTriggerExit2D(Collider2D collision)
{
exitVelocity = enteredRigidbody.velocity.x;
if (enterVelocity != exitVelocity)
{
Destroy(GameObject.Find("Clone"));
}
Destroy(collision.gameObject);
PortalControl.portalControlInstance.EnableColliders();
var clone = GameObject.Find("Clone");
clone.name = "Character";
DontDestroyOnLoad(clone);
// It would ofcourse be way more efficient
// if you would store this reference somewhere
FindObjectOfType<CameraFollow>().target = clone;
}
Обратите внимание, что В общем, использование Find
стоит дорого, и его следует избегать везде, где это возможно! Скорее передайте ссылку clone
между всеми необходимыми сценариями.
Относительно стиля кодирования: передача параметров string
не очень хороший код.
Я бы предложил, например, enum
как
public enum PortalSide
{
orange,
blue
}
и затем используйте
private Dictionary<PortalSide, Transform> portalSpawns;
private Dictionary<PortalSide, Collider> portalColliders;
private void Awake()
{
portalSpawns = new Dictionary<PortalSide, Transform> { {PortalSide.blue, bluePortalSpawnPoint} , {PortalSide.orange, orangePortalSpawnPoint}};
portalColliders = new Dictionary<PortalSide, Collider> { {PortalSide.blue, bluePortalCollider}, {PortalSide.orange, orangePortalCollider} };
}
public void CreateClone(PortalSide whereToCreate)
{
var spawnPoint = PortalSides[whereToCreate];
var instantiatedClone = Instantiate(clone, spawnPoint.position, Quaternion.identity);
instantiatedClone.gameObject.name = "clone";
}
public void DisableCollider(PortalSide ColliderToDisable)
{
var colliderToDisable = portalColliders[ColliderToDisable];
colliderToDisable.enabled = false;
}