1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
1

Магазин в Unity2D

10.01.2020, 18:34. Показов 7562. Ответов 15
Метки нет (Все метки)

Здрасте. Я хочу сделать магазин в unity2D. Интерфейс магазина и все я уже сделал. Но дело в том что магазин находится у меня на другой сцене, где меню, а сама игра на сцене 2. И чтобы просто менять скин персонажа у меня не получается. Я не понимаю как это сделать можно. Прошу помощи!


ps: сохранение выбранного скина на другой сцене я уже пытался сделать, но на другую сцену скин не переходил.



Скрипт мяча:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using UnityEngine.EventSystems;
 
public class BallScript : MonoBehaviour
{
    //////////Components/////////////
    private Animator anim;
    private Rigidbody2D rb;
    private AudioSource audioSource;
    ///////////GameObject////////////
    public GameObject leftButton1;
    public GameObject rightButton1;
    public GameObject Shard;
    public GameObject ball;
    public GameObject spikes;
    public GameObject btnLose;
    public GameObject Coins;
    public GameObject btnStart;    
    public GameObject ball1;
    public GameObject ball2;
    //////////Text/////////////
    public Text maxHp;
    public Text highScore;
    public Text score;
    public Text MoneyCount;
    /////////int_float////////
    int hits;
    int best_hits;
    public int Money;
    float speedX;
 
    ////////BTNscripts/////////
    public BTNscripts leftButton;
    public BTNscripts rightButton;
    public SwitchBall _BALL_;
 
    /////////Transform/////////
    public Transform ShardPoint;
 
    ///////AudioClip//////////
    public AudioClip jump;
    public AudioClip crash;
 
 
    void Start()
    {
 
        best_hits = hits;
        highScore.text = best_hits.ToString();
        score.text =   "SCORE \n    " + hits;
        anim = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
        audioSource = GetComponent<AudioSource>();
        Money = PlayerPrefs.GetInt("Moneys");
        best_hits = PlayerPrefs.GetInt("HighScores");
        
    }
 
    void Update()
    {
        moving();
    }
 
