模拟人的手指在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主机-WordPress设置固定链接伪静态的方法_wordpress生成固链接-程序员宅基地

文章浏览阅读1.1k次。1、WordPress为什么要设置固定链接伪静态这个问题是很简单的,因为搜索引擎比较喜欢静态的页面,觉得他是很简洁高效的,权重和收录都好一些2、下面就是微知找到的设置教程了:设置WordPress在Windows主机环境下伪静态固定链接的方法:我们都知道Linux主机支持WordPress伪静态固定链接,如果你使用的空间是Linux主机就比较简单安装好WP程序登陆,在WordPrcess的后台点设置(Options),点固定链接(Permalinks)这里一共有5个选项,前四个选项直接选择就可以支持,不需要_wordpress生成固链接

如何用selenium或pyppeteer来链接并打开指纹浏览器AdsPower_adspower selenium-程序员宅基地

文章浏览阅读4k次。本文是该专栏的第25篇,后面会持续分享python的爬虫干货知识,记得关注。一般来说,选择使用自动化工具来做爬虫算是一种退而求其次的方法,但是要注意的是,面对那种需要模拟登录进行操作,或者是需要模拟登录拿到cookie再交给协议请求来说,自动化的方法那就是爬虫攻城狮的首选了。做过自动化的朋友都熟悉,selenium自身没有浏览器的驱动,它需要浏览器的驱动支持,即WebDriver,而selenium想要打开某个浏览器,需要下载对应浏览器的驱动就可以,比如_adspower selenium

C#调用opencv-程序员宅基地

文章浏览阅读993次。最经做一个项目,底层调用openCV编写的图像处理程序,用户界面采用C#编写。 于是学习了相关技术,总结如下:C#编写的是托管代码,编译生成微软中间语言,而普通C++代码则编译生成本地机器码,这两种语言不能直接混合编程。常见的方式是:1)将本机C++代码(指非托管C++)编译成一个dll,供C#调用,调用方法为 [DllImport(×××.dll)] 。但是这里只能从 DLL 导出..._c# 引用opencv

虚拟机装12-Mac OS X 10.13_mac os x 10.13 虚拟机固件-程序员宅基地

文章浏览阅读1.4k次。使用Vmware14安装黑苹果系统macos10.13傻瓜教程本来首先是首先想到用hyper-v的,不过看了一圈hyper-v安装黑苹果没有成功的案例,国外论坛给出的回复也是impossible,就放弃了。而VMware和vbox是可以成功安装的,VMware安装比较适合安装,我就选择了VMware。一、工具&材料:1、Vmware 本体,我写文章的时候最新版是14;Vm..._mac os x 10.13 虚拟机固件

【100个 Unity踩坑小知识点】| Unity控制物体持续指向某个方向_unity物体指定方向-程序员宅基地

文章浏览阅读10w+次,点赞30次,收藏80次。Unity 小科普老规矩,先介绍一下 Unity 的科普小知识:Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!_unity物体指定方向

android intent打开各种格式文档方法_android intent 去打开zip文件-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏6次。我们开发的时候经常碰到打开各种文档,目前的应用处理方式 基本都是依赖于三方软件打开 ,而不是在应用内打开,因为文件格式有很多,倘若都在应用内打开的话,肯定要增加很大的开发时间和开发成本,而且实现效果没有一些三方的app实现的效果好。话不多说,给大_android intent 去打开zip文件

随便推点

再说MySQL数据库事务隔离级别的那些事(通俗版非学院派)_通俗的讲一下mysql的隔离级别-程序员宅基地

文章浏览阅读517次。MySQL数据库事务隔离级别有四种:READ-UNCOMMITTED(读未提交)、READ-COMMITTED(读提交)、REPEATABLE-READ(重复读)、SERIERLIZED(序列化读)。要真正理解数据库事务隔离级不能光看书,必须要上机操作,多练几次就会明白的了。上机环境有几点大家要注意的:1,把事务的自动提交功能关掉;2,把表引擎设置为InnoDB(支持事务操作);3,在做实验的_通俗的讲一下mysql的隔离级别

16位汇编 loop循环_16位汇编 循环-程序员宅基地

文章浏览阅读1.4k次。loop循环,计算2的8次方assume cs:codesgcodesg segment mov ax,2 mov cx,7 s: add ax,ax loop s mov ax,4c00h int 21Hcodesg endsend_16位汇编 循环

python界面设计工具-wxFormBuilder_vscode wxformbuilder-程序员宅基地

文章浏览阅读7.8k次,点赞7次,收藏69次。一 wxFormBuilder是什么wxFormBuilder是一款可视化的GUI设计工具,界面设计后可以自动生成代码,免去了手工码gui的繁琐,一套界面可支持生成C++\Python\PHP\Lua\XRC等代码形式,可以极大提升python GUI开发效能。项目发布网址:https://github.com/wxFormBuilder/wxFormBuilder/releases..._vscode wxformbuilder

Ubuntu 彻底删除 MYSQL 然后重装 MYSQL_sudo apt-get remove mysql-common-程序员宅基地

文章浏览阅读268次。删除 mysqlsudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-serversudo apt-get autoremove mysql-serversudo apt-get remove mysql-common //这个很重要上面的其实有一些是多余的。清理残_sudo apt-get remove mysql-common

SqlServer查询数据中所有表及所有的字段名和字段属性_sql 所有表 条件查询-程序员宅基地

文章浏览阅读2k次。------sqlserver 查询某个表的列名称、说明、备注、类型等SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号 = a.col..._sql 所有表 条件查询

Spark抽取mysql中的数据到Hive中_spark怎么jdbc写入到hive-程序员宅基地

文章浏览阅读5.6k次,点赞5次,收藏81次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录思路一、案例介绍二、具体步骤1.编写scala程序完成从mysql讲数据导出成csv文件2.打包成jar包提交到集群上3.将hdfs上的这个文件下载到本地目录下4.将本地数据文件的数据加载到hive中总结思路spark抽取mysql中的数据到hive中,可通过以下2步完成:1.先将mysql中的数据抽取到存放再hdfs上的一个文件(.csv,.txt)2.再讲文件通过load命令加载到hive中下面用具体案例演示一._spark怎么jdbc写入到hive