private void MakeSimulator() { MakeDefault(); MakeDefaultSystem(); // Model에 시뮬레이션 오브젝트를 추가하고 컴포넌트를 연결합니다. SimulationObject SimObj = model.AddObject(); SimObj.Name = "Triangle"; SimObj.AddComponent <GLDrawComponent>(); SimObj.AddComponent <TransformBehavior>(); }
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); } }
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(); }
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(); }
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 }); }
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); }
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(); }
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>(); }
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(); }
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(); }
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); } } } }
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(); } }
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; }
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); } } }
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); } } }