private static void FindHangPoint(Transform root, Transform trans, SerializedProperty transNameProperty, SerializedProperty transProperty, HangPointItem hangPointItem) { int count = trans.childCount; for (int i = 0; i < count; i++) { var child = trans.GetChild(i); if (child.tag == "HangPoint_Transform" && transNameProperty != null && transProperty != null) { transNameProperty.InsertArrayElementAtIndex(transNameProperty.arraySize); transProperty.InsertArrayElementAtIndex(transProperty.arraySize); var prop = transNameProperty.GetArrayElementAtIndex(transNameProperty.arraySize - 1); var objPorp = transProperty.GetArrayElementAtIndex(transProperty.arraySize - 1); prop.stringValue = child.name; objPorp.objectReferenceValue = child; } else if (child.tag == "HangPoint_Position" && hangPointItem != null) { HangPointData hangPointData = new HangPointData(); hangPointData.name = child.name; var pos = child.position; var localPos = root.InverseTransformPoint(pos); hangPointData.position = new TSVector(FP.FromFloat(localPos.x), FP.FromFloat(localPos.y), FP.FromFloat(localPos.z)); var forward = child.forward; var localForward = root.InverseTransformDirection(forward); hangPointData.forward = new TSVector(FP.FromFloat(localForward.x), FP.FromFloat(localForward.y), FP.FromFloat(localForward.z)); hangPointItem.mLstData.Add(hangPointData); } FindHangPoint(root, child, transNameProperty, transProperty, hangPointItem); } }
// tnISyncablePlayerInput's interface public void SyncedInput(tnInput o_Input) { Vector2 input = new Vector2(m_HorizontalAxis, m_VerticalAxis); if (input.sqrMagnitude > 1f) { input.Normalize(); } if (m_EnableInputCompression) { int intX = (int)(input.x * s_InputPrecision); int intY = (int)(input.y * s_InputPrecision); o_Input.SetInt(m_HorizontalAxisCode, intX); o_Input.SetInt(m_VerticalAxisCode, intY); } else { o_Input.SetFP(m_HorizontalAxisCode, FP.FromFloat(input.x)); o_Input.SetFP(m_VerticalAxisCode, FP.FromFloat(input.y)); } if (m_DashRequested) { o_Input.SetByte(m_DashRequestedCode, (byte)1); m_DashRequested = false; } }
private static void FindCollider(Transform root, Transform trans, GameColliderItem gameColliderItem) { int count = trans.childCount; for (int i = 0; i < count; i++) { var child = trans.GetChild(i); if (child.tag == "GameCollider" && gameColliderItem != null) { Collider collider = child.GetComponent <Collider>(); if (collider != null) { var scale = child.lossyScale; collider.enabled = false; if (scale.x != 1 || scale.y != 1 || scale.z != 1) { EditorUtility.DisplayDialog("提示", "child=" + child.name + "不能有缩放", "知道了"); return; } if (collider is SphereCollider) { SphereCollider sphereCollider = (SphereCollider)collider; CircleColliderData colliderData = new CircleColliderData(); colliderData.name = child.name; colliderData.gameColliderType = GameColliderType.CircleCollider; Vector3 center = child.TransformPoint(sphereCollider.center); var localCenter = root.InverseTransformPoint(center); colliderData.center = new TSVector(FP.FromFloat(localCenter.x), 0, FP.FromFloat(localCenter.z)); var localForward = child.forward; colliderData.forward = new TSVector(FP.FromFloat(localForward.x), 0, FP.FromFloat(localForward.z)); colliderData.radius = FP.FromFloat(sphereCollider.radius); gameColliderItem.mLstData.Add(colliderData); } else if (collider is BoxCollider) { BoxCollider boxCollider = (BoxCollider)collider; RectColliderData colliderData = new RectColliderData(); colliderData.name = child.name; colliderData.gameColliderType = GameColliderType.RectCollider; Vector3 center = child.TransformPoint(boxCollider.center); var localCenter = root.InverseTransformPoint(center); colliderData.center = new TSVector(FP.FromFloat(localCenter.x), 0, FP.FromFloat(localCenter.z)); var localForward = child.forward; colliderData.forward = new TSVector(FP.FromFloat(localForward.x), 0, FP.FromFloat(localForward.z)); colliderData.halfWidth = FP.FromFloat(boxCollider.size.x / 2f); colliderData.halfHeight = FP.FromFloat(boxCollider.size.z / 2f); gameColliderItem.mLstData.Add(colliderData); } else { EditorUtility.DisplayDialog("提示", "暂时不支持" + collider.GetType().ToString() + "碰撞框(请删除它再重试)", "知道了"); return; } } } FindCollider(root, child, gameColliderItem); } }
private void OnJoystickMove(Vector2 vector2) { if (PvpPlayerMgr.Instance.mainPlayer != null && PvpPlayerMgr.Instance.mainPlayer.unit != null) { if (vector2.magnitude > minDirLen) { var dir = new TSVector(FP.FromFloat(vector2.x), 0, FP.FromFloat(vector2.y)); dir.Normalize(); PvpPlayerMgr.Instance.mainPlayer.unit.ReqMoveForward(dir); } } }
void Update() { if (c2d_collider != null) { var pos = transform.position; c2d_collider.center = new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)); } if (other != null) { if (c2d_collider.CheckCollider(other.c2d_collider)) { CLog.Log("碰撞"); } } }
void OnGUI() { if (GUI.Button(new Rect(0, 0, 100, 50), "计算碰撞")) { var offset = To(B.position) - To(A.position); if (TSCheck2D.CheckRectangleAndLine(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), ref offset)) { Debug.Log("碰撞成功"); if (go == null) { go = GameObject.CreatePrimitive(PrimitiveType.Sphere); go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); } go.transform.position = A.position + new Vector3(offset.x.AsFloat(), 0, offset.y.AsFloat()); } else { Debug.Log("碰撞失败"); } } if (GUI.Button(new Rect(100, 0, 100, 50), "计算AABB碰撞")) { var offset = To(B.position) - To(A.position); FP result = TSCheck2D.CheckAabbAndLine(To(Box.position), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), offset.normalized, offset.magnitude); if (result >= 0) { Debug.Log("碰撞成功"); if (go == null) { go = GameObject.CreatePrimitive(PrimitiveType.Sphere); go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); } TSVector2 resultOffset = offset.normalized * result; go.transform.position = A.position + new Vector3(resultOffset.x.AsFloat(), 0, resultOffset.y.AsFloat()); } else { Debug.Log("碰撞失败"); if (go != null) { GameObject.Destroy(go); go = null; } } } }
// tnISyncablePlayerInput's interface public void SyncedInput(tnInput o_Input) { float horizontalAxis = m_CharacterInput.GetAxis(InputActions.s_HorizontalAxis); float verticalAxis = m_CharacterInput.GetAxis(InputActions.s_VerticalAxis); bool buttonPressed = m_CharacterInput.GetButton(InputActions.s_PassButton); if (m_EnableInputCompression) { int intX = (int)(horizontalAxis * s_InputPrecision); int intY = (int)(verticalAxis * s_InputPrecision); o_Input.SetInt(m_HorizontalAxisCode, intX); o_Input.SetInt(m_VerticalAxisCode, intY); } else { o_Input.SetFP(m_HorizontalAxisCode, FP.FromFloat(horizontalAxis)); o_Input.SetFP(m_VerticalAxisCode, FP.FromFloat(verticalAxis)); } o_Input.SetByte(m_ButtonPressedCode, buttonPressed ? (byte)1 : (byte)0); }
void Start() { Collider2D collider = GetComponent <Collider2D>(); var pos = transform.position; var up = transform.up; var scale = transform.lossyScale; if (collider != null) { if (collider is BoxCollider2D) { var c = (BoxCollider2D)collider; float halfWidth = scale.x * c.size.x / 2; float halfHeight = scale.y * c.size.y / 2; c2d_collider = new C2D_Rect(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)), new TSVector2(FP.FromFloat(up.x), FP.FromFloat(up.y)), FP.FromFloat(halfWidth), FP.FromFloat(halfHeight)); } else if (collider is CircleCollider2D) { var c = (CircleCollider2D)collider; float radius = Mathf.Max(scale.x, scale.y) * c.radius; c2d_collider = new C2D_Circle(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)), new TSVector2(FP.FromFloat(up.x), FP.FromFloat(up.y)), FP.FromFloat(radius)); } } }
public static void Draw(NEDataProperty[] properties, params GUILayoutOption[] options) { if (properties == null) { return; } EditorGUILayout.BeginVertical(options); foreach (NEDataProperty property in properties) { object oldValue = property.GetValue(); object newValue = null; switch (property.Type) { case NEDatapRropertyType.Integer: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(property.Name); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); newValue = EditorGUILayout.IntField((int)oldValue, options); EditorGUILayout.EndHorizontal(); break; case NEDatapRropertyType.Float: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(property.Name); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); newValue = EditorGUILayout.FloatField((float)oldValue, options); EditorGUILayout.EndHorizontal(); break; case NEDatapRropertyType.FP: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(property.Name); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); float oldFloatValue = ((FP)oldValue).AsFloat(); float newFloatValue = EditorGUILayout.FloatField(oldFloatValue, options); newValue = FP.FromFloat(newFloatValue); EditorGUILayout.EndHorizontal(); break; case NEDatapRropertyType.Boolean: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(property.Name); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); newValue = EditorGUILayout.Toggle((bool)oldValue, options); EditorGUILayout.EndHorizontal(); break; case NEDatapRropertyType.String: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(property.Name); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); newValue = EditorGUILayout.TextField((String)oldValue, options); EditorGUILayout.EndHorizontal(); break; case NEDatapRropertyType.Vector2: newValue = EditorGUILayout.Vector2Field(property.Name, (Vector2)oldValue, options); break; case NEDatapRropertyType.Vector3: newValue = EditorGUILayout.Vector3Field(property.Name, (Vector3)oldValue, options); break; case NEDatapRropertyType.Enum: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(property.Name); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); newValue = EditorGUILayout.EnumPopup((Enum)oldValue, options); EditorGUILayout.EndHorizontal(); break; case NEDatapRropertyType.Array: EditorGUILayout.BeginHorizontal(); property.isShow = EditorGUILayout.Foldout(property.isShow, property.Name); EditorGUILayout.EndHorizontal(); newValue = property.GetValue(); if (property.isShow) { EditorGUILayout.BeginHorizontal(); Space(3); int oldLen = property.GetArrayLen(); int newLen = EditorGUILayout.IntField("Len:", oldLen, options); if (oldLen != newLen) { property.SetArrayLen(newLen); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); Space(3); var array = newValue as Array; if (array != null) { DrawArray(array, options); } EditorGUILayout.EndHorizontal(); } break; default: break; } if (oldValue != newValue) { property.SetValue(newValue); } } EditorGUILayout.EndVertical(); }
public static void DrawArray(Array array, params GUILayoutOption[] options) { EditorGUILayout.BeginVertical(); //Space(3); Type type = array.GetType().GetElementType(); for (int i = 0; i < array.Length; i++) { EditorGUILayout.BeginHorizontal(); var oldValue = array.GetValue(i); if (type == typeof(int)) { var newValue = EditorGUILayout.IntField(i.ToString(), (int)oldValue, options); if (newValue != (int)oldValue) { array.SetValue(newValue, i); } } else if (type == typeof(float)) { var newValue = EditorGUILayout.FloatField(i.ToString(), (float)oldValue, options); if (newValue != (float)oldValue) { array.SetValue(newValue, i); } } else if (type == typeof(FP)) { float oldFloatValue = ((FP)oldValue).AsFloat(); float newFloatValue = EditorGUILayout.FloatField(i.ToString(), oldFloatValue, options); var newValue = FP.FromFloat(newFloatValue); if (newValue != (FP)oldValue) { array.SetValue(newValue, i); } } else if (type == typeof(bool)) { var newValue = EditorGUILayout.Toggle(i.ToString(), (bool)oldValue, options); if (newValue != (bool)oldValue) { array.SetValue(newValue, i); } } else if (type == typeof(string)) { var newValue = EditorGUILayout.TextField(i.ToString(), (string)oldValue, options); if (newValue != (string)oldValue) { array.SetValue(newValue, i); } } else if (type == typeof(Vector2)) { var newValue = EditorGUILayout.Vector2Field(i.ToString(), (Vector2)oldValue, options); if (newValue != (Vector2)oldValue) { array.SetValue(newValue, i); } } else if (type == typeof(Vector3)) { var newValue = EditorGUILayout.Vector3Field(i.ToString(), (Vector3)oldValue, options); if (newValue != (Vector3)oldValue) { array.SetValue(newValue, i); } } else if (type.IsEnum) { var newValue = EditorGUILayout.EnumPopup(i.ToString(), (Enum)oldValue, options); if (newValue != (Enum)oldValue) { array.SetValue(newValue, i); } } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); }
void Update() { //var offset = To(B.position) - To(A.position); //FP result = TSCheck2D.CheckAabbAndLine(To(Box.position), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), offset.normalized, offset.magnitude); //if (result >= 0) //{ // if (go == null) // { // go = GameObject.CreatePrimitive(PrimitiveType.Sphere); // go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); // } // TSVector2 resultOffset = offset.normalized * result; // go.transform.position = A.position + new Vector3(resultOffset.x.AsFloat(), 0, resultOffset.y.AsFloat()); //} //else //{ // if (go != null) // { // GameObject.Destroy(go); // go = null; // } //} //var offset = To(B.position) - To(A.position); //if (TSCheck2D.CheckRectangleAndLine(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), ref offset)) //{ // if (go == null) // { // go = GameObject.CreatePrimitive(PrimitiveType.Sphere); // go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); // } // go.transform.position = A.position + new Vector3(offset.x.AsFloat(), 0, offset.y.AsFloat()); //} //else //{ // if (go != null) // { // GameObject.Destroy(go); // go = null; // } //} //if (TSCheck2D.CheckRectangleAndPos(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position))) //{ // if (go == null) // { // go = GameObject.CreatePrimitive(PrimitiveType.Sphere); // go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); // } // go.transform.position = A.position; //} //else //{ // if (go != null) // { // GameObject.Destroy(go); // go = null; // } //} //FP dis = TSCheck2D.DistanceFromPointToLine(To(Box.position), To(A.position), To(B.position)); //Debug.Log(dis); //var offset = To(B.position) - To(A.position); //TSVector2 crossPoint; //if (TSCheck2D.CheckCicleAndLine(To(A.position), offset,To(Sphere.position),FP.FromFloat(Sphere.localScale.x / 2),out crossPoint)) //{ // if (go == null) // { // go = GameObject.CreatePrimitive(PrimitiveType.Sphere); // go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); // } // go.transform.position = new Vector3(crossPoint.x.AsFloat(),0,crossPoint.y.AsFloat()); //} //else //{ // if (go != null) // { // GameObject.Destroy(go); // go = null; // } //} if (TSCheck2D.CheckRectangleAndCircle(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(Sphere.position), FP.FromFloat(Sphere.localScale.x / 2))) { if (go == null) { go = GameObject.CreatePrimitive(PrimitiveType.Sphere); go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); } go.transform.position = new Vector3(2, 0, 0); } else { if (go != null) { GameObject.Destroy(go); go = null; } } }
private TSVector2 To(Vector3 pos) { return(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.z))); }
static private float div2(float n1, float n2) { return(FP.ToFloat((FP.FromFloat(n1) / FP.FromFloat(n2)))); }
static private float mul2(float n1, float n2) { return(FP.ToFloat((FP.FromFloat(n1) * FP.FromFloat(n2)))); }
static private float sub2(float n1, float n2) { return(FP.ToFloat((FP.FromFloat(n1) - FP.FromFloat(n2)))); }
static private float add2(float n1, float n2) { return(FP.ToFloat((FP.FromFloat(n1) + FP.FromFloat(n2)))); }