模拟人的手指在UI上滑动时3D模型跟随着移动(Unity)-程序员宅基地

技术标签: ui  游戏  

问题:

          怎么让当手指滑动的同时对应的模型发生旋转

解决办法:

          1:通过控制摄像机或者模型来实现效果

          2:通过获取鼠标移动时X轴Y轴的偏移量来确定模型的旋转角度

          3:为了不让人感觉到突兀,建议使用Mathf.SmoothDamp方法实现角度的改变

 

实现代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChinarSmoothUi3DCamera : MonoBehaviour {

    public Transform point;
    private Vector3 Tras = Vector3.zero;

    public float distance = 10.0f;
    public float minDistance = 2f;
    public float maxDistance = 15f;
    public float zoomSpeed = 1f;
    public float xSpeed = 250.0f;
    public float ySpeed = 250.0f;
    public bool allowYTilt = true;
    public float yMinLimit = -90f;
    public float yMaxLimit = 90f;

    private float x = 0.0f;
    private float y = 0.0f;
    private float targetX = 0f;
    private float targetY = 0f;
    public float targetDistance = 0f;
    private float xVelocity = 1f;
    private float yVelocity = 1f;
    private float zoomVelocity = 1f;
    void Start () {

        Vector3 tange = transform.eulerAngles;
        targetX = x = tange.x;
        //targetY = y = ClampAngle(tange.y, yMinLimit, yMaxLimit);       
        targetDistance = distance;


    }

    // Update is called once per frame
    
    void LateUpdate() {
		if(point==null)
        {
            return;
        }
        if(Input.GetAxis("Mouse ScrollWheel")>0)
        {
            targetDistance -= zoomSpeed;
        }
        if(Input.GetAxis("Mouse ScrollWheel")<0)
        {
            targetDistance += zoomSpeed;
        }
        targetDistance = Mathf.Clamp(targetDistance, minDistance, maxDistance);
        if(Input.GetMouseButton(1))
        {
            
            targetX+= Input.GetAxis("Mouse X") * xSpeed * 0.02f;           
            if (allowYTilt)
            {
                //targetY -= Input.GetAxis("Mouse Y") * xSpeed * 0.02f;
                //targetY= ClampAngle(targetY, yMinLimit, yMaxLimit);
            }
        }
       x = Mathf.SmoothDampAngle(x, targetX, ref xVelocity, 0.3f);
        //y = allowYTilt ? Mathf.SmoothDampAngle(y, targetY, ref yVelocity, 0.3f) : targetY;
        //Quaternion rotation = Quaternion.Euler(y, x, 0);
        Quaternion rotation = Quaternion.Euler(0, x, 0);
        distance = Mathf.SmoothDamp(distance, targetDistance, ref zoomVelocity, 0.5f);
        Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + point.position + Tras;
        transform.rotation = rotation;
        transform.position = position;
        

    }

    public float ClampAngle(float angle,float min,float max)
    {
        if(angle>360)
        {
            angle -= 360;
        }
        if(angle<-360)
        {
            angle += 360;
        }
        return Mathf.Clamp(angle, min, max);
    }
}

  

转载于:https://www.cnblogs.com/clhxxlcj/p/10916720.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30894389/article/details/96840026

智能推荐

Windows Terminal美化界面,优雅的办公带来超高的效率_aka terminal美化-程序员宅基地

文章浏览阅读888次。贴个图众所周知,Windows Terminal没有美化后那个傻大蓝,沉默黑简直不忍直视。没有像官方演示的那么美观(所以得自己捯饬捯饬好看的样子)美化开始第一步安装相关的模块和PowerLine主题Install-Module posh-git -Scope CurrentUserInstall-Module oh-my-posh -Scope CurrentUser如果你使用管理员权限打开PowerShell并且想把oh-my-posh安装到所有用户,则输入Install-Module _aka terminal美化

Qt编写控件属性设计器-程序员宅基地

文章浏览阅读435次。一、前言自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDesigner一样,可以方便的拖曳控件,改变属性,立即应用,并导出到文件方便下次直接加载,这个设计器有点像组态中的一个雏形,提供了基本的加载控件,导入导出数据,数据源绑定等。本系列文章将从加..._qt实现属性编辑