    void moving()
    {
        if(leftButton.isPressed)
        {
            speedX = -5f; 
        }
        else if(rightButton.isPressed)
        {
            speedX = 5f;
        }
        else 
        {
            speedX = 0f;
        }
        rb.velocity = new Vector2 (speedX, rb.velocity.y);
        speedX = 0f;
        
    }
    void OnCollisionEnter2D(Collision2D ball)
    {
        if(ball.gameObject.tag == "Ground")
        {
            if(best_hits <= hits)
            {
                best_hits++;
            }
            hits++;
            highScore.text = best_hits.ToString();
            score.text =   "SCORE \n   " + hits;
            anim.SetBool("isGrounded", true);
        }
        if(ball.gameObject.tag == "Spike")
        {
            audioSource.PlayOneShot(jump);
            audioSource.PlayOneShot(crash);
            SavingDate();
            btnLose.SetActive(true);
            GameObject shard = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard1 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard2 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard3 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard4 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard5 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard6 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            Destroy(gameObject);
 
          
 
        }
    }
    void OnCollisionExit2D(Collision2D ball)
    {
        if(ball.gameObject.tag == "Ground")
        {
            audioSource.PlayOneShot(jump);
            anim.SetBool("isGrounded", false);
        }
    }
    void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.GetComponent<coinsNoScripts>())
        {
            Money++;
            MoneyCount.text = "" + Money;
            Destroy(collision.gameObject);
        }
    }
    void HighScore()
    {
        
    }
    void SavingDate()
    {
       // PlayerPrefs.SetInt("Health", HP);
        PlayerPrefs.SetInt("Moneys", Money);
        if(PlayerPrefs.GetInt("HighScores") < best_hits)
        {
            PlayerPrefs.SetInt("HighScores", best_hits);
        }
        
    }
}
скрипт магазина:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class ShopScript : MonoBehaviour
{
    public BallScript ball;
    public GameObject shopPan;
    public GameObject UpgradePan;
    public GameObject BallPan;
    public Image[] balls;
 
    
    // Start is called before the first frame update
    void Start()
    {
    }
 
    // Update is called once per frame
    void Update()
    {
    }
    public void UpgradeBtnPress()
    {
        UpgradePan.SetActive(!UpgradePan.activeSelf);
    }
    public void ballChanger(int balls)
    {
        
    }
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2020, 18:34
Ответы с готовыми решениями:

AI в Unity2D
Есть готовый скрипт ботинка(AI),он может меня преследовать, прыгать через платформы, убивать меня....

Префаб в Unity2d
Есть префаб врага!Когда он умирает, нужно этот префаб заменить другим объектом!

Unity2D Камера
Как можно изменить соотношение сторон камеры, чтобы не было широкого экрана?

Слои в Unity2D
Всем доброго времени суток. Совсем недавно начал изучать Unity и сейчас делаю это на примере...

15
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,229
Записей в блоге: 1
10.01.2020, 18:50 2
Цитата Сообщение от Asort Посмотреть сообщение
сохранение выбранного скина на другой сцене я уже пытался сделать, но на другую сцену скин не переходил
ScriptableObjects
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
10.01.2020, 23:25  [ТС] 3
А что это?
0
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,229
Записей в блоге: 1
11.01.2020, 00:08 4
Цитата Сообщение от Asort Посмотреть сообщение
А что это?
при помощи этого можно передавать с легкостью какие либо значения из одной сцены в другю например
2
vk.com/pppoe252110
60 / 42 / 20
Регистрация: 31.05.2019
Сообщений: 248
11.01.2020, 05:43 5
Используй static
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
11.01.2020, 21:45  [ТС] 6
А можно примерно код написать этого Scriptable object?

Добавлено через 1 час 5 минут
Бл* я не понимаю нихера.
0
2300 / 1471 / 852
Регистрация: 26.10.2018
Сообщений: 4,200
11.01.2020, 21:58 7
Цитата Сообщение от Asort Посмотреть сообщение
Бл* я не понимаю нихера.
Крик души)))
Я себя так в школе постоянно чувствовал
Создаешь объект Scriptable Object (как это сделать есть много видосов), у него должны быть поля с твоим скином (я хз что там у тебя - меш, спрайт, объект).
В своем скрипте на другой сцене делаешь паблик поле этого SO, перетаскиваешь его туда, и потом ты легко можешь читать с него данные в скрипте. Причем если эти данные ты решишь поменять в другой сцене, а потом вернуться на предыдущую, то все изменения сохранятся.
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
11.01.2020, 22:55  [ТС] 8
Окей щас попробую.

