Unity3D物体在UI界面的显示同时控制模型旋转

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;
    public static ChinarSmoothUi3DCamera Instance;
    private void Awake()
    {
        Instance = this;
    }
    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() {

        Sencoend();
        //First();
    }
    void Sencoend()
    {
         if (point == null)
         {
            return;
         }
         if (Input.GetMouseButton(1))
         {
            targetX += Input.GetAxis("Mouse X")*-1 * xSpeed * 0.02f;
         }
        x = Mathf.SmoothDampAngle(x, targetX, ref xVelocity, 0.3f);
        Quaternion rotation = Quaternion.Euler(0, x, 0);
        point.transform.rotation = rotation;

    }

    void First()
    {

    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);
        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/10972551.html

时间: 2024-10-06 22:11:33

Unity3D物体在UI界面的显示同时控制模型旋转的相关文章

Flash Stage3D 在2D UI 界面上显示3D模型问题完美解决

一直以来很多Stage3D开发者都在为3D模型在2DUI上显示的问题头疼.Stage3D一直是在 Stage2D下面.为了做到3D模型在2DUI上显示通常大家有几种实现方式,下面来说说这几种实现方式吧. 实现方式1: 在2DUI上挖个洞透过去显示3D层.这种做法的缺陷在于如果两个UI界面同时打开就会UI错层显示错乱.为了解决这问题很多程序员选择了当挖洞显示3D的UI打时把其他界面隐藏掉,用户体验超差. 实现方式2: 利用Context3D 的 drawToBitmapData API 实时将3D

QT在一个源文件内新建多个UI界面

1. QT当中,当我们需要一个新的UI界面时,通常可以选择新建带配套头文件和源文件的UI界面.添加步骤如图1.1所示. 图1.1 添加带头文件与源文件的界面 这种添加自动生成了h文件和cpp文件,系统自动做了以下工作: (1) 在头文件里添加了该界面的类,包括声明和定义(示例添加的QDialog的UI界面,命名为mydialog).头文件代码如下: #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog> namespace Ui { c

使用原生自定义View,setState刷新界面后UI不能正常显示

背景 项目整合react native时,将原生的一个九宫格图片显示,封装成了RN控件,并提供了一个source属性 @ReactProp(name = "source") 问题 在js端使用该控件时,通过state初始化时给source赋值,然后,当添加图片是,通过setState刷新数据来刷新界面显示,理想状态下是,界面应该显示新增的图片,但是,当setState之后,控件上的图片就不显示了!!尝试着给该控件设置背景颜色,发现控件所占的空间位置还是有的. 解决方案 当遇到问题,首先

在QT编辑UI界面Menu时,linu屏幕的录制与截图

今天遇到一个小问题:在QT里面编辑UI界面的时候,如果想一步一步记录下自己制作的过程,在申请软件著作权的时候加进去,就要截图 截图 1.可以用键盘的快捷键截图: 1.按下Print Screen键,将会截取全屏幕画面. 2.抓取当前活动窗口 Print Screen进行屏幕抓图时,同时按下Alt键,就会只抓取当前活动窗口 3.自选截图区域 Print Screen+Shift 然后可以自选截图的区域 2.也可以用screenshot 截图工具 ubuntu 10.04中在applications

Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面: 即如何使用Thread+Handler的方式从非UI线程发送界面更新消息到UI线程. 概述:每个Android应用程序都运行在一个dalvik虚拟机进程中,进程开始的时候会启动一个主线程(MainThread),

Android——控制UI界面

一.使用XML布局文件控制UI界面 res\layout\activity_main.xml代码如下: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/FrameLayout1" android:layout_width

在数据库中 存储图片 以及 在界面中显示图片(存储图片路径)- 这种方法相对与存储二进制文件好

花了一下午时间,终于学会了在数据库中存储图片,以及在界面中显示图片了. 存储图片有两种方法: 一种是:直接把图片转换成二进制文件存储在数据库中. 一种是:存储图片的路径到数据库,用的时候直接调用路径给image等图像控件即可. 两种方法,有利有弊,第一种方法适合存储量少且重要的图片信息.第二种方法适合存储量大但不是太重要的图片. 我使用的是第二种方法,简单,实用. 下面就是我具体的实现过程: 首先我新建了两个网页文件,insert_photo.aspx / select_photo.apsx 第

新标杆 华天动力全新OA系统解析之UI界面

日前,国内领先的OA系统品牌华天动力发布了垂直换代的最新版本,新系统在功能与性能上进行了大幅度的全面升级.作为OA系统行业一款重量级的产品,将OA系统提升到一个新的高度,堪称行业新的标杆.为此,我们整理一个系列文章,向您全面解析这个全新的OA系统. 关于软件的UI界面设计,国内软件商显得要比国外同行更为重视.或许,国内的客户也更在乎视觉上的体验.而对于OA系统来说,其界面设计又比ERP等其他管理软件更高级,看起来更赏心悦目. 华天动力新版OA系统的界面进行了很大改动,却也没有面目全非,还是能够看

MVVM模式的UI界面数据返回问题

MVVM模式里面用户UI界面的数据返回问题,让我纠结了好几天,一直得不到数据,今天总算能取到UI界面的数据了! 我采用的是ListView显示数据和Prism模式,并且将数据显示成了大图标的样式,即水平显示,但是下面测试用的我就没有采用水平显示,做了简单Model. XAML 代码: <ListView ItemsSource="{Binding ProductList}" x:Name="lv" Margin="8,8,8,37.96"