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

智能推荐

Vue.js+Element:clipboard.js实现点击按钮复制内容到剪切板_vue 前端剪切板赋值-程序员宅基地

文章浏览阅读2.8k次。需求点击某个按钮,将设置的目标内容(例如地址)复制到剪切板引入clipboardjs官网传送门npm引入:npm install clipboard --save使用<template> <div class="drawer"> <el-switch v-model="isopen" /> <el-input placeho..._vue 前端剪切板赋值

if循环中悬空else问题-程序员宅基地

文章浏览阅读373次,点赞5次,收藏6次。之前学习Java时并没有注意到这个小细节的问题,不过最近新学C语言的过程中,突然发现居然还有一个这么小的语法细节知识,这也侧面展现了代码规范的重要性。

解决jaspersoft+ireport导出pdf空白_jasperfillmanager生产空白的pdf-程序员宅基地

文章浏览阅读2.7k次。使用ireport导出dpf显示空白解决步骤:1.【工具】-【选项】-【classpath】中添加iTextAsian.jar这个jar包不用自己下载,ireport自带的有,位置在D:\iReport-5.6.0\ireport\modules\ext下2.在报表工具【属性】-【text properties】中设置以下属性PDF font name: STSong-LightPDF Encoding: UniGB-UCS2-H(Chinese Siplified)PDF Em_jasperfillmanager生产空白的pdf

el-tooltip宽度超过父容器的宽度,导致提示框不跟随文字内容_react antd tooltip内容过多时,超出容器大小-程序员宅基地

文章浏览阅读206次。实现方式为: 给 tooltip一个display属性,除inline以外的任意值。_react antd tooltip内容过多时,超出容器大小

java es 搜索_使用elasticsearch从多个列表中搜索-程序员宅基地

文章浏览阅读1.3k次。我们有以下设置(简化/更改):MongoDB集合: ArticlesRedis列表: Today Yesterday This Week This Month我们经常收到新文章,并将它们放入适当的列表中(新文章进入'今天''本周'和'本月'[redis列表包含mongodb集合的id]) .这些列表可以包含很多项目(“本月”达到数百万) . 这些列表经常更改,文章消失并重新出现(业务逻辑) .这些..._elasticsearch search value in list

反激开关电源变压器设计实例讲解(定明芳)_反激变压器设计实例-程序员宅基地

文章浏览阅读2.8w次,点赞55次,收藏543次。内容来自《反激变压器的设计》(定明芳主讲)。定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。1.确定电源规格2.确定工作频率和最大占空比3.计算匝比(利用伏秒平衡原则)此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。4.计算初级线圈峰值电流基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip_反激变压器设计实例

随便推点

利用JWT Token配合Redis实现单点登录并进行Token的缓存验证唯一性_使用redis实现jwt令牌的单点登录功能-程序员宅基地

文章浏览阅读2.1k次。以上为一个基础的使用Spring Boot、MyBatis、Redis和JWT实现用户登录认证的完整示例。具体实现中可以根据需求进行更改和优化。_使用redis实现jwt令牌的单点登录功能

机器学习&人工智能:大牛带你回顾2016,展望2017-程序员宅基地

文章浏览阅读206次。雷锋网按:2016即将过去,针对机器学习和人工智能领域在2016年取得的重大进展,以及2017年可能出现的新趋势,外媒KDnuggets咨询了12位业内顶级专家,汇集了他们的观点并整理成文,其中AlphaGo战胜李世石成为今年的标志性事件。雷锋网对全文进行了编译,未经许可,不得转载。1. Yaser Abu-Mostafa,加州理工学院顾问2016..._机器学习公平性展望

html5图片无限循环播放,原生js实现无限循环轮播图效果-程序员宅基地

文章浏览阅读3.6k次。知识要点1.实现无限循环的原理:以偏移的距离来判断是否跳回第一张和最后一张也可以利用循环判断图片的当前索引值var newLeft=parseInt(list.style.left)+offset;//当前的偏移量+下一次的偏移量=新的偏移量list.style.left=newLeft+"px";//当前的偏移值=新的偏移值//以偏移的距离来判断是否跳回第一张和最后一张if(newLeft>..._html5图片循环滚动

win10更新KB5034441版本,报错0x80070643_kb5034441更新失败-程序员宅基地

文章浏览阅读567次,点赞23次,收藏20次。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。,一般来说恢复分区的前一个分区是系统分区,也即。我这里有星号(*),是GPT类型的。

高可用与负载均衡入门与实战(五)——配置nginx反向代理和负载均衡_5)配置容器nginx1的web服务,编辑首页内容为“nginx1”,在宿主机访问-程序员宅基地

文章浏览阅读758次。任务一、配置nginx反向代理,使用nginx1、APP1、APP2三个容器步骤1:使用php-apache镜像启动APP1和APP2两个容器1)创建docker网络docker network create --subnet=172.18.0.0/16 cluster2)查看宿主机上的docker网络类型种类docker network ls3)启动容器APP1,设定地址为17..._5)配置容器nginx1的web服务,编辑首页内容为“nginx1”,在宿主机访问

线程池参数——workQueue用法_线程池参数workqueue-程序员宅基地

文章浏览阅读1.5k次。线程池参数的 workQueue 决定了缓存任务的排队策略,对于不同的业务场景,我们可以使用不同的排队策略。我们只需要实现BlockingQueue 这个接口即可。介绍一下常用的有三种workQueue1. SynchronousQueue(阻塞队列)SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者(即丢给空闲的线程去执行),必须等队列中的添加元素被消费后才能继续添加新的元素,否则会走拒绝策略,所以使用SynchronousQueu_线程池参数workqueue