Добавлено через 15 минут
Так это я сделал, а чтобы при нажатии на кнопку "выбрать скин", то менялся скин во второй как сделать?
0
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,229
Записей в блоге: 1
11.01.2020, 23:03 9
Цитата Сообщение от Asort Посмотреть сообщение
то менялся скин во второй как сделать
сделай переменную
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int номерСкина
void ИзменитьСкин()
{
  switch (номерСкина)
      case 1:
          // скинСиний
       break;
      case 2:
        // скинКрассный
      break;
   default:
        //стандартныйСкинРозовый
   break;
}
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
11.01.2020, 23:27  [ТС] 10
Я правильно сделал??

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBall : MonoBehaviour
{
    public GameObject[] balls;
    public GameObject redBall;
    public GameObject greenBall;
    public GameObject purpleBall;
    public int SwitchBall;
    // Start is called before the first frame update
    void Start()
    {
        
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
 
    public void ballChanger()
    {
        PlayerPrefs.SetInt("c", SwitchBall);
        PlayerPrefs.Save();
        switch (SwitchBall)
        {
            case 0:
                SwitchBall = 1;
                redBall.SetActive(true);
                purpleBall.SetActive(false);
            break;
            case 1:
                SwitchBall = 2;
                purpleBall.SetActive(true);
                redBall.SetActive(false);
            break;
        }
    }
}
0
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,229
Записей в блоге: 1
11.01.2020, 23:50 11
C#
1
2
3
4
5
6
7
8
9
10
case 0:
                SwitchBall = 1; // это убери
                redBall.SetActive(true);
                purpleBall.SetActive(false);
            break;
            case 1:
                SwitchBall = 2; // это убери
                purpleBall.SetActive(true);
                redBall.SetActive(false);
            break;
Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void ballChanger()
        {
 
            PlayerPrefs.SetInt("c", SwitchBall);
            PlayerPrefs.Save();
        SwitchBall++;
            switch (SwitchBall)
            {
                case 0:
                    redBall.SetActive(true);
                    purpleBall.SetActive(false);
                    break;
                case 1:
                    purpleBall.SetActive(true);
                    redBall.SetActive(false);
                    break;
            }
        if (SwitchBall>=2)
        {
            SwitchBall = 0;
        }
        }
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
11.01.2020, 23:55  [ТС] 12
А этот скрипт нужно на кнопки навесить да?
0
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,229
Записей в блоге: 1
11.01.2020, 23:57 13
Цитата Сообщение от Asort Посмотреть сообщение
А этот скрипт нужно на кнопки навесить да?
так как тут невозможно написать ответ с количеством букв менее 3 то ответ:
дааааааааааааааааа...
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
12.01.2020, 00:03  [ТС] 14
Бл* почему я так туплю?

Окей допустим я этот скрипт написал, что дальше мне нужно сделать чтобы у меня изменялся скин?
Как я понимаю мне нужно получить переменную SwitchBall в скрипте мяча с помощью PlayerPrefs и сделать типо такого?

if(SwitchBall = 1)
{
greenBall.SetActive(false);
redBall.SetActive(true);
purpleBall.SetActive(false);

}
и так далее
0
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,229
Записей в блоге: 1
12.01.2020, 00:46 15
Лучший ответ Сообщение было отмечено Asort как решение

Решение

Asort, ну я не знаю структуру твоего пректа, где и как у тебя сохранены твои скины и тд

1 = скин 1
2 = скин 2 и тд

как вариант

PlayerPrefs тут ни причем (хотя как я и говорю "я не знаю как у тебя структурирован проект" может и причем)
1
1 / 1 / 0
Регистрация: 07.10.2019
Сообщений: 111
12.01.2020, 01:04  [ТС] 16
НУ НАКОНЕЦ ТО!!!!! Я смог. Я короче посидел подумал. Почти хотел суициднуться, но потом вдруг догнал. Я короче просто сохранил через PlayerPrefs значение SwitcherBall и получил его на другой сцене. Теперь могу изменять скин! Спасибо всем кто помогал!!

Добавлено через 1 минуту
И кстати SO тут не причем оказывается). Хотя может и причем, но только я не понимаю его.

Добавлено через 53 секунды
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using UnityEngine.EventSystems;
 
public class BallScript : MonoBehaviour
{
    //////////Components/////////////
    private Animator anim;
    private Rigidbody2D rb;
    private AudioSource audioSource;
    ///////////GameObject////////////
    public GameObject leftButton1;
    public GameObject rightButton1;
    public GameObject Shard;
    public GameObject ball;
    public GameObject spikes;
    public GameObject btnLose;
    public GameObject Coins;
    public GameObject btnStart;    
    public GameObject ball1;
    public GameObject ball2;
    //////////Text/////////////
    public Text maxHp;
    public Text highScore;
    public Text score;
    public Text MoneyCount;
    /////////int_float////////
    int hits;
    int best_hits;
    public int Money;
    float speedX;
 
    ////////BTNscripts/////////
    public BTNscripts leftButton;
    public BTNscripts rightButton;
    public NewBall justObj;
 
    /////////Transform/////////
    public Transform ShardPoint;
 
    ///////AudioClip//////////
    public AudioClip jump;
    public AudioClip crash;
    //////SO//////////////////
    public GameObject greenBall;
    public GameObject redBall;
    public GameObject purpleBall;
 
 
    void Start()
    {
        Debug.Log(PlayerPrefs.GetInt("c"));
        if(PlayerPrefs.GetInt("c") == 3)
        {
            greenBall.SetActive(false);
            redBall.SetActive(false);
            purpleBall.SetActive(true);
        }
        //PlayerPrefs.GetInt("c");
        Debug.Log(PlayerPrefs.GetInt("c"));
        best_hits = hits;
        highScore.text = best_hits.ToString();
        score.text =   "SCORE \n    " + hits;
        anim = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
        audioSource = GetComponent<AudioSource>();
        Money = PlayerPrefs.GetInt("Moneys");
        best_hits = PlayerPrefs.GetInt("HighScores");
        
    }
 
