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

智能推荐

ansible的剧本-程序员宅基地

文章浏览阅读293次。ansible的playbook的介绍-yamlansible的playbook是使用yaml语言写的YAML标记语言介绍YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言包括XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言另外Ingy dtNet与Oren Ben-Kiki也是这语言的共..._192.168.16.139:5000

K8s 超详细总结!-程序员宅基地

文章浏览阅读5.4w次,点赞30次,收藏370次。一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿..._k 8 s

windows编译新版本linphone_windows编译 linphone-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏2次。​​​​​​​linphone-desktop是一款基于SIP的标准开源网络电话系统,它使用了Qt和mediastreamer2开源多媒体库,支持大部分音视频格式,包括H263和H264等。linphone-desktop允许用户通过互联网与他人进行语音、视频和即时文本消息的沟通。它能够通过查询朋友的IP地址并进行拨号,功能强大且支持多种平台,既可以在桌面系统上使用,也可以在移动设备上使用,甚至支持WEB浏览器。linphone-desktop遵循GPL开放源代码协议,可以自由下载和二次开发。_windows编译 linphone

Spring Cloud Alibaba 微服务开发实践_spring cloud alibaba微服务最佳实践-程序员宅基地

文章浏览阅读1.7k次。Spring Cloud Alibaba 是阿里巴巴开源的基于 Spring Cloud 的微服务框架。该项目从最初孵化到现在已经历经十多年的发展,得到了广泛的应用。其中主要集成了阿里巴巴中间件生态中的组件,比如 Nacos、Sentinel、RocketMQ 和 Dubbo。这些组件在 Spring Cloud 中进行了整合,让 Spring Cloud 用户能够更加简单方便地使用这些组件。因此,Spring Cloud Alibaba 如今已成为众多 Java 开发者的最爱。_spring cloud alibaba微服务最佳实践

映射与集合的可列性_可列集的映射-程序员宅基地

文章浏览阅读710次。映射基本概念给定两个集合X,YX,YX,Y,若对于任意的元素x∈Xx\in Xx∈X,都存在唯一的y∈Yy\in Yy∈Y与之对应,就称定义了一个从XXX到YYY的映射,记作f:X→Yf:X\to Yf:X→Y其中yyy称为xxx在映射fff下的象,记作f(x)f(x)f(x);XXX称为映射fff的定义域。设A⊂X,B⊂YA\subset X,B\subset YA⊂X,B⊂Y,定义象集f(A)f(A)f(A)和原象集f−1(B)f^{-1}(B)f−1(B):f(A)={f(x)∈Y∣x∈A_可列集的映射

element-ui中table表头和数据未对齐处理_elementui表头与内容不对齐-程序员宅基地

文章浏览阅读307次。element-ui中table表头和数据未对齐处理_elementui表头与内容不对齐

随便推点

java.util.concurrent.CompletionException: java.lang.ArrayIndexOutOfBoundsException异常的原因分析及解决方-程序员宅基地

文章浏览阅读8.1k次,点赞2次,收藏7次。java.util.concurrent.CompletionException: java.lang.ArrayIndexOutOfBoundsException异常的原因分析及解决方案1.错误日志java.util.concurrent.CompletionException: java.lang.ArrayIndexOutOfBoundsException at java.util.concurrent.CompletableFuture.encodeThrowable(Compl.

Django学习之路2-环境的搭建(virtualenv)-程序员宅基地

文章浏览阅读45次。virtualenv简介:virtualenv 是一个创建独立python环境的工具。其要解决的最基本问题就是库的依赖和版本,以及间接权限。比如一个ubuntu环境默认安装了python2.7.11的版本,想要使用python3.5,如果再安装3.5,就会比较乱,再如pip安装的软件包,有..._django 重新搭建env

深入分析序列化和反序列化原理,终于知道serialVersionUID到底有什么用了_private static final long serialversionuid 和实现序列化有-程序员宅基地

文章浏览阅读3.2k次,点赞14次,收藏41次。深入序列化和反序列化原理一个问题引发的思考什么是序列化和反序列化序列化一个问题引发的思考下面是一个简单的socket通信demo。通信数据类:package com.zwx.serialize.demo;public class SocketUser { public SocketUser(String id, String name) { this.id = id; this.name = name; } private String _private static final long serialversionuid 和实现序列化有什么区别

Django基础教程_django教程-程序员宅基地

文章浏览阅读1.3w次,点赞41次,收藏350次。一、Django是什么?Django 是用 Python 开发的一个免费开源的 Web 框架,可以用于快速搭建高性能、优雅的网站,Django 提供了许多网站后台开发经常用到的模块,使开发者能够专注于业务部分。二、MVC设计模式在Web开发领域有一个著名的设计模式 ---- MVC,而Django的设计模式是MTVM:Model模型,和数据库进行交互V:View视图,产生html页面C:Controller,控制器接收请求,进行处理,与M和V进行交互,返回应答三、MTV设计模式M:M_django教程

充分理解boost库_boost如何理解-程序员宅基地

文章浏览阅读177次。用C++做后台开发有哪些需要注意的问题说起后台开发,严格地说和用什么语言开发没有必然的关系。比如说网络游戏的后台,用C++开发的有很多,但用Java开发的也不少,而且在某些情况下,用Java做服务器效果还较好。其实,如果说用C++开发后台,可能更多的是从项目需要的角度考虑。毕竟现在能够找到一个好的C++程序员也不是一件容易的事,所以首先肯定的一点是用C++开发后台可能面临较大的人力成本。用C+..._boost如何理解

运维自动化之puppet-dashboard(7)-程序员宅基地

文章浏览阅读80次。安装配置:yum -y install rubygem-rake ruby-mysqlyum localinstall puppet-dashboardgem install rakemysql授权create database dashboard character set utf8;grant all on dashboard.* TO 'dashboard'@'%' i..._dashboard 自动化的应用

推荐文章

热门文章

相关标签