lopatkin俄大神精简中文系统Windows 10 1607 Enterprise LTSB 2016 x86-x64 ZH-CN 2x1-程序员宅基地

文章浏览阅读5.6k次。撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ..._win10 1607 俄罗斯

后台服务守护进程神器pm2介绍及使用_pm2 执行go命令-程序员宅基地

文章浏览阅读1.4k次。linux的后台服务程序需要在后台一直运行。如果通过ssh访问临时启动的,会话一结束就直接关闭了服务。想让服务在后台一直运行且永远不挂掉,推荐后台服务守护进程神器pm2,强大且适用于各种语言的后台服务程序。_pm2 执行go命令

深度桌面操作系统架构设计-程序员宅基地

文章浏览阅读2.5k次,点赞4次,收藏23次。作者 | ManateeLazyCat 链接 |https://my.oschina.net/ManateeLazyCat/blog/831104今天就结合深度桌面操作系统给大家..._x11/xcb

亮剑:PHP,我的未来不是梦(10)-程序员宅基地

文章浏览阅读37次。1.21 工作经验都包括什么这部分就是我们前面提过的五关之一,筛选关!也就是我们靠什么来打动看我们简历的人!换句话说就是,他们希望我们具有哪些技术和能力?当然,针对不同的应聘人员,关注点也不一样!前面已经说过了,所谓的工作经验就是“应聘这个职位所必需的技术和能力”,另外,还有其他的,很容易被忽略的能力!那么这个技术和能力以及其他的能力又具体指的是什么呢? 这里只从实际的情况出发...

随便推点

《Python编程》专栏简介-程序员宅基地

文章浏览阅读155次。在本教程中,我们涵盖了Python编程的主要主题,包括Python基础知识、Python数学、Python网络编程、Python算法和数据结构、Python机器学习、Python Web开发和Python游戏开发。

在Ubuntu 12.04 64 位 搭载Android4.4源码编译环境-程序员宅基地

文章浏览阅读67次。在Ubuntu 12.04 64 位 搭载Android4.4源码编译环境 一、准备工作:(1) VMare Workstation 10(2)Ubuntu12.04 64bit(3) JDK1.6(4)Android 4.4 源码(PS:...

图像数据增广_图像增广-程序员宅基地

文章浏览阅读1.2k次,点赞19次,收藏24次。本文主要介绍了图像数据的几种增广方式,其中包括随机翻转、随机裁剪和随机颜色变换等,使用时一般在训练集上综合使用以达到鲁棒效果。_图像增广

8种编程语言对比,究竟谁更好用_算法用什么语言写比较好-程序员宅基地

文章浏览阅读977次。8种编程语言对比,究竟谁更好用_算法用什么语言写比较好

数据库oracle实际使用的内存---AIX产生大量的swap反思_oracle数据库内存64,sga40,会占用swap吗-程序员宅基地

文章浏览阅读796次。来看看oracle实际使用的内存:select sum(pga_alloc_mem)/1024/1024/1024 Alloc from v$process ; +select sum(value)/1024/1024/1024 as b from v$sga + 进程本身消耗的内存。操作系统频繁使用swap,原因基本是系统内存不够用了。从数据库的内存配置来看,128G总内..._oracle数据库内存64,sga40,会占用swap吗

Matlab 仿真——直流电机速度控制(1)直流电机建模_直流电机系统建模matlab-程序员宅基地

文章浏览阅读2.2w次,点赞31次,收藏228次。Matlab 仿真——直流电机速度控制(1)直流电机建模(搬运自:https://ctms.engin.umich.edu/CTMS/index.php?example=MotorSpeed&section=SystemModeling)该系列我们学习如何对直流电机进行速度控制物理模型一个直流电机模型如下所示:为了简化讨论,假设转子和转轴都是刚体,转子受到的磁场恒定,转子受到的摩擦为粘性摩擦,即受到的摩擦力与速度成正比。假设该电机的物理参数为:(J) 转子的转动惯量 _直流电机系统建模matlab