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(); }
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); }
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; } }