// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 using UnityEngine; using FairyGUI; using NBC; using NBF.Fishing2; namespace NBF { public partial class ModelViewer : GComponent { ModelViewRenderImage _renderImage; private Transform ModelRoot => _renderImage?.modelRoot; private Camera ViewCamera => _renderImage.Camera; private void OnInited() { _renderImage = new ModelViewRenderImage(ModelHolder.asGraph); TouchHolder.onRollOver.Set(OnFocusIn); TouchHolder.onRollOut.Set(OnFocusOut); Stage.inst.onMouseWheel.Add(OnMouseWheel); SetRotateListening(); } public override void Dispose() { Stage.inst.onMouseWheel.Remove(OnMouseWheel); _renderImage.Dispose(); base.Dispose(); } public void SetData(uint itemId) { SetData(ItemConfig.Get(itemId)); } public void SetData(ItemConfig itemConfig) { _renderImage.LoadModel("gfx/" + itemConfig.Model); } #region 用户输入操作(滑动,拖动等) private bool _focus; private float _minFOV = 10f; private float _maxFOV = 120f; private void SetRotateListening() { var dragObj = TouchHolder; var gesture1 = new SwipeGesture(dragObj); gesture1.onMove.Set(OnSwipeMove); gesture1.onEnd.Set(OnSwipeEnd); } 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); } } private void OnSwipeEnd(EventContext context) { _renderImage.StopRotate(); } 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); } private void SetZoom(float delta) { ViewCamera.fieldOfView = Mathf.Clamp(ViewCamera.fieldOfView + delta, _minFOV, _maxFOV); } #endregion } }