예제 #1
0
    protected virtual void OnSceneGUI()
    {
        AnimationTest animTest = (AnimationTest)target;

        m_BoundsHandle.axes   = PrimitiveBoundsHandle.Axes.X | PrimitiveBoundsHandle.Axes.Y;
        m_BoundsHandle.center = animTest.bounds.center;
        m_BoundsHandle.size   = animTest.bounds.size;
        m_bounds2.center      = animTest.transform.position;
        m_bounds2.size        = Vector3.one;

        EditorGUI.BeginChangeCheck();
        m_BoundsHandle.DrawHandle();
        m_bounds2.DrawHandle();
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(animTest, "Change Bounds");

            Bounds newBounds = new Bounds();
            newBounds.center     = m_BoundsHandle.center;
            newBounds.size       = m_BoundsHandle.size;
            animTest.bounds      = newBounds;
            animTest.coll.offset = newBounds.center - animTest.transform.position;
            animTest.coll.size   = newBounds.size;
        }
    }
예제 #2
0
    public override void OnInspectorGUI()
    {
        AnimationTest animationTest = (AnimationTest)target;

        GUILayout.BeginHorizontal();
        {
            if (GUILayout.Button("Play", GUILayout.Width(120)))
            {
                animationTest.Play();
            }
        }
        GUILayout.EndHorizontal();
    }
예제 #3
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        AnimationTest animTest = (AnimationTest)target;

        animTest.colls = animTest.GetComponents <BoxCollider2D>();
        Mathf.Clamp(animTest.currentFrame, 0, animTest.framesInAnimation);
        if (GUILayout.Button("Add Event"))
        {
            AnimationTest    at       = Selection.activeGameObject.GetComponent <AnimationTest>();
            Collider2D       collider = Selection.activeGameObject.GetComponent <Collider2D>();
            AnimationEvent[] events   = AnimationUtility.GetAnimationEvents(at.clip);
            AnimationEvent[] newEv    = new AnimationEvent[events.Length + 1];
            for (int i = 0; i < events.Length; i++)
            {
                newEv[i] = events[i];
            }
            newEv[newEv.Length - 1] = at.evt;
            AnimationUtility.SetAnimationEvents(at.clip, newEv);
        }
    }
    public override void OnInspectorGUI()
    {
        CameraTestTool cameraTestTool = (CameraTestTool)target;

        cameraTestTool.m_TargetTransCache = EditorGUILayout.ObjectField("Target: ", cameraTestTool.m_TargetTransCache, typeof(Transform)) as Transform;
        //EditorGUILayout.Separator();
        EditorGUILayout.Space();

        cameraTestTool.m_fDefaultDistance = EditorGUILayout.FloatField("Default Distance: ", cameraTestTool.m_fDefaultDistance);
        cameraTestTool.m_fDefaultPitch    = EditorGUILayout.FloatField("Default Pitch: ", cameraTestTool.m_fDefaultPitch);
        cameraTestTool.m_fDefaultYaw      = EditorGUILayout.FloatField("Default Yaw: ", cameraTestTool.m_fDefaultYaw);
        if (GUILayout.Button("Rest to default"))
        {
            cameraTestTool.m_fDistance = cameraTestTool.m_fDefaultDistance;
            cameraTestTool.m_fPitch    = cameraTestTool.m_fDefaultPitch;
            cameraTestTool.m_fYaw      = cameraTestTool.m_fDefaultYaw;
        }
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();
        cameraTestTool.m_fDistance = EditorGUILayout.FloatField("Distance: ", cameraTestTool.m_fDistance);
        cameraTestTool.m_fDistance = EditorGUILayout.Slider(cameraTestTool.m_fDistance, cameraTestTool.m_fDistanceMin, cameraTestTool.m_fDistanceMax);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        cameraTestTool.m_fPitch = EditorGUILayout.FloatField("Pitch: ", cameraTestTool.m_fPitch);
        cameraTestTool.m_fPitch = EditorGUILayout.Slider(cameraTestTool.m_fPitch, cameraTestTool.m_fPitchMin, cameraTestTool.m_fPitchMax);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        cameraTestTool.m_fYaw = EditorGUILayout.FloatField("Yaw: ", cameraTestTool.m_fYaw);
        cameraTestTool.m_fYaw = EditorGUILayout.Slider(cameraTestTool.m_fYaw, -180, 180);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        base.OnInspectorGUI();

        EditorGUILayout.LabelField("Camera Anim Name:  " + cameraTestTool.m_ExportFileName);

        if (GUILayout.Button("Clear Pitch Curve"))
        {
            cameraTestTool.m_PitchRock = new AnimationCurve();
        }
        if (GUILayout.Button("Clear Yaw Curve"))
        {
            cameraTestTool.m_YawRock = new AnimationCurve();
        }
        if (GUILayout.Button("Clear Distance Curve"))
        {
            cameraTestTool.m_DistanceRock = new AnimationCurve();
        }
        if (GUILayout.Button("Clear Offset Curve"))
        {
            cameraTestTool.m_OffsetYRock = new AnimationCurve();
        }
        if (GUILayout.Button("Clear All Curve"))
        {
            if (EditorUtility.DisplayDialog("警告,不可撤销", "清除正在编辑的所有曲线吗?", "是的", "再想想"))
            {
                cameraTestTool.m_PitchRock    = new AnimationCurve();
                cameraTestTool.m_YawRock      = new AnimationCurve();
                cameraTestTool.m_DistanceRock = new AnimationCurve();
                cameraTestTool.m_OffsetYRock  = new AnimationCurve();
            }
        }
        cameraTestTool.m_fRockDely = EditorGUILayout.FloatField("Delay Time: ", cameraTestTool.m_fRockDely);
        cameraTestTool.m_fRockTime = EditorGUILayout.FloatField("Rock Time: ", cameraTestTool.m_fRockTime);
        if (GUILayout.Button("Test Rock"))
        {
            cameraTestTool.StartTestRock();
            if (cameraTestTool.m_TargetTransCache != null)
            {
                AnimationTest animationTest = cameraTestTool.m_TargetTransCache.gameObject.GetComponentInChildren <AnimationTest>();
                if (animationTest != null)
                {
                    animationTest.Play();
                }
            }
        }
        EditorGUILayout.Space();

        if (GUILayout.Button("Export"))
        {
            string defaultName = cameraTestTool.m_ExportFileName == string.Empty ?
                                 "CameraAnimCurve" + (Convert.ToInt32(System.DateTime.Now.ToString("ddHHmmss")) * 10).ToString() :
                                 cameraTestTool.m_ExportFileName;
            string savePath = EditorUtility.SaveFilePanel("保存摄像机动画", DefaultSaveDir, defaultName, "txt");
            if (savePath.Length != 0)
            {
                cameraTestTool.m_ExportFileName = System.IO.Path.GetFileName(savePath);
                ExportCurve2TXT(cameraTestTool, savePath);
            }
        }
        if (GUILayout.Button("Import"))
        {
            if (EditorUtility.DisplayDialog("警告,不可撤销", "导入会覆盖正在编辑的所有曲线,确定要这么做吗?", "是的", "再想想"))
            {
                string defaultFilePath = DefaultSaveDir + cameraTestTool.m_ExportFileName + ".txt";
                string filePath        = EditorUtility.OpenFilePanel("打开摄像机动画", defaultFilePath, "txt");
                if (filePath.Length != 0)
                {
                    cameraTestTool.m_ExportFileName = System.IO.Path.GetFileName(filePath);
                    ReadCurveFromTxt(cameraTestTool, filePath);
                }
            }
        }
    }
