unity3D实现物体任意角度自旋转

本文实例为大家分享了unity3D实现物体任意角度自旋转的具体代码,供大家参考,具体内容如下

主要涉及函数:

Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量

Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量

通过勾股定理获取拖拽长度,长度越长旋转越快。在project setting--Input 可以设置。

这里用Cube来做例子,因为方体看旋转比较清楚,如图:

代码如下:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

 private bool onDrag = false; //是否被拖拽//
 public float speed = 6f;  //旋转速度//
 private float tempSpeed;  //阻尼速度//
 private float axisX = 1;
 //鼠标沿水平方向移动的增量//
 private float axisY = 1;  //鼠标沿竖直方向移动的增量//
 private float cXY;
 void OnMouseDown()
 {
 //接受鼠标按下的事件// 

 axisX = 0f; axisY = 0f;
 }
 void OnMouseDrag()   //鼠标拖拽时的操作//
 {

 onDrag = true;
 axisX = -Input.GetAxis("moveX");
 //获得鼠标增量//
 axisY = Input.GetAxis("moveY");
 cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY); //计算鼠标移动的长度//
 if (cXY == 0f) { cXY = 1f; }

 }
 float Rigid()   //计算阻尼速度//
 {
 if (onDrag)
 {
  tempSpeed = speed;
 }
 else
 {
  if (tempSpeed > 0)
  {
  tempSpeed -= speed * 2 * Time.deltaTime / cXY; //通过除以鼠标移动长度实现拖拽越长速度减缓越慢//
  }
  else {
  tempSpeed = 0;
  }
 }
 return tempSpeed;
 }

 void Update()
 {
 // this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World); //这个是是按照之前方向一直慢速旋转
 if (!Input.GetMouseButton(0))
 {
  onDrag = false;
  this.transform.Rotate(new Vector3(axisY, axisX, 0)*0.5f, Space.World);
 }
 }
}

最终效果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity3D实现物体旋转缩放移动效果

    本文实例为大家分享了Unity3D实现物体旋转缩放移动的具体代码,供大家参考,具体内容如下 由于项目运行在安卓上,运用到了插件,比较麻烦.你们可以在触发条件上进行修改,不用插件也可以. 1.下载FingerGestures 插件 下载地址 点击打开链接 2.导入插件,创建场景 将预设Finger Gestures Initializer 拖拽到 Hierarchy 视图中 3.添加脚本,拖拽到摄像机上.创建一个方块拖拽到脚本target 属性上. using UnityEngine; using

  • unity3D实现物体任意角度自旋转

    本文实例为大家分享了unity3D实现物体任意角度自旋转的具体代码,供大家参考,具体内容如下 主要涉及函数: Input.GetAxis("Mouse x") 可取得鼠标横向(x轴)移动增量 Input.GetAxis("Mouse y") 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长度,长度越长旋转越快.在project setting--Input 可以设置. 这里用Cube来做例子,因为方体看旋转比较清楚,如图: 代码如下: using UnityE

  • 让图片旋转任意角度及JQuery插件使用介绍

    引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").rotate(45);把这句放在$(document).ready(function(){ });中 就是将id为rotate-image的图片旋转45度. 不过,貌似在Chrome中总是不显示. 唉,找了两个小时,才发现Chrome太坑爹了,没法获取图片的长宽. 解决办法是,把$("#rotate-

  • C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字

    前言 这篇文章是 GDI+ 总结系列的第三篇,如果对 GDI+ 的基础使用不熟悉的朋友可以先看第一篇文章<C# 使用 GDI+ 画图>. 需求 需求是要实现给图片添加任意角度旋转的文字,文字的旋转中心要是在文字区域中央,就像 CSS 的 rotate 函数一样的效果.如下: 分析&思路 Graphics 类有个 RotateTransform 方法,可以传入任意角度的值来旋转画板.但是这个方法的旋转中心是画板的左上角,所以直接单单用这个方法不能满足我们的需求.此外, Graphics

  • Java实现图片翻转以及任意角度旋转

    最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在绘图的时候需要显示翻转而不需要另外生成图片的情况,这些代码用起来非常的麻烦.最后仔细的研究了一下JDK文档,用Graphics2D很简单的就实现了以下功能: 1.图片的翻转,包括水平翻转以及垂直翻转 2.图片的任意角度旋转.因为工程需要,代码里面都直接写成了+90,根据需要,可以对这个值进行改动,以

  • Unity实现物体沿自身的任意轴向旋转

    本文实例为大家分享了Unity实现物体沿任意轴向旋转,供大家参考,具体内容如下 一.创建一个需要旋转的物体 二.编写控制该物体的脚本 using UnityEngine; using System.Collections; public class Test_ElectricFan : MonoBehaviour { public bool isOpen=false; //是否开始旋转 public int speed=2; //旋转的速度 // Use this for initializat

  • Unity实现绕任意轴任意角度旋转向量

    本文实例为大家分享了Unity实现绕任意轴任意角度旋转向量的具体代码,供大家参考,具体内容如下 游戏中有一需求,就是一个矩形或者Cube绕着某一点旋转任意角度,现在给出下面算法. public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle) { Vector3 point = Quaternion.AngleAxis(angle, axis) * (position -

  • opencv图片的任意角度旋转实现示例

    目录 一 旋转角度坐标的计算 二 旋转任意角度的步骤 三 实现 一 旋转角度坐标的计算 1.如果O点为圆心,则点P绕点O旋转redian弧度之后,点P的坐标变换为点Q的计算公式为: Q.x=P.x*cos(redian)-P.y*sin(redian) Q.y=P.x*sin(redian)+P.y*cos(redian) redian表示的为弧度 弧度与角度的变换公式为: redian=pi*180/angle 2. 如果O点不是圆心,则点P绕点O旋转redian弧度之后,点P的坐标变换为Q的

  • iOS中实现imageView任意角度旋转的方法

    前言 在实际的开发中我们可能会遇到这种情况: 需要对图片进行一定角度的旋转.对于这种需要,我们可能会用UIView的transform进行旋转,但是这样做其实只是对承载imageView的view进行了一定角度的旋转,而imageView并没有旋转.所有这样的做法并不好. 如果需要实现对imageView实现一定角度的旋转,具体步骤是: 1.将image转成context. 2.对context进行一定角度的旋转. 3.将旋转后的context 转化成image. 经过这三个步骤,我们就能够实现

  • python opencv实现任意角度的透视变换实例代码

    本文主要分享的是一则python+opencv实现任意角度的透视变换的实例,具体如下: # -*- coding:utf-8 -*- import cv2 import numpy as np def rad(x): return x * np.pi / 180 img = cv2.imread("6.jfif") cv2.imshow("original", img) # 扩展图像,保证内容不超出可视范围 img = cv2.copyMakeBorder(img,

随机推荐