// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 using System; using UnityEngine; using FairyGUI; using NBC; using RootMotion.FinalIK; using Object = UnityEngine.Object; namespace NBF { public partial class ModelTexture : GComponent { ModelRenderImage _renderImage; private Vector2 _startPos; private Vector3 _startRot; private SwipeGesture _swipeGesture; private bool _focus; private void OnInited() { SetRotateListening(); // Stage.inst.on TouchHolder.onRollOver.Set(OnFocusIn); TouchHolder.onRollOut.Set(OnFocusOut); Stage.inst.onMouseWheel.Add(OnMouseWheel); // TouchHolder.onm } public override void Dispose() { Stage.inst.onMouseWheel.Remove(OnMouseWheel); base.Dispose(); } /// /// 加载资产模型 /// /// public void LoadAsset(int configId) { if (_renderImage == null) { _renderImage = new ModelRenderImage(ModelHolder.asGraph); } //Assets/Resources/gfx/hooks/berserk_hooks/clas_20421_20446/clas_20423.prefab //Assets/Resources/gfx/rods/syberia/bolo_10021/bolo_10021_LB400.prefab //"Role/test" var prefab = Resources.Load("gfx/hooks/berserk_hooks/clas_20421_20446/clas_20423"); var model = ((GameObject)Object.Instantiate(prefab)); var ccdIk = model.GetComponent(); if (ccdIk != null) { Object.Destroy(ccdIk); } var lineRenderer = model.GetComponent(); if (lineRenderer != null) { Object.Destroy(lineRenderer); } var rigidbody = model.GetComponent(); if (rigidbody != null) { rigidbody.isKinematic = true; } _renderImage.modelRoot.localScale = new Vector3(200, 200, 200); _renderImage.SetModel(model); var previewableAsset = model.GetComponent(); if (previewableAsset != null) { _renderImage.modelRoot.localPosition = new Vector3(0, 0, previewableAsset.zoom.zoom); _renderImage.modelRoot.localRotation = Quaternion.Euler(previewableAsset.rotation); } else { _renderImage.modelRoot.localPosition = new Vector3(0, 0, 3); _renderImage.modelRoot.localRotation = Quaternion.Euler(Vector3.zero); } } /// /// 加载角色模型 /// public void LoadRole() { } private void SetRotateListening() { var dragObj = TouchHolder; var gesture1 = new SwipeGesture(dragObj); gesture1.onMove.Set(OnSwipeMove); gesture1.onEnd.Set(OnSwipeEnd); } #region 旋转和平移 private void OnSwipeMove(EventContext context) { var gesture = context.sender as SwipeGesture; if (gesture == null) return; var v = Vector3.zero; if (context.inputEvent.button == 0) { v.y = -gesture.delta.x * 0.2f; v.z = -gesture.delta.y * 0.2f; if (!gesture.snapping) { v.y = 0; v.z = 0; } if (Mathf.Abs(v.y) < 1) //消除手抖影响 v.y = 0; if (Mathf.Abs(v.z) < 1) //消除手抖影响 v.z = 0; _renderImage.StartRotate(v); } else { v.y = -gesture.delta.y * 0.005f; v.x = gesture.delta.x * 0.005f; //平移 var pos = _renderImage.modelRoot.localPosition; _renderImage.modelRoot.localPosition = new Vector3(pos.x + v.x, pos.y + v.y, pos.z); } } private void OnSwipeEnd(EventContext context) { _renderImage.StopRotate(); } #endregion #region Zoom private void OnFocusIn() { _focus = true; Log.Info("focus true"); } private void OnFocusOut() { _focus = false; Log.Info("focus false"); } private void OnMouseWheel(EventContext context) { if (!_focus) return; float delta = context.inputEvent.mouseWheelDelta / Stage.devicePixelRatio; SetZoom(delta * 0.2f); } private void SetZoom(float delta) { var pos = _renderImage.modelRoot.localPosition; _renderImage.modelRoot.localPosition = new Vector3(pos.x, pos.y, pos.z + delta); } #endregion } }