2017-06-08 2 views
0

Je fais un jeu de plateforme où pour différents aspects du niveau, vous devez changer de personnage. Chaque personnage doit avoir des propriétés différentes et autres. J'ai utilisé ce tutoriel https://www.youtube.com/watch?v=vD5pW97-050 mais cela ne fait que changer le sprite car les deux personnages font partie du même gameobject avec le même corps rigide et le même collisionneur. J'utilise C# et aimerais vraiment de l'aide si quelqu'un connaissait une solution. Voici mon script de contrôleurs de joueurs, qui inclut le script de changement de caractères trouvé dans le tutoriel. Toute aide serait appréciée Merci!Essayer de changer de caractère 2d

using UnityEngine; 
using System.Collections; 

public class controller : MonoBehaviour 
{ 
public float topSpeed = 15f; 
bool facingRight = true; 

bool grounded = false; 

public Transform groundCheck; 

float groundRadius = 0.2f; 
GameObject Player, Player2; 
int characterselect; 

public float jumpForce = 700f; 

public LayerMask whatIsGround; 
void Start() 
{ 
    characterselect = 1; 
    Player = GameObject.Find("Player"); 
    Player2 = GameObject.Find("Player2"); 

} 

void FixedUpdate() 
{ 
    grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround); 


    float move = Input.GetAxis("Horizontal"); 
    GetComponent<Rigidbody2D>().velocity = new Vector2(move * topSpeed, GetComponent<Rigidbody2D>().velocity.y); 
    if (move > 0 && !facingRight) 
     flip(); 
    else if (move < 0 && facingRight) 
     flip(); 


} 

void Update() 
{ 
    if(grounded&& Input.GetKeyDown(KeyCode.Space)) 
    { 
     GetComponent<Rigidbody2D>().AddForce(new Vector2(0, jumpForce)); 
    } 
    { 
     if (Input.GetKeyDown(KeyCode.E)) 
     { 
      if (characterselect==1) 
      { 
       characterselect = 2; 
      } 
      else if (characterselect==2) 
      { 
       characterselect = 1; 
      } 
     } 
     if (characterselect==1) 
     { 
      Player.SetActive(true); 
      Player2.SetActive(false); 
     } 
     else if (characterselect==2) 
     { 
      Player.SetActive(false); 
      Player2.SetActive(true); 
     } 
    } 

} 

void flip() 
{ 
    facingRight = ! facingRight; 

    Vector3 theScale = transform.localScale; 

    theScale.x *= -1; 

    transform.localScale = theScale; 


} 

}

Répondre

0

Avoir un contrôleur est un bon début pour cela, mais tu dois penser à la façon dont vous voulez que vos différents personnages que vous soient. S'ils vont être complètement différent, alors pensez à une création d'une interface « PlayerCharacter » qui a des fonctions pour toutes les commandes possibles par exemple

public interface IPlayerCharacter 
{ 
    void DoActionA(); 
    void DoActionB(); 
} 

Si vous ne savez pas ce qu'est une interface, il est essentiellement un vide classe qui définit les fonctions, mais pas encore crée le code pour eux. Pour cette raison, vous pouvez très facilement implémenter des joueurs très différents. Parce que vous pouvez appeler les fonctions à partir d'une instance de cette interface.

Ensuite, ajoutez ce composant à votre contrôleur, et si vous passez maintenant du joueur 1 au joueur 2 Il devrait probablement être un peu comme ça

public class PlayerController_Jumper : MonoBehaviour, IPlayerCharacter 
{ 
    // Does a jump 
    void DoActionA() 
    { 
     rigidbody.AddVelocity(Vector3.Up, 100.0f); 
    } 
} 

Quelque chose qui doit être fait avec des interfaces est que vous Doit définir toutes les fonctions prédéfinies, donc il va probablement se plaindre de ce code car il n'y a pas de DoActionB(). Mais laissons cela de côté pour l'instant. Puis ajoutez à votre contrôleur quelque chose comme "IPlayerController Jumper" et tous les autres personnages sympas que vous avez l'intention de faire!

+0

La seule différence principale que je veux est les collisionneurs, comme il va être un jeu simple, chaque caractère différent est une forme différente – Nosnhoj

+0

Oh, je vois. Vous pouvez simplement utiliser deux préfabriqués différents, il suffit de faire l'un des colliders sous la forme de l'objet avec un CircleCollider2D, un PolygonCollider ou un simple collisionneur de boîtes. – Veld