diff --git a/Assets/Draw/Scripts/ScreenShotPainter.cs b/Assets/Draw/Scripts/ScreenShotPainter.cs index 971cfe88..9cea52ea 100644 --- a/Assets/Draw/Scripts/ScreenShotPainter.cs +++ b/Assets/Draw/Scripts/ScreenShotPainter.cs @@ -700,7 +700,12 @@ public class ScreenShotPainter : MonoBehaviour RectFactory(); break; case Status.Circle: - var dis = Vector2.Distance(_lastPoint, Input.mousePosition) * 2; + Vector2 last; + Vector2 mouse; + RectTransformUtility.ScreenPointToLocalPointInRectangle(circleImg.rectTransform.parent as RectTransform, _lastPoint, null, out last); + RectTransformUtility.ScreenPointToLocalPointInRectangle(circleImg.rectTransform.parent as RectTransform, Input.mousePosition, null, out mouse); + + var dis = Vector2.Distance(last, mouse) * 2; circleImg.rectTransform.sizeDelta = new Vector2(dis, dis); break; case Status.Arrow: @@ -821,7 +826,7 @@ public class ScreenShotPainter : MonoBehaviour { if (lineStart != default) { - var points = GenerateArrowPoints(lineStart, Input.mousePosition,0.1f); + var points = GenerateArrowPoints(lineStart, Input.mousePosition, 0.1f); _lastPoint = lineStart; Paint(_eraserFlag, lineStart); LerpPaint(Input.mousePosition, _eraserFlag); @@ -1038,10 +1043,6 @@ public class ScreenShotPainter : MonoBehaviour yield return new WaitForEndOfFrame(); float width = _rightUpConnerPoint.x - _leftDownConnerPoint.x; float height = _rightUpConnerPoint.y - _leftDownConnerPoint.y; - Debug.Log(_leftDownConnerPoint.x.ToString("0.00")); - Debug.Log(_leftDownConnerPoint.y.ToString("0.00")); - Debug.Log("width:" + width); - Debug.Log("width:" + height); Rect rect = new Rect(_leftDownConnerPoint.x, _leftDownConnerPoint.y, width, height); //坑爹啊 如果是开携程在WaitForEndOfFrame时候截图,那么他的坐标系换了。。rect起始点要设置在左下角 diff --git a/Assets/Scripts/Controller/Body3DController.cs b/Assets/Scripts/Controller/Body3DController.cs index 3f6ffe6b..4e45c22f 100644 --- a/Assets/Scripts/Controller/Body3DController.cs +++ b/Assets/Scripts/Controller/Body3DController.cs @@ -213,14 +213,21 @@ public class Body3DController : MonoSingleton { Parser(item.Value); } + + if (body.isLineModeItem) + { + GameObject obj = Utility.FindObj(body.Path); + obj.GetOrAddComponent().Init(body); + } } else { GameObject obj = Utility.FindObj(body.Path); - + //if (obj != null) { Debug.Log("????" + body.Path + "????"); }; var bodyObjItem = obj.GetOrAddComponent(); bodyObjItem.Init(body); + var lineModeItem = obj.GetOrAddComponent().Init(body); objs.Add(obj, bodyObjItem); } } diff --git a/Assets/Scripts/Item/Body3DObjItem.cs b/Assets/Scripts/Item/Body3DObjItem.cs index 0f2118b5..5b5453b4 100644 --- a/Assets/Scripts/Item/Body3DObjItem.cs +++ b/Assets/Scripts/Item/Body3DObjItem.cs @@ -19,12 +19,10 @@ public class Body3DObjItem : MonoBehaviour private float lastClickTime; // ˫ʱֵ private const float doubleClickTimeThreshold = 0.3f; - Shader shader; private void Awake() { - shader = GetComponent()?.material.shader; - TypeEventSystem.Global.Register(OnChangeMatEvent).UnRegisterWhenGameObjectDestroyed(this); + #if VR #if Turing @@ -75,25 +73,11 @@ public class Body3DObjItem : MonoBehaviour } } #endif - private void OnChangeMatEvent(OnChangeMat t) - { - if (t.shader != null) - { - GetComponent().material.shader = t.shader; - } - else - { - - GetComponent().material.shader = this.shader; - } - - } public void Init(Body3D.Body body) { this.body = body; - if (body.subBody == null || body.subBody.Count == 0) { if (body.toggle != null) diff --git a/Assets/Scripts/Item/LineModeItem.cs b/Assets/Scripts/Item/LineModeItem.cs new file mode 100644 index 00000000..ba8377ff --- /dev/null +++ b/Assets/Scripts/Item/LineModeItem.cs @@ -0,0 +1,38 @@ +using QFramework; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using XMLTool; + +public class LineModeItem : MonoBehaviour +{ + Shader shader; + public Body3D.Body body; + public LineModeItem Init(Body3D.Body body) + { + this.body = body; + shader = GetComponent()?.material.shader; + TypeEventSystem.Global.Register(OnChangeMatEvent).UnRegisterWhenGameObjectDestroyed(this); + return this; + } + + + private void OnChangeMatEvent(OnChangeMat t) + { + if (t.shader != null) + { + GetComponent().material.shader = t.shader; + if (body.lineModeWidth != 0) + { + GetComponent().material.SetFloat("_OutlineWidth", body.lineModeWidth); + } + } + else + { + + GetComponent().material.shader = this.shader; + } + + } + +} diff --git a/Assets/Scripts/Item/LineModeItem.cs.meta b/Assets/Scripts/Item/LineModeItem.cs.meta new file mode 100644 index 00000000..223e80d0 --- /dev/null +++ b/Assets/Scripts/Item/LineModeItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c29f8a68d4de741499c43ccf8a9d6bf0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Item/ObjectColorToggle.cs b/Assets/Scripts/Item/ObjectColorToggle.cs index 3afb9571..79bd50d5 100644 --- a/Assets/Scripts/Item/ObjectColorToggle.cs +++ b/Assets/Scripts/Item/ObjectColorToggle.cs @@ -18,7 +18,8 @@ public class ObjectColorToggle : MonoBehaviour private void Awake() { mesh = gameObject.GetComponent(); - isOffColor = mesh.material.color; + isOffColor = mesh.material.color; + savedTexture = mesh.material.mainTexture as Texture2D; } public void SetColor(State state) @@ -28,7 +29,6 @@ public class ObjectColorToggle : MonoBehaviour { case State.On: isOnColor.a = alpha; - savedTexture = mesh.material.mainTexture as Texture2D; mesh.material.mainTexture = null; mesh.material.color = isOnColor; break; @@ -39,7 +39,6 @@ public class ObjectColorToggle : MonoBehaviour break; case State.Hover: isHoverColor.a = alpha; - savedTexture = mesh.material.mainTexture as Texture2D; mesh.material.mainTexture = null; mesh.material.color = isHoverColor; break; diff --git a/Assets/Scripts/Xml/XmlParser.cs b/Assets/Scripts/Xml/XmlParser.cs index 62845e9c..071d1403 100644 --- a/Assets/Scripts/Xml/XmlParser.cs +++ b/Assets/Scripts/Xml/XmlParser.cs @@ -186,6 +186,8 @@ namespace XMLTool public Dictionary subBody { get; set; } = new Dictionary(); public Body parent; + public float lineModeWidth = 0; + public bool isLineModeItem = false; //public Dictionary bodyList { get; set; } = new Dictionary(); } @@ -440,6 +442,20 @@ namespace XMLTool body.subBody.Add(subBody.Name, subBody); } body.parent = parent; + + var lineModeWidth = bodyElement.Attribute("lineModeWidth"); + if (lineModeWidth != null) + { + float.TryParse(lineModeWidth.Value, out body.lineModeWidth); + } + + + var isLineModeItem = bodyElement.Attribute("isLineModeItem"); + if (isLineModeItem != null) + { + bool.TryParse(isLineModeItem.Value, out body.isLineModeItem); + } + return body; } diff --git a/Data/Xml/3DJiePao.xml b/Data/Xml/3DJiePao.xml index cd588ce7..fc5dfd38 100644 --- a/Data/Xml/3DJiePao.xml +++ b/Data/Xml/3DJiePao.xml @@ -11432,7 +11432,7 @@ - + +