// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
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
}
}