Ejemplo n.º 1
0
    void Start()
    {
        robot = GameObject.Find("RobotPy");

        string script;
        string filename = Application.dataPath + "/../Python/Chapter10/Moderator.py";

        using (StreamReader sr = new StreamReader(filename, System.Text.Encoding.UTF8))
        {
            script = sr.ReadToEnd();
        }

        // Pythonスクリプト実行エンジン
        scriptEngine = Python.CreateEngine();
        // 実行エンジンに渡す値を設定する
        scriptScope = scriptEngine.CreateScope();
        // pythonのソースを指定
        scriptSource = scriptEngine.CreateScriptSourceFromString(script);
        // Moderator9.pyのソースを実行する
        scriptSource.Execute(scriptScope);

        /* Moderator9.pyを実行した結果を取得 */
        // 迷路のサイズを設定
        MazeSize = scriptScope.GetVariable <int>("SIZE");

        // カメラの設定
        SetCamera(MazeSize);
        // 光源の設定
        SetLight(MazeSize);
        // 迷路の設定
        SetMaze(MazeSize);
        // ロボットの初期位置を設定する
        InitRobotPosition(MazeSize);

        try
        {
            this.setTreasures = ModeratorTools.InitializeAndGetTreasures();
        }
        catch (Exception exception)
        {
            Debug.LogError(exception);
            this.ApplicationQuitAfter1sec();
        }

        this.PreProcess();
    }
Ejemplo n.º 2
0
    public static Dictionary <TreasurePositionsInfo, GameObject> CreateTreasuresPositionMap()
    {
        // お宝を置く位置を見えないようにする
        ModeratorTools.DeactivateTreasuresPositions();

        // 迷路上に置くお宝を決める
        // ModeratorTools.treasures = ModeratorTools.treasureCandidates.OrderBy(i => Guid.NewGuid()).ToList();
        ModeratorTools.treasures = new List <GameObject>();

        List <int> randomList = new List <int>();

        while (true)
        {
            int value = UnityEngine.Random.Range(0, ModeratorTools.treasureCandidates.Count);
            if (randomList.Contains(value))
            {
                continue;
            }
            randomList.Add(value);
            treasures.Add(ModeratorTools.treasureCandidates[value]);
            if (randomList.Count == ModeratorTools.treasurePositions.Count)
            {
                break;
            }
        }

        // 配置しないお宝を見えないようにする
        ModeratorTools.DeactivateTreasuresCandidates(treasures);

        Dictionary <TreasurePositionsInfo, GameObject> treasureCandidatesMap = new Dictionary <TreasurePositionsInfo, GameObject>();

        for (int i = 0; i < ModeratorTools.treasures.Count; i++)
        {
            TreasurePositionsInfo treasurePositionInfo = new TreasurePositionsInfo();

            treasurePositionInfo.name        = ModeratorTools.treasures[i].name;
            treasurePositionInfo.position    = treasurePositions[i].transform.position;
            treasurePositionInfo.eulerAngles = treasurePositions[i].transform.eulerAngles;

            treasureCandidatesMap.Add(treasurePositionInfo, ModeratorTools.treasures[i]);
        }

        return(treasureCandidatesMap);
    }
Ejemplo n.º 3
0
    private void PreProcess()
    {
        Dictionary <TreasurePositionsInfo, GameObject> treasuresPositionMap = null;

        treasuresPositionMap = ModeratorTools.CreateTreasuresPositionMap();

        foreach (KeyValuePair <TreasurePositionsInfo, GameObject> pair in treasuresPositionMap)
        {
            pair.Value.transform.position    = pair.Key.position;
            pair.Value.transform.eulerAngles = pair.Key.eulerAngles;
        }

        for (int i = 0; i < this.setTreasures.Count; i++)
        {
            //    this.setTreasures[i].GetComponent<Rigidbody>().constraints
            //        = RigidbodyConstraints.FreezeRotation |
            //          RigidbodyConstraints.FreezePositionX |
            //          RigidbodyConstraints.FreezePositionZ;
        }
    }