    void Update()
    {
        moving();
    }
 
    void moving()
    {
        if(leftButton.isPressed)
        {
            speedX = -5f; 
        }
        else if(rightButton.isPressed)
        {
            speedX = 5f;
        }
        else 
        {
            speedX = 0f;
        }
        rb.velocity = new Vector2 (speedX, rb.velocity.y);
        speedX = 0f;
        
    }
    void OnCollisionEnter2D(Collision2D ball)
    {
        if(ball.gameObject.tag == "Ground")
        {
            if(best_hits <= hits)
            {
                best_hits++;
            }
            hits++;
            highScore.text = best_hits.ToString();
            score.text =   "SCORE \n   " + hits;
            anim.SetBool("isGrounded", true);
        }
        if(ball.gameObject.tag == "Spike")
        {
            audioSource.PlayOneShot(jump);
            audioSource.PlayOneShot(crash);
            SavingDate();
            btnLose.SetActive(true);
            GameObject shard = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard1 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard2 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard3 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard4 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard5 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            GameObject shard6 = Instantiate(Shard, ShardPoint.position, ShardPoint.rotation);
            Destroy(gameObject);
 
          
 
        }
    }
    void OnCollisionExit2D(Collision2D ball)
    {
        if(ball.gameObject.tag == "Ground")
        {
            audioSource.PlayOneShot(jump);
            anim.SetBool("isGrounded", false);
        }
    }
    void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.GetComponent<coinsNoScripts>())
        {
            Money++;
            MoneyCount.text = "" + Money;
            Destroy(collision.gameObject);
        }
    }
    void HighScore()
    {
        
    }
    void SavingDate()
    {
       // PlayerPrefs.SetInt("Health", HP);
        PlayerPrefs.SetInt("Moneys", Money);
        if(PlayerPrefs.GetInt("HighScores") < best_hits)
        {
            PlayerPrefs.SetInt("HighScores", best_hits);
        }
        
    }
}

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBall : MonoBehaviour
{
    public GameObject[] balls;
    public GameObject redBall;
    public GameObject greenBall;
    public GameObject purpleBall;
    public int SwitchBall;
    // Start is called before the first frame update
    void Start()
    {
        
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
 
    public void ballChanger()
    {
        PlayerPrefs.SetInt("c", SwitchBall);
        PlayerPrefs.Save();
        switch (SwitchBall)
        {
            case 0:
                redBall.SetActive(true);
                purpleBall.SetActive(false);
                SwitchBall = 1;
            break;
 
        }
    }
    
    public void ballChangerfor2()
    {
        PlayerPrefs.SetInt("c", SwitchBall);
        PlayerPrefs.Save();
        switch (SwitchBall)
        {
            case 0:
                redBall.SetActive(true);
                purpleBall.SetActive(false);
                SwitchBall = 2;
            break;
        }
    }
    public void ballChangerfor3()
    {
        PlayerPrefs.SetInt("c", SwitchBall);
        PlayerPrefs.Save();
        switch (SwitchBall)
        {
            case 0:
                redBall.SetActive(true);
                purpleBall.SetActive(false);
                SwitchBall = 3;
            break;
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2020, 01:04

Вращение Unity2D
Как зарегестрировать вращение в Unity по определенной плоскости? Например, если куб со значением...

Прыжок в unity2D
Пробую создать простенькую 2D игру, не получается реализовать прыжки, вернее один прыжок. При...

Создание змейки на Unity2D
воспользовавшись советом попробовал делать по урокам noobtuts, разбирался очень долго, но в конце...

Анимация прыжка в Unity2D
Пробую создать простенькую 2D игру, не получается реализовать прыжки, вернее один прыжок. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.