예제 #5
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var rm = new RenderManager();

            rm.InitDevice(new Form1());

            var shaderFace = Shader <VertexConstData> .CreateFromString(rm, BlockShader.Code);

            shaderFace.CreateSamplerForPixelShader(0, new SamplerStateDescription
            {
                Filter   = Filter.MinMagMipLinear,
                AddressU = TextureAddressMode.Border,
                AddressV = TextureAddressMode.Border,
                AddressW = TextureAddressMode.Border,
            });

            var aotexture = new AmbientOcculsionTexture(rm);

            shaderFace.SetResourceForPixelShader(0, aotexture.ResourceView);

            var camera = new Camera(new Vector3(0, 0, 70));

            camera.SetForm(rm.Form);
            var proj = Matrix.PerspectiveFovLH((float)Math.PI / 4.0f, 800.0f / 600.0f, 0.1f, 1000.0f);

            //var model = ModelLoader.LoadModel("hiyori.model");
            var model = AnimationTest.CreateModel();
            //var segment = ModelLoader.LoadSegment("hiyori_walk.segment");
            var   segment        = AnimationTest.CreateSegment();
            var   animationFrame = new Frame(model.Parts.Length);
            float time           = 0;

            var bdm = new BlockDataManager(rm);

            bdm.SetLayoutFromShader(shaderFace);
            var renderer = new ModelRenderer(bdm, model)
            {
                Camera = camera,
                Proj   = proj,
                Shader = shaderFace,
            };

            var editor = new FormEditRotation(animationFrame);

            editor.Show();

            RenderLoopHelper.Run(rm, false, delegate(RenderContext frame)
            {
                //--- render world ---

                camera.Step();

                rm.ImmediateContext.ApplyShader(shaderFace);

                time += 0.1f;
                //segment.SetupFrame(animationFrame, time);
                lock (animationFrame)
                {
                    animationFrame.TransformModel(model);
                }

                renderer.Frame = frame;
                renderer.Render();

                //--- present ---

                frame.Present(true);
            });
        }