forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Проблема с PlayerPrefs (http://forum.boolean.name/showthread.php?t=17942)

mepihin 27.02.2013 23:14

Проблема с PlayerPrefs
 
Есть простой скрипт монолога пресонажа, привестсвие в котром должно показываться только один раз, пробоавал ничего не выходит:
PHP код:

using UnityEngine;
using System.Collections;

public class 
Quests MonoBehaviour {
    
    private 
bool activedialog true;
    public 
string text "";
    private 
int show 1;
    private 
bool newQuest false;
    public 
string questText;
    public 
GUISkin skin;
    
    
void Start()
    {
        
text "Приветствую тебя на острове белезней. Как видно, остров очень красив, но не отвлекайся от своей цели, заглядываясь на красоту острова...\n Тебе надо помочь жителям острова излечиться от чумы, которая убивает все больше и больше людей. Для начала собирай растения, которые увидешь, а потом приноси их жителям, чтобы они варили себе отвар, но не забывай, что люди могут умереть от того, что ты не успел... Enter - подолжить";    
    }
    
    
void Update()
    {
        if(
activedialog == true)
        {
            
transform.GetComponent<CharacterMotor>().enabled false;
            
transform.GetComponent<MouseLook>().enabled false;
            
GameObject.FindGameObjectWithTag("MainCamera").GetComponent<MouseLook>().enabled false;
        }
        if(
activedialog == false)
        {
            
transform.GetComponent<CharacterMotor>().enabled true;
            
transform.GetComponent<MouseLook>().enabled true;
            
GameObject.FindGameObjectWithTag("MainCamera").GetComponent<MouseLook>().enabled true;
        }
        
        if(
Input.GetKeyDown(KeyCode.Return) && show == 1show 2;
        else { 
            if(
Input.GetKeyDown(KeyCode.Return) && show == 2)
            {
                
show 0;
                
text "";
                
activedialog false;
            }
            if(
Input.GetKeyDown(KeyCode.Return) && show == 3)
            {
                
show 0;
                
text "";
                
activedialog false;
                
newQuest true;
            }
        }
    }

    
void OnGUI()
    {
        
GUI.skin skin;
        if(
activedialog == true)
        {
            if(
show == 1)
            {
                
GUI.Box(new Rect(0,Screen.height-100,Screen.width,300),"");
                
GUI.Label(new Rect(10,Screen.height-75,Screen.width,300),text);
            }
            if(
show == 2)
            {
                
text "Вот теперь ты немного знаешь об этом острове. Теперь тебе надо найти одну из 9 деревень и попробовать помочь людям.\n - Но как я узнаю какая деревня заражена?\n - У зараженных деревень летают мухи... Enter - чтобы продолжить";
                
GUI.Box(new Rect(0,Screen.height-100,Screen.width,300),"");
                
GUI.Label(new Rect(10,Screen.height-75,Screen.width,300),text);
            }
            if(
show == 3)
            {
                
text "А вот и первая зараженная деревня... Чтоже делать в нчала???\n Конечно же собрать травы для жителей.Говорят, что нужно на человека 3 травы, а тут всего-то 3 человека...\n Но только с наружи, а внутри домов, которые наглухо закрыты??? Ладно, принесу 15 трав для всех и отдам их в мельницу.";
                
GUI.Box(new Rect(0,Screen.height-100,Screen.width,300),"");
                
GUI.Label(new Rect(10,Screen.height-75,Screen.width,300),text);                    
            }
        }
        if(
newQuest == true)
        {
            if(
show == 3)    
            {    
                
questText "Собрать 15 трав...";
                
GUI.Label(new Rect(Screen.width-200,Screen.height-200,300,30),questText);
            }
        }
        
    }
    
    
void OnTriggerEnter(Collider other)
    {
        if(
other.tag == "Evenger Village")
        {
            
activedialog true;
            
show 3;
        }
    }
    


То есть, действия в триггерах должно отобрадаться только один раз без повторго показа, не могу сделать ничего с этим. Помогите

Lestar 28.02.2013 01:10

Ответ: Проблема с PlayerPrefs
 
Непонятно в чем заключается проблема с PlayerPrefs, так как кода соответствующего не присутствует. Диалоги организованы не совсем корректно. Сами диалоги в коде держать затея хуже некуда. Весь текст из кода выносить. В текстовый файл, XML, куда удобно. По диалогам, создать дерево диалога с узлами и писать в него текущий узел. И в зависимости от текущего узла тогда уже решать что выводить.

Okay 03.03.2013 01:46

Ответ: Проблема с PlayerPrefs
 
И где у тебя вообще PlayerPrefs? Если ты собираешься сохранять в реестр, то тебе нужно использовать сохранение с PlayerPrefs и загрузку. И соответственно устанавливать переменной SHOW значение, которое у тебя в реестре


Часовой пояс GMT +4, время: 16:46.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot