private void MakeSimulator()
        {
            MakeDefault();
            MakeDefaultSystem();

            // Model에 시뮬레이션 오브젝트를 추가하고 컴포넌트를 연결합니다.
            SimulationObject SimObj = model.AddObject();

            SimObj.Name = "Triangle";
            SimObj.AddComponent <GLDrawComponent>();
            SimObj.AddComponent <TransformBehavior>();
        }
Example #2
0
        public static void ComponentGetMultipleTest()
        {
            Scene            s = new Scene();
            SimulationObject o = s.AddObject();

            o.AddComponent <LifeCycleComponent>();
            o.AddComponent <LifeCycleComponent>();
            o.AddComponent <LifeCycleComponent>();
            IList <LifeCycleComponent> c = o.GetComponents <LifeCycleComponent>();

            Console.WriteLine(c.Count);
            foreach (object obj in c)
            {
                Console.WriteLine(obj.GetType().Name);
            }
        }
Example #3
0
        private void createModel()
        {
            loadAllFiles();

            // Create Camera
            {
                //Create Camera Components
                SimulationObject cameraObject = model.AddObject();
                cameraObject.Name = "cameraObj";

                Transform transform_camera = cameraObject.GetComponent <Transform>();
                transform_camera.Position = new Vector3(0.0f, 40.0f, 250.0f);

                ETE.Render.Component.Camera comp_camera = cameraObject.AddComponent <ETE.Render.Component.Camera>();
                comp_camera.TargetDisplay    = 0;
                comp_camera.BackGround_Color = new Vector4(0.2f, 0.2f, 0.4f, 1.0f);
                comp_camera.CameraOrder      = 0;
                comp_camera.Near             = 2.0f;
                comp_camera.Far          = 10000.0f;
                comp_camera.FOV          = 35.0f;
                comp_camera.Aspect_Ratio = 1.7021f;
            }

            createGTModel();
        }
        public static void ApplicationRun()
        {
            Console.WriteLine(MethodBase.GetCurrentMethod().ReflectedType.Name + "." + MethodBase.GetCurrentMethod().Name);
            Console.WriteLine("시뮬레이션 종료     : Ctrl + Q");
            Console.WriteLine("예외 처리 테스트    : Ctrl + X");
            Console.WriteLine("컴포넌트 활성/비활성: E");

            Scene                  scene  = new Scene();
            SimulationObject       simObj = null;
            LifecycleUserComponent lcCom  = null;

            for (int i = 0; i < 2; i++)
            {
                simObj      = scene.AddObject();
                simObj.Name = "Obj" + i.ToString();
                lcCom       = simObj.AddComponent <LifecycleUserComponent>();
            }

            AsyncScheduler sc = new AsyncScheduler();

            sc.AddRepetitionTask(new Action(() =>
            {
                if (true == ConsoleKeyboard.IsKeyDown(ConsoleKey.X) && true == ConsoleKeyboard.IsKeyDown(ConsoleModifiers.Control))
                {
                    Console.WriteLine("예외(Exception) 처리를 테스트합니다.");
                    Console.WriteLine("{0:H}", 0);
                }

                if (true == ConsoleKeyboard.IsKeyDown(ConsoleKey.E))
                {
                    Console.WriteLine("컴포넌트를 활성/비활성화합니다.");
                    Application.Current.Scheduler.Run(() =>
                    {
                        lcCom.Enabled = !lcCom.Enabled;
                    });
                }
            }));

            app = new Application();
            app.UnhandledException += App_UnhandledExceptionHandler;
            app.Scheduler           = sc;

            scene.AddSubSystem(new UserSubsystem());

            app.LoadScene(scene);
            app.Start();

            bool isRun = true;

            while (true == isRun)
            {
                if (true == ConsoleKeyboard.IsKeyDown(ConsoleKey.Q) && true == ConsoleKeyboard.IsKeyDown(ConsoleModifiers.Control))
                {
                    Console.WriteLine("시뮬레이션 엔진을 종료합니다.");
                    isRun = false;
                }
                Thread.Sleep(16);
            }
            app.Stop();
        }
Example #5
0
        public static void DestroyTest()
        {
            Scene                  DummyScene = new Scene();
            SimulationObject       SimObj     = DummyScene.AddObject();
            LifecycleUserComponent lc         = SimObj.AddComponent <LifecycleUserComponent>();

            SimObj.AddComponent <LifecycleUserComponent2>();

            Console.WriteLine("0");
            DummyScene.Update();

            Console.WriteLine("1");
            //ETE.Engine.Object.DestroyImmediate(SimObj);
            //DummyScene.Stop();
            ETE.Engine.Object.Destroy(lc);

            DummyScene.Update();
        }
Example #6
0
        public static void ComponentAddTest()
        {
            Scene              s = new Scene();
            SimulationObject   o = s.AddObject();
            LifeCycleComponent c = o.AddComponent <LifeCycleComponent>();

            Console.WriteLine(c.GetType().Name);
            Console.WriteLine(c);
        }
        public void AddObject()
        {
            // Model에 시뮬레이션 오브젝트를 추가하고 컴포넌트를 연결합니다.
            SimulationObject SimObj = model.AddObject();

            SimObj.Name = string.Format("Triangle{0}", SimObj.GetInstanceID().ToString("D3"));
            SimObj.AddComponent <GLDrawComponent>();
            SimObj.AddComponent <TransformBehavior>();
            SimObj.GetComponent <Transform>().LocalScale = new ETE.Geometry.Vector3(scale, scale, scale);
            scale *= 0.95f;

            // 오브젝트 관리
            ObjectBuffer.Add(SimObj);
            // 작업 결과를 버퍼에 추가
            LogBuffer.Add(new LogInfo()
            {
                Log = "Add " + SimObj.Name, Time = DateTime.Now
            });
        }
Example #8
0
        public static void ComponentDestroyTest()
        {
            Scene              s = new Scene();
            SimulationObject   o = s.AddObject();
            LifeCycleComponent c = o.AddComponent <LifeCycleComponent>();

            ETE.Engine.Object.DestroyImmediate(c);
            Console.WriteLine(c.GetType().Name);
            Console.WriteLine(c);
        }
Example #9
0
        public static void EventLifecycleOrderTest()
        {
            Application            a  = new Application();
            Scene                  s  = new Scene();
            SimulationObject       o  = s.AddObject();
            LifeCycleUserComponent c0 = o.AddComponent <LifeCycleUserComponent>();

            c0.Log = true;
            LifeCycleComponent c1 = o.AddComponent <LifeCycleComponent>();

            c1.Log = true;

            a.LoadScene(s);
            ManualScheduler sc = new ManualScheduler();

            a.Scheduler = sc;

            a.Start();
            sc.ManualUpdate();
            a.Stop();
        }
Example #10
0
        public static void FindObjectsTest()
        {
            Scene                  scene = new Scene();
            SimulationObject       obj   = scene.AddObject();
            LifecycleUserComponent com   = obj.AddComponent <LifecycleUserComponent>();

            Application app = new Application();

            app.LoadScene(scene);

            //IList<SimulationObject> objs = scene.FindObjectsOfType<SimulationObject>();
            //IList<Component> coms = scene.FindObjectsOfType<Component>();
        }
Example #11
0
        static void SimObjectEnableTest()
        {
            Scene                  DummyScene = new Scene();
            SimulationObject       SimObj     = DummyScene.AddObject();
            LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

            Console.WriteLine("0");
            DummyScene.Update();

            Console.WriteLine("1");
            SimObj.SetActive(false);
            DummyScene.Update();

            Console.WriteLine("2");
            SimObj.SetActive(true);
            DummyScene.Update();
        }
Example #12
0
        public static void EventSubsystemToComponentTest()
        {
            Application a = new Application();
            Scene       s = new Scene();

            s.AddSubSystem(new TestSubSystem());
            SimulationObject   o = s.AddObject();
            LifeCycleComponent c = o.AddComponent <LifeCycleComponent>();

            a.LoadScene(s);
            ManualScheduler sc = new ManualScheduler();

            a.Scheduler = sc;

            a.Start();
            sc.ManualUpdate();
            a.Stop();
        }
Example #13
0
        private void createModel()
        {
            //-----------------------------------
            //scene에서 사용할 모든 GTM 파일을 적으세요
            //mesh & material pool 구성
            if (RenderAsset.getRenderAsset() != null)
            {
                // 객체 로드
                RenderAsset.Load("tidus/tidus.gtm", typeof(Mesh));
                RenderAsset.Load("tidus/tidus.gtm", typeof(Material));
                RenderAsset.Load("shader/lighting.sh", typeof(Shader));

                //RenderAsset.Load("tidus/tidus.gtm", typeof(Mesh));
                //RenderAsset.Load("tidus/tidus.gtm", typeof(Material));
                //RenderAsset.Load("shader/lighting.sh", typeof(Shader));

                // 데이터 취득
                Mesh[]     meshArray     = RenderAsset.GetObjectsOfTypeAll(typeof(Mesh)) as Mesh[];
                Material[] materialArray = RenderAsset.GetObjectsOfTypeAll(typeof(Material)) as Material[];
                Shader[]   shaderArray   = RenderAsset.GetObjectsOfTypeAll(typeof(Shader)) as Shader[];

                // Create Model(Create Mesh by Model)
                int meshLength = meshArray.GetLength(0);

                for (int i = 0; i < meshLength; ++i)
                {
                    SimulationObject testObject = model.AddObject();
                    testObject.Name = meshArray[i].getMeshName() + "_Node";

                    Transform transform_test = testObject.GetComponent <Transform>();
                    transform_test.Position = new Vector3(0.0f, 0.0f, 0.0f);

                    MeshFilter meshfilter_test = testObject.AddComponent <MeshFilter>();
                    meshfilter_test.mesh = meshArray[i];

                    Material material_test = materialArray[i];
                    material_test.Shader = shaderArray[0];

                    MeshRenderer meshrenderer = testObject.AddComponent <MeshRenderer>();
                    meshrenderer.material = material_test;

                    //UserControl은 단순히 모델을 회전시켜주는 역할을 합니다.
                    UserControl.MeshControl mc = testObject.AddComponent <UserControl.MeshControl>();
                }

                // Create Cube(Create Mesh by Script)
                SimulationObject CubeObject = model.AddObject();
                CubeObject.Name = "CreateMesh_Test";

                Transform transform_Cube = CubeObject.GetComponent <Transform>();
                transform_Cube.Position = new Vector3(0.0f, 0.0f, 0.0f);

                UserControl.CreateMesh cm = CubeObject.AddComponent <UserControl.CreateMesh>();

                // Create Camera
                // 현재 있는 View 개수만큼 Camera를 생성합니다.
                int[] targetNumbers = ETE.Render.EGL.GLUserControlManager.Instance.getTargetNumbers();
                foreach (int targetnumber in targetNumbers)
                {
                    SimulationObject cameraObject = SimulationApplication.Instance.getModel().AddObject();
                    cameraObject.Name = "cameraObj";

                    ETE.Render.Component.Camera comp_camera = cameraObject.AddComponent <ETE.Render.Component.Camera>();
                    comp_camera.TargetDisplay    = targetnumber;
                    comp_camera.BackGround_Color = new Vector4(0.2f, 0.2f, 0.4f, 1.0f);
                    comp_camera.CameraOrder      = 0;
                    comp_camera.Near             = 2.0f;
                    comp_camera.Far          = 10000.0f;
                    comp_camera.FOV          = 35.0f;
                    comp_camera.Aspect_Ratio = 1.7021f;

                    // Camera의 위치 설정
                    Transform transform_camera = cameraObject.GetComponent <Transform>();
                    if (targetnumber == 0)
                    {
                        transform_camera.Position    = new Vector3(0.0f, 40.0f, 250.0f);
                        transform_camera.EulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
                    }
                    else if (targetnumber == 1)
                    {
                        transform_camera.Position    = new Vector3(0.0f, 250.0f, 0.0f);
                        transform_camera.EulerAngles = new Vector3(-90.0f, 0.0f, 0.0f);
                    }
                    else if (targetnumber == 2)
                    {
                        transform_camera.Position    = new Vector3(250.0f, 40.0f, 0.0f);
                        transform_camera.EulerAngles = new Vector3(0.0f, 90.0f, 0.0f);
                    }
                    else if (targetnumber == 3)
                    {
                        transform_camera.Position    = new Vector3(130.0f, 200.0f, 130.0f);
                        transform_camera.EulerAngles = new Vector3(-45.0f, 45.0f, 0.0f);
                    }
                }
            }
        }
Example #14
0
        public static void LifecycleTest()
        {
            Console.WriteLine(MethodBase.GetCurrentMethod().ReflectedType.Name + "." + MethodBase.GetCurrentMethod().Name);

            Console.WriteLine("0 Result: 0, Awake, OnEnable, Start, 1, OnDisable, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                DummyScene.Update();

                Console.WriteLine("1");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("1 Result: 0, Awake, 1, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                lcCom.Enabled = false;
                DummyScene.Update();

                Console.WriteLine("1");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("2 Result: 0, 1");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                SimObj.SetActive(false);
                DummyScene.Update();

                Console.WriteLine("1");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("3 Result: 0, 1, Awake, OnEnable, Start, 2, OnDisable, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                SimObj.SetActive(false);
                DummyScene.Update();

                Console.WriteLine("1");
                SimObj.SetActive(true);
                DummyScene.Update();

                Console.WriteLine("2");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("4 Result: 0, Awake, OnEnable, Start, 1, OnDisable, 2, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                DummyScene.Update();

                Console.WriteLine("1");
                lcCom.Enabled = false;

                Console.WriteLine("2");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("5 Result: 0, Awake, OnEnable, Start, 1, OnDisable, 2, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                DummyScene.Update();

                Console.WriteLine("1");
                SimObj.SetActive(false);

                Console.WriteLine("2");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("6 Result: 0, Awake, OnEnable, Start, 1, OnDisable, 2, 3, 4, OnEnable, 5, OnDisable, 6, 7, OnEnable, 8, OnDisable, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                DummyScene.Update();

                Console.WriteLine("1");
                SimObj.SetActive(false);

                Console.WriteLine("2");
                lcCom.Enabled = false;

                Console.WriteLine("3");
                SimObj.SetActive(true);

                Console.WriteLine("4");
                lcCom.Enabled = true;

                Console.WriteLine("5");
                lcCom.Enabled = false;
                SimObj.SetActive(false);

                Console.WriteLine("6");
                lcCom.Enabled = true;

                Console.WriteLine("7");
                SimObj.SetActive(true);

                Console.WriteLine("8");
                ETE.Engine.Object.DestroyImmediate(SimObj);
            }

            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("7 Result: 0, Awake, OnEnable, Awake, OnEnable, Start, Start, 1, OnDisable, OnDestroy, 2, OnDisable, OnDestroy");
            {
                Scene DummyScene = new Scene();

                SimulationObject SimObj1 = DummyScene.AddObject();
                SimObj1.Name = "Obj1";
                LifecycleUserComponent lcCom1 = SimObj1.AddComponent <LifecycleUserComponent>();

                SimulationObject SimObj2 = DummyScene.AddObject();
                SimObj2.Name = "Obj2";
                LifecycleUserComponent lcCom2 = SimObj2.AddComponent <LifecycleUserComponent>();

                Console.WriteLine("0");
                DummyScene.Update();

                Console.WriteLine("1");
                ETE.Engine.Object.DestroyImmediate(SimObj1);

                Console.WriteLine("2");
                ETE.Engine.Object.DestroyImmediate(SimObj2);
            }


            Console.ReadKey(true);
            Console.WriteLine("\n");
            Console.WriteLine("8 Result: 0, 1, 2, Awake, OnEanble, Start, 3, OnDisable, OnDestroy");
            {
                Scene                  DummyScene = new Scene();
                SimulationObject       SimObj     = DummyScene.AddObject();
                LifecycleUserComponent lcCom      = SimObj.AddComponent <LifecycleUserComponent>();

                lcCom.Enabled = false;
                SimObj.SetActive(false);
                Console.WriteLine("0");
                DummyScene.Update();

                lcCom.Enabled = true;
                Console.WriteLine("1");
                DummyScene.Update();

                SimObj.SetActive(true);
                Console.WriteLine("2");
                DummyScene.Update();

                Console.WriteLine("3");
                DummyScene.Stop();
            }
        }
Example #15
0
        private void createObjects()
        {
            //Create Render Components_1
            SimulationObject testObject = model.AddObject();

            testObject.Name = "testObj";

            Transform transform_test = testObject.GetComponent <Transform>();

            transform_test.Position = new Vector3(0.0f, 0.0f, 0.0f);

            MeshFilter meshfilter_test = testObject.AddComponent <MeshFilter>();

            meshfilter_test.mesh = new Mesh("filepath", "Mesh");

            Material material_test = new Material(new Shader("filepath"));

            material_test.MainTexture = new Texture2D("filepath");
            material_test.Color       = new Vector4(1.0f, 0.0f, 0.0f, 1.0f);

            MeshRenderer meshrenderer = testObject.AddComponent <MeshRenderer>();

            meshrenderer.material = material_test;

            //Create Render Components_2
            SimulationObject testObject_2 = model.AddObject();

            testObject_2.Name = "testObj_2";

            Transform transform_test_2 = testObject_2.GetComponent <Transform>();

            transform_test_2.Position = new Vector3(0.0f, 0.0f, 0.0f);

            MeshFilter meshfilter_test_2 = testObject_2.AddComponent <MeshFilter>();

            meshfilter_test_2.mesh = new Mesh("filepath", "Mesh");

            Material material_test_2 = new Material(new Shader("filepath"));

            material_test_2.MainTexture = new Texture2D("filepath");
            material_test_2.Color       = new Vector4(1.0f, 0.0f, 0.0f, 1.0f);

            MeshRenderer meshrenderer_2 = testObject_2.AddComponent <MeshRenderer>();

            meshrenderer_2.material = material_test_2;

            //Create Camera Components
            SimulationObject cameraObject = model.AddObject();

            cameraObject.Name = "cameraObj";

            Transform transform_camera = cameraObject.GetComponent <Transform>();

            transform_camera.Position = new Vector3(0.0f, 0.0f, 0.0f);

            ETE.Render.Component.Camera comp_camera = cameraObject.AddComponent <ETE.Render.Component.Camera>();
            //comp_camera.Root = testObject;
            comp_camera.TargetDisplay    = 0; //아직 EGL 개발되지않음
            comp_camera.BackGround_Color = new Vector4(1.0f, 0.0f, 0.0f, 1.0f);
            comp_camera.CameraOrder      = 0;
        }
Example #16
0
        private void PhysicsScene01()
        {
            SimulationObject simObj      = null;
            Rigidbody        rigidbody   = null;
            BoxCollider      boxCollider = null;

            Mesh[]       meshArray     = RenderAsset.Load("box.gtm", typeof(Mesh)) as Mesh[];
            Material[]   materialArray = RenderAsset.Load("box.gtm", typeof(Material)) as Material[];
            MeshFilter   meshFilter    = null;
            MeshRenderer meshRender    = null;

            Mesh     mesh     = meshArray[0];
            Material material = materialArray[0];

            Shader shader = new Shader();

            material.Shader = shader;


            // static body
            {
                simObj      = model.AddObject();
                simObj.Name = "GroundObj";

                Transform transform = simObj.GetComponent <Transform>();
                transform.Position   = new Vector3(0, -1, 0);
                transform.LocalScale = new Vector3(50, 0.1f, 50);

                //add render component
                meshFilter      = simObj.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObj.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody      = simObj.AddComponent <Rigidbody>();
                rigidbody.mass = 0;

                boxCollider      = simObj.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);
            }


            // dynamic body
            for (int i = 0; i < 10; i++)
            {
                simObj = model.AddObject();
                if (simObj != null)
                {
                    simObj.Name = "simObj" + i;

                    Transform transform = simObj.GetComponent <Transform>();
                    transform.Position = new Vector3(0, 20, 0);

                    //add render component
                    meshFilter      = simObj.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = simObj.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody = simObj.AddComponent <Rigidbody>();
                    rigidbody.detectCollisions = false; // 충돌 이벤트 발생 하지 않음

                    boxCollider      = simObj.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }
            }
        }
Example #17
0
        private void PhysicsScene02()
        {
            SimulationObject simObject   = null;
            Rigidbody        rigidbody   = null;
            BoxCollider      boxCollider = null;

            Mesh[]       meshArray     = RenderAsset.Load("box.gtm", typeof(Mesh)) as Mesh[];
            Material[]   materialArray = RenderAsset.Load("box.gtm", typeof(Material)) as Material[];
            MeshFilter   meshFilter    = null;
            MeshRenderer meshRender    = null;

            Mesh     mesh     = meshArray[0];
            Material material = materialArray[0];

            Shader shader = new Shader();

            material.Shader = shader;


            bool enableFixedJoint     = true;
            bool enableHingeJoint     = true;
            bool enableCharacterJoint = true;



            // fixedjoint test
            if (enableFixedJoint)
            {
                Transform transform = null;

                // Root1
                SimulationObject Root = model.AddObject();
                if (Root != null)
                {
                    Root.Name = "MyRoot1";

                    transform          = Root.GetComponent <Transform>();
                    transform.Position = new Vector3(-5, 0, 0);

                    //add render component
                    meshFilter      = Root.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = Root.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody      = Root.AddComponent <Rigidbody>();
                    rigidbody.mass = 0;

                    boxCollider      = Root.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }

                // simObject1
                simObject      = model.AddObject();
                simObject.Name = "simObject1";


                transform          = simObject.GetComponent <Transform>();
                transform.Position = new Vector3(-5, 0, 0);


                //add render component
                meshFilter      = simObject.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObject.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody = simObject.AddComponent <Rigidbody>();

                boxCollider      = simObject.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);

                FixedJoint fixedjoint = Root.AddComponent <FixedJoint>();
                if (fixedjoint != null)
                {
                    // 연결 대상과 연결 지점 설정
                    fixedjoint.connectedBody   = simObject.GetComponent <Rigidbody>();
                    fixedjoint.connectedAnchor = new Vector3(0, -1.5f, 0);
                }
            }



            // hingejoint test
            if (enableHingeJoint)
            {
                Transform transform = null;

                // Root2
                SimulationObject Root = model.AddObject();
                if (Root != null)
                {
                    Root.Name = "MyRoot2";

                    transform          = Root.GetComponent <Transform>();
                    transform.Position = new Vector3(0, 0, 0);

                    //add render component
                    meshFilter      = Root.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = Root.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody      = Root.AddComponent <Rigidbody>();
                    rigidbody.mass = 0;

                    boxCollider      = Root.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }

                // simObject2
                simObject      = model.AddObject();
                simObject.Name = "simObject2";


                transform          = simObject.GetComponent <Transform>();
                transform.Position = new Vector3(0, 0, 0);


                //add render component
                meshFilter      = simObject.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObject.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody = simObject.AddComponent <Rigidbody>();

                boxCollider      = simObject.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);

                HingeJoint hingejoint = null;
                hingejoint = Root.AddComponent <HingeJoint>();
                if (hingejoint != null)
                {
                    // 연결 대상 설정
                    hingejoint.connectedBody = simObject.GetComponent <Rigidbody>();

                    // 연결 지점 설정
                    hingejoint.anchor          = new Vector3(0, 0, 0);
                    hingejoint.connectedAnchor = new Vector3(0, 1.5f, 0);

                    // 회전축 지정
                    hingejoint.axis = new Vector3(0, 0, 1);

                    // 회전 최소/최대각 지정
                    hingejoint.useLimits = true;

                    JointLimits jointlimits = hingejoint.limits;
                    jointlimits.min       = -70 * ((float)Math.PI / 180.0f);
                    jointlimits.max       = 70 * ((float)Math.PI / 180.0f);
                    jointlimits.minBounce = 1.0f;
                    jointlimits.maxBounce = 1.0f;
                    hingejoint.limits     = jointlimits;
                }
            }



            // characterjoint test
            if (enableCharacterJoint)
            {
                Transform transform = null;

                // Root3
                SimulationObject Root = model.AddObject();
                if (Root != null)
                {
                    Root.Name = "MyRoot3";

                    transform          = Root.GetComponent <Transform>();
                    transform.Position = new Vector3(5, 0, 0);

                    //add render component
                    meshFilter      = Root.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = Root.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody      = Root.AddComponent <Rigidbody>();
                    rigidbody.mass = 0;

                    boxCollider      = Root.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }

                // simObject3
                simObject      = model.AddObject();
                simObject.Name = "simObject3";

                transform          = simObject.GetComponent <Transform>();
                transform.Position = new Vector3(5, 0, 0);

                //add render component
                meshFilter      = simObject.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObject.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody = simObject.AddComponent <Rigidbody>();

                boxCollider      = simObject.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);

                CharacterJoint characterjoint = null;
                characterjoint = Root.AddComponent <CharacterJoint>();
                if (characterjoint != null)
                {
                    // 연결 대상 설정
                    characterjoint.connectedBody = simObject.GetComponent <Rigidbody>();

                    // 연결 지점 설정
                    characterjoint.anchor          = new Vector3(0, -1.5f, 0);
                    characterjoint.connectedAnchor = new Vector3(0, 1.5f, 0);

                    // 회전축 및 회전 제한각 설정
                    characterjoint.axis = new Vector3(0, 0, 1); // twist&swing axis
                    characterjoint.setLimit(((float)Math.PI) * 0.2f, ((float)Math.PI) * 0.2f, 0);
                }
            }
        }