Page 1 sur 1

TutorialScenario et TutorialPage

Publié : 31 décembre 2016, 23:53
par Mandrin
Bonjour,

Je suis en train de créer des tutos (bouton Training dans l'IHM de KSP) pour KSP 1.2.2 et je rencontre la difficulté suivante : les popups avec Gene Kerman, notre instructeur, n'apparaissent pas.

Le code source de ma classe :

Code : Tout sélectionner

using UnityEngine;

namespace RSSROTutorial
{

    public class RSSROTutorial101 : TutorialScenario
    {
        TutorialPage welcome, conclusion;

        protected override void OnAssetSetup()
        {
            instructorPrefabName = "Instructor_Gene";
        }

        protected override void OnTutorialSetup()
        {
            ScreenMessages.PostScreenMessage("GOGOGO !!!");

            welcome = new TutorialPage("welcome");
            welcome.windowTitle = "Orbiting 101";

            welcome.OnEnter = (KFSMState st) =>
            {
                instructor.StopRepeatingEmote();
                //InputLockManager.SetControlLock((ControlTypes.STAGING | ControlTypes.THROTTLE), "RSSROTutorial101Lock");
            };
            welcome.OnDrawContent = () =>
            {
                GUILayout.Label("Salut !!!", GUILayout.ExpandHeight(true));

                if (GUILayout.Button("Next")) Tutorial.GoToNextPage();
            };
            Tutorial.AddPage(welcome);

            conclusion = new TutorialPage("conclusion");
            conclusion.windowTitle = "Orbiting 101 - Complete!";
            conclusion.OnEnter = (KFSMState st) =>
            {
                instructor.PlayEmote(instructor.anim_true_smileB);

            };
            conclusion.OnDrawContent = () =>
            {
                GUILayout.Label("Salut encore !!!");


                if (GUILayout.Button("Finish"))
                {
                    Destroy(this);
                }
            };
            Tutorial.AddPage(conclusion);

            Tutorial.StartTutorial(welcome);
        }

    }
}
J'ai bien le message "GOGOGO" qui apparait à l'écran au lancement du tutorial ce qui prouve que ma dll est bien chargée et lancée mais par contre, je flood le ksp.log avec le message :

Code : Tout sélectionner

[EXC 02:16:32.947] ArgumentException: You can only call GUI functions from inside OnGUI.
	UnityEngine.GUIUtility.CheckOnGUI ()
	UnityEngine.GUI.get_skin ()
	UnityEngine.GUILayout.Label (System.String text, UnityEngine.GUILayoutOption[] options)
	RSSROTutorial.RSSROTutorial101.<OnTutorialSetup>b__3_1 ()
	TutorialScenario.Update ()
Je comprends bien le problème mais j'ai du mal à trouver une solution à ce OnGUI. D'autant que j'ai utilisé le code d'un ancien dév de KSP et un exemple commenté. Tous les deux, même si je les copie-colle posent le même problème :
http://forum.kerbalspaceprogram.com/ind ... -code-r13/
https://github.com/ilo/KSP-TrainingTuto ... lPlugin.cs

En revanche, j'ai essayé le code tout bête ci-dessous, et là, ça marche nickel mais ce n'est pas le texte que je veux bien sûr (TutorialOrbit101 est une sous-classe de TutorialScenario et décrit un tutoriel de mise en orbite il me semble) :

Code : Tout sélectionner

using UnityEngine;

namespace RSSROTutorial
{

    public class RSSROTutorial101 : TutorialOrbit101
    {
    }
}
Ce qui me fait dire que ces coquins de développeurs ont rajouté une subtilité depuis la publication des exemples que j'ai essayé ;)

Merci par avance pour l'aide que vous pourrez m'apporter.

Re: TutorialScenario et TutorialPage

Publié : 30 janvier 2017, 18:21
par Malah
Salut, désolé, j'étais pas trop présent ses dernières semaines. Mais oué, depuis les tutoriels ont totalement été repondu et encore ce n'est rien de le dire, puisque le bug que tu possèdes provient simplement du passage à Unity 5 où toutes les intefaces doivent passer par OnGUI (sur Unity 4 on pouvait déjà le faire, mais les moddeurs aimaient tout particulièrement passer par un autre render pour avoir la main sur le tout).

Tu n'as pas de chance, car il y a très très peux de mods de tutoriels, donc presque aucun exemple pour s'aider. La seule solution ... fouiller l'API, première marche : https://kerbalspaceprogram.com/api/clas ... nario.html

Edit : Pour être simple : tu dois virer tous les GUILayout autres joyeusetées faisant référence à l'interface