模拟人的手指在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

智能推荐

有符号数和无符号数在计算机中怎么区分?_机器怎么判断带符号二进制数-程序员宅基地

文章浏览阅读4.3k次。确如题主所说,计算机中存储的任何数据都是二进制形式,单看数据是无法认定其格式和内容的。计算机要用二进制编码来表达数值的符号,最直观的方法就是符号位。但为了保证基本算术运算在正负数上的一致性,x86计算机对负数采用了特殊的编码方式,即补码。为什么补码这么巧妙实现了正负数的加减运算?参见维基百科:补码-1的二进制表示下面结合题主提到的寄存器状态举个例子。为简化起见,我们8位二进制数来讲。先看8位二进制与无符号数和有符号数的对应二进制无符号 有符号00000000 0 000000001 1 1_机器怎么判断带符号二进制数

c语言图像剪影代码,信息系C语言社团活动剪影-南京商业学校.PDF-程序员宅基地

文章浏览阅读97次。信息系C 语言社团活动剪影12 月7 日,信息系C 语言社团第 15 周活动在汉中门 17 联院软件班举行,共有 24 位社团成员参加,由赵灵杰主持,指导老师是魏兰。本次活动一共有导入、理论、活动、反馈、总结等5 个版块,活动采取游戏化教学模式形式,活动内容涉及到数学、编程、游戏等方面。为了更好的理解本次社团的活动内容,我们还将采用小游戏的方式使同学们更易理解。本次社团活动充分展现了同学们的逻辑思..._南京商业学校 沈发

论文关于初学计算机的理解,计算机网络学习论文范文-程序员宅基地

文章浏览阅读86次。1.实践研究设计 1.1研究方法 根据问卷调查和访谈法分析我校的学生在通过外语实验教学示范中心进行自主学习的各种不平衡现象和各类问题,问卷调查和访谈重点考察学生对网络学习资源的利用情况、依托网络平台教师的...2019-05-191基于计算机网络具代表性的学习模式 (1)开放性。互联网能够把学校与整个社会紧密联系在一起,可以随时给学习者提供一个开放、互动的学习环境,打破了原有学习时间与空间的限制。...

python modify函数_『Python基础-13』函数 Function-程序员宅基地

文章浏览阅读2.2k次。这篇笔记记录的知识点:函数的基本概念自定义函数函数的几种参数编程的三种方式:1.OOP 面向对象编程,万物皆对象,以class为主,抽象化2.POP 面向过程编程,万事皆过程,def定义过程3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫function/方法/过程/子程序函数的基础概念:函数是一种设计工具,它能让程序员将复杂的系统分解成可管理的部件, 用于将相关功..._python modify函数

前端导出当前页面为PDF或者图片_前端怎样导出整个网页为pdf-程序员宅基地

文章浏览阅读412次。前端导出当前页面为PDF或者图片_前端怎样导出整个网页为pdf

linux grep 正则表达式-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏50次。目录1、grep命令2、grep 与正则表达式3、关于匹配的实例4、grep实例1、grep命令功能:输入文件的每一行中查找字符串。基本用法:grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名参数说明:-a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-v:显示_linux grep 正则表达式

随便推点

二分查找(Java) 详细讲解 一文足矣_二分查找找到多个会怎样-程序员宅基地

文章浏览阅读4k次。二分查找,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。其基本思想是每次将查找范围缩小一半,直到找到目标元素或确定目标元素不存在。这段代码演示了如何使用二分查找在有序数组中查找目标元素。最后输出结果,指示目标元素是否存在以及其索引位置。方法中,我们定义了一个有序数组。,并在其中查找目标元素。_二分查找找到多个会怎样

LeetCode JAVA解题---897. 递增顺序查找树_leetcode java实现897-程序员宅基地

文章浏览阅读150次。LeetCode 题库 全 JAVA 解题994. 腐烂的橘子原题回顾:在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。来源:力扣(LeetCode)链接:ht..._leetcode java实现897

使用高斯混合模型(GMM)分割图像_gmm图像分割-程序员宅基地

文章浏览阅读6.9k次,点赞2次,收藏38次。使用C++、opencv中的高斯混合模型(GMM)进行图像分割关于GMM聚类的原理及过程可参考博客:https://blog.csdn.net/lin_limin/article/details/81048411使用聚类的方法分割图像,即将图像的像素点值(通常用彩色图像,像素点值为一个三元数组(b,g,r))作为聚类的元素,从而将图像中所有的点分为n类,达到分割的效果。代码:#i..._gmm图像分割

python文本分析库_8种Python文本处理工具集-程序员宅基地

文章浏览阅读1.2k次。文本处理一般包括词性标注,句法分析,关键词提取,文本分类,情感分析等等,这是针对中文的,如果是对于英文来说,只需要基本的tokenize。本文为大家提供了以下这些工具包。1.Jieba【结巴中文分词】做最好的 Python 中文分词组件其功能包括支持三种分词模式(精确模式、全模式、搜索引擎模式),支持繁体分词,支持自定义词典等。代码主页:https://github.com/fxsjy/jieba..._文本分析法用到的工具有哪些

python2 openpyxl 删除一个excel表_Python使用OpenPyXL处理Excel表格-程序员宅基地

文章浏览阅读800次。OpenPyXL库 --单元格样式设置单元格样式的控制,依赖openpyxl.style包,其中定义有样式需要的对象,引入样式相关:from openpyxl.styles import PatternFill, Font, Alignment, Border, SideBorder 边框 Side 边线PatternFill 填充Font 字体Aignment 对齐以上基本可满足需要基本用法是,..._python中的openyxl库无法直接删除整一个工作表。

计算机程序设计员二级证书,办个计算机程序设计员资格证好不好办-程序员宅基地

文章浏览阅读1.9k次。办个计算机程序设计员资格证好不好办?难不难?都要些什么资料叫呢?秦老师一、什么是计算机程序设计员?计算机程序设计员是利用现代信息技术,从事计算机软件编制和设计工作的人员。二、计算机程序设计员证职业等级有哪些?本职业共分三个等级 初级程序员(职业资格五级) 中级程序员(职业资格四级) 程序设计员(职业资格三级),目前鉴定中心一般只鉴定中级和三、怎么报考计算机程序设计员资格证?中级(四级)具备以下条件..._计算机程序设计员 二级