拖拽模型旋转

添加窗口脚本

创建UI_CreateCharacterWindow脚本并挂载到窗口中,使用属性结合框架的GameSetting完成对窗口的初始化,详细可见框架UI部分内容,注意AA内Group名和包名与资源一致。

[UIElement(false,"UI_CreateCharacterWindow",2)]

alt

监听模型拖拽区域

对于Image,首先不能像Button直接Onclick添加事件响应,需要在Image组件上挂载一个脚本进行事件监听注册和管理,可以通过框架中的事件工具直接在此脚本内完成功能(相当于给所有组件都提供了直接添加事件监听响应的功能)。

    // 模型交互Image
    [SerializeField] Image modelTouchImage;

    public override void Init()
    {	
        //使用事件工具添加监听
        modelTouchImage.OnDrag(ModelTouchImageDrag, 6);
    }
    private void ModelTouchImageDrag(PointerEventData eventData,object[] arg2)
    {
        print(eventData.position);
    }
    private void Start()
    {
        Init();
    }

为需要拖拽的区域添加事件监听和对应的事件响应(测试输出鼠标位置)。

alt

角色旋转

通过角色控制器单例拿到模型的transform根据鼠标偏移量进行对应的旋转即可。

    public override void Init()
    {
        modelTouchImage.OnDrag(ModelTouchImageDrag, 6);
        //绑定角色预览
        characterPreviewTransform =Player_Controller.Instance.transform;
    }

    //最后一次坐标
    float lastPosX = 0;
    private void ModelTouchImageDrag(PointerEventData eventData,object[] arg2)
    {
        float offset = eventData.position.x - lastPosX;
        lastPosX = eventData.position.x;
        characterPreviewTransform.Rotate(new Vector3(0, -offset * Time.deltaTime * 60f, 0));
    }