private PaS GetPositionAndScale(int id) { PaS pas = new PaS(); if (id == (int)BlockType.Wheel) { pas.Position = new Vector3(0, 0, 0.165f); pas.Scale = Vector3.one; return(pas); } if (id == (int)BlockType.LargeWheel) { pas.Position = new Vector3(0, 0, 0.165f); pas.Scale = Vector3.one; return(pas); } if (id == (int)BlockType.WheelUnpowered) { pas.Position = new Vector3(0, 0, 0.165f); pas.Scale = Vector3.one; return(pas); } if (id == (int)BlockType.LargeWheelUnpowered) { pas.Position = new Vector3(0, 0, 0.165f); pas.Scale = Vector3.one; return(pas); } return(PaS.one); }
protected override void OnSimulateStart() { //BrakeKey = GetKey(Brake); HJ = GetComponent <HingeJoint>(); Colliders = GetComponentsInChildren <Collider>(); MyId = GetComponent <BlockVisualController>().ID; angleDrag = GetComponent <Rigidbody>().angularDrag; JointLimits jl = HJ.limits; jl.min = jl.max = jl.bounciness = jl.bounceMinVelocity = 0; HJ.limits = jl; HJ.spring = new JointSpring() { damper = 10000, spring = 10000, targetPosition = 0 }; if (Collider) { //禁用原有碰撞 foreach (Collider c in Colliders) { if (c.name == "CubeColliders") { c.enabled = false; } } WheelCollider = new GameObject("Wheel Collider"); mFilter = WheelCollider.AddComponent <MeshFilter>(); mFilter.mesh = WheelMesh = SimpleMesh.MeshFromObj(Application.dataPath + "/Mods/Resources/BlockEnhancement/Wheel.obj"); mCollider = WheelCollider.AddComponent <MeshCollider>(); mCollider.convex = true; PM = mCollider.material; //静摩擦力 PM.staticFriction = Friction; //动摩擦力 PM.dynamicFriction = Friction; //摩擦力组合 PM.frictionCombine = PhysicMaterialCombine.Multiply; //弹力 PM.bounciness = 0; //弹力组合 PM.bounceCombine = PhysicMaterialCombine.Minimum; #if DEBUG mRenderer = WheelCollider.AddComponent <MeshRenderer>(); mRenderer.material.color = Color.red; #endif PaS pas = GetPositionAndScale(MyId); WheelCollider.transform.parent = mCollider.transform.parent = transform; WheelCollider.transform.rotation = mCollider.transform.rotation = transform.rotation; WheelCollider.transform.position = mCollider.transform.position = transform.TransformPoint(transform.InverseTransformPoint(transform.position) + pas.Position); WheelCollider.transform.localScale = mCollider.transform.localScale = pas.Scale; WheelCollider.AddComponent <DestroyIfEditMode>(); } else if (FrictionT) { //设置原有碰撞的参数 foreach (Collider c in Colliders) { if (c.name == "CubeColliders") { PhysicMaterial PM = c.GetComponent <BoxCollider>().material; //静摩擦力 PM.staticFriction = Friction; //动摩擦力 PM.dynamicFriction = Friction; Debug.Log(PM.bounciness); //摩擦力组合 PM.frictionCombine = PhysicMaterialCombine.Multiply; //弹力 PM.bounciness = 0; //弹力组合 PM.bounceCombine = PhysicMaterialCombine.Minimum; } } } if (MyId == (int)BlockType.Wheel || MyId == (int)BlockType.LargeWheel) { CMCH = GetComponent <CogMotorControllerHinge>(); CMCH.speedLerpSmooth = Lerp; } }