예제 #1
0
    // per-frame keyboard input; called from Update
    unsafe void ProcessKeyboard()
    {
        // F1: toggle help
        if (Input.GetKeyDown(KeyCode.F1))
        {
            showhelp++;
            if (showhelp > 2)
            {
                showhelp = 0;
            }
        }

        // G: toggle gravity
        else if (Input.GetKeyDown("g"))
        {
            MJP.TOption opt;
            MJP.GetOption(&opt);
            opt.gravity = 1 - opt.gravity;
            MJP.SetOption(&opt);
        }

        // E: toggle equality
        else if (Input.GetKeyDown("e"))
        {
            MJP.TOption opt;
            MJP.GetOption(&opt);
            opt.equality = 1 - opt.equality;
            MJP.SetOption(&opt);
        }

        // L: toggle limit
        else if (Input.GetKeyDown("l"))
        {
            MJP.TOption opt;
            MJP.GetOption(&opt);
            opt.limit = 1 - opt.limit;
            MJP.SetOption(&opt);
        }

        // R: toggle video recording
        else if (Input.GetKeyDown("r"))
        {
            // recording: close
            if (record)
            {
                record = false;
                videofile.Close();
                videofile = null;
            }

            // not recording: open
            else
            {
                record    = true;
                videofile = new FileStream(Application.streamingAssetsPath + "/../../" + "video_" + videos + ".raw",
                                           FileMode.Create, FileAccess.Write);
                videos++;
            }
        }

        // S: save snapshot
        else if (Input.GetKeyDown("s"))
        {
            RenderToTexture();
            byte[] bytes = offtex.EncodeToPNG();
            File.WriteAllBytes(Application.streamingAssetsPath + "/../../" + "img_" + snapshots + ".png", bytes);
            snapshots++;
        }

        // backspace: reset and sync
        else if (Input.GetKeyDown(KeyCode.Backspace))
        {
            MJP.Reset();
            MJP.SetTime(Time.time);
            videotime = Time.time;
        }

        // space: toggle pause and sync
        else if (Input.GetKeyDown(KeyCode.Space))
        {
            pause = !pause;
            MJP.SetTime(Time.time);
            videotime = Time.time;
        }

        // Esc: main camera
        else if (Input.GetKeyDown(KeyCode.Escape))
        {
            camindex = -1;
        }

        // load scene or set model camera
        else
        {
            for (int i = 0; i <= 9; i++)
            {
                if (Input.GetKeyDown(i.ToString()))
                {
                    // load scene: runtime only
                    if (Input.GetKey(KeyCode.LeftShift) ||
                        Input.GetKey(KeyCode.RightShift))
                    {
                    #if !UNITY_EDITOR
                        if (i < SceneManager.sceneCountInBuildSettings)
                        {
                            SceneManager.LoadScene(i, LoadSceneMode.Single);
                        }
                    #endif
                    }

                    // set camera
                    else
                    {
                        if (i < ncamera)
                        {
                            camindex = i;
                        }
                    }
                }
            }
        }
    }