2016-05-07 5 views
0

У меня есть 5 сборных опций в качестве вариантов игроков, есть кнопка «Изменить» в моем игровом меню, где пользователь нажимает, меняет символ.Institiate prefab Unity3D

Как сделать этот выбор в «Меню», когда начинается игра2d?

Prefabs:

Bee, Bee1, Bee2, Bee3 и Bee4.

Пчела (игрок) сценарий.

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityStandardAssets.CrossPlatformInput; 

public class Bee : MonoBehaviour { 

    public float moveSpeed; 

    public Transform bee; 
    private Animator animator; 

    public bool isGrounded = true; 
    public float force; 

    public float jumpTime = 0.1f; 
    public float jumpDelay = 0.1f; 
    public bool jumped = false; 
    public Transform ground; 


    // Use this for initialization 
    void Start() 
    { 
     animator = bee.GetComponent<Animator>(); 
    } 

    void Update() 
    { 
     Move(); 

    } 


    void Move() 
    { 

     isGrounded = Physics2D.Linecast (this.transform.position, ground.position, 1 << LayerMask.NameToLayer ("Floor")); 
     animator.SetFloat ("runB", Mathf.Abs (CrossPlatformInputManager.GetAxis ("Horizontal"))); 
     if (CrossPlatformInputManager.GetAxisRaw ("Horizontal") > 0) { 

      transform.Translate (Vector2.right * moveSpeed * Time.deltaTime); 
      transform.eulerAngles = new Vector2 (0, 0); 
     } 
     if (CrossPlatformInputManager.GetAxisRaw ("Horizontal") < 0) { 

      transform.Translate (Vector2.right * moveSpeed * Time.deltaTime); 
      transform.eulerAngles = new Vector2 (0, 180); 
     } 

     if (CrossPlatformInputManager.GetButtonDown ("Vertical") && isGrounded && !jumped) { 

      // rigidbody2D.AddForce (transform.up * force); 
      GetComponent<Rigidbody2D>().AddForce (transform.up * force); 
      jumpTime = jumpDelay; 
      animator.SetTrigger ("jumpB"); 
      jumped = true; 
     } 

     jumpTime -= Time.deltaTime; 

     if (jumpTime <= 0 && isGrounded && jumped) { 

      animator.SetTrigger ("groundB"); 
      jumped = false; 

     } 

    } 

} 
+0

В чем разница между сборными? Например. если это зависит только от визуальных эффектов, вы должны работать с одним синтаксическим сборником и иметь определенное дочернее устройство, чтобы оно содержало визуальные эффекты (например, спрайт) и только меняло это. –

+0

@Gunnar B. Только измените спрайт, остальное то же самое! –

ответ

0

Я рекомендую переместить визуальную часть игрока в дочерний объект, это не требуется хоть. Если вы это сделаете, ваш объект корневого игрока может просто быть пустым игровым объектом.

Если у вас есть смена сцены, вам понадобится что-то постоянное между сценами, например. синглтон с DontDestroyOnLoad. В любом случае это должно иметь информацию обо всех возможных спрайтах, например. в списке, который вы заполняете Resources.Load/LoadAll. Вы можете использовать этот список для отображения спрайтов в меню. При выборе сохранения индекса и запуска игры вы просто изменить игрока спрайт к выбранному одному с чем-то вроде этого (это было бы в этом классе, например, называется GameController):

playerGO.GetComponentInChildren<SpriteRenderer>().sprite = spritesList[selected]; 

(Это при условии, что визуальные эффекты находятся на дочернем объекте.)