在UI界面中实现3d人物展示

简要原理(设置双摄像机):

  • 为需要展示的3D人物单独设置一个摄像机(只设置为渲染人物层级),主要摄像机的方向与人物方向一致,但摄像机需要需要旋转180°,设置的角度自行进行微调
  • 创建一个Render Texture类型的组件用于存储摄像机渲染的内容
  • UI上设置需要展示的图片区域,图片类型为RawImage

具体实现

    //打开详细信息界面,charCameraTrans为人物展示摄像机
    public void OpenInfoWnd()
    {
        if (charCameraTrans == null)
        {
            charCameraTrans = GameObject.FindGameObjectWithTag("CharShowCam").transform;
        }
        //设置人物展示相机的相对位置
        charCameraTrans.localPosition = playerController.transform.position + playerController.transform.forward * 1.8f + new Vector3(0,0.9f,0);
        charCameraTrans.localEulerAngles = new Vector3(0, 180 + playerController.transform.localEulerAngles.y, 0);
        charCameraTrans.gameObject.SetActive(true);
        infoWnd.showWnd();
    }
    //关闭详细信息界面
    public void CloseInfoWnd()
    {
        //关闭人物展示摄像机
        charCameraTrans.gameObject.SetActive(false);
        //关闭显示界面
        infoWnd.hideWnd(); 
    }

UI中实现角色旋转的触控

 简要原理

记录人物旋转角度x:鼠标按下位置减去鼠标拖拽的终点的得到鼠标的旋转角度

将旋转角度作用在角色上:记录人物初始的角度(y轴的角度),重新设置人物的角度

代码实现

    //注册触摸事件
    private void RegTouchEvts()
    {
//OnClickDown函数参考之前博文实现非按钮物体的事件监听
        OnClickDown(imgChar.gameObject, (PointerEventData evt) => {
            MouStartPos = evt.position;
//角色开始的角度
            startRoate = playerController.transform.localEulerAngles.y;
        });
        OnDrag(imgChar.gameObject, (PointerEventData evt) =>
         {
             //计算鼠标拖拽的距离
             float roate =MouStartPos.x-evt.position.x; 
             playerController.transform.localEulerAngles = new Vector3(0, roate+startRoate, 0);
         });
    }

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值