unity3D實(shí)現(xiàn)物體任意角度自旋轉(zhuǎn)
本文實(shí)例為大家分享了unity3D實(shí)現(xiàn)物體任意角度自旋轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下
主要涉及函數(shù):
Input.GetAxis(“Mouse x”) 可取得鼠標(biāo)橫向(x軸)移動(dòng)增量
Input.GetAxis(“Mouse y”) 可取得鼠標(biāo)豎向(y軸)移動(dòng)增量
通過勾股定理獲取拖拽長(zhǎng)度,長(zhǎng)度越長(zhǎng)旋轉(zhuǎn)越快。在project setting--Input 可以設(shè)置。
這里用Cube來做例子,因?yàn)榉襟w看旋轉(zhuǎn)比較清楚,如圖:

代碼如下:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
private bool onDrag = false; //是否被拖拽//
public float speed = 6f; //旋轉(zhuǎn)速度//
private float tempSpeed; //阻尼速度//
private float axisX = 1;
//鼠標(biāo)沿水平方向移動(dòng)的增量//
private float axisY = 1; //鼠標(biāo)沿豎直方向移動(dòng)的增量//
private float cXY;
void OnMouseDown()
{
//接受鼠標(biāo)按下的事件//
axisX = 0f; axisY = 0f;
}
void OnMouseDrag() //鼠標(biāo)拖拽時(shí)的操作//
{
onDrag = true;
axisX = -Input.GetAxis("moveX");
//獲得鼠標(biāo)增量//
axisY = Input.GetAxis("moveY");
cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY); //計(jì)算鼠標(biāo)移動(dòng)的長(zhǎng)度//
if (cXY == 0f) { cXY = 1f; }
}
float Rigid() //計(jì)算阻尼速度//
{
if (onDrag)
{
tempSpeed = speed;
}
else
{
if (tempSpeed > 0)
{
tempSpeed -= speed * 2 * Time.deltaTime / cXY; //通過除以鼠標(biāo)移動(dòng)長(zhǎng)度實(shí)現(xiàn)拖拽越長(zhǎng)速度減緩越慢//
}
else {
tempSpeed = 0;
}
}
return tempSpeed;
}
void Update()
{
// this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World); //這個(gè)是是按照之前方向一直慢速旋轉(zhuǎn)
if (!Input.GetMouseButton(0))
{
onDrag = false;
this.transform.Rotate(new Vector3(axisY, axisX, 0)*0.5f, Space.World);
}
}
}
最終效果如圖:


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
WPF實(shí)現(xiàn)繪制統(tǒng)計(jì)圖(柱狀圖)的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何基于WPF實(shí)現(xiàn)實(shí)現(xiàn)統(tǒng)計(jì)圖(柱狀圖)的繪制,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)WPF有一定幫助,感興趣的可以了解一下2022-07-07
親自教你實(shí)現(xiàn)棧及C#中Stack源碼分析
大家都知道棧的實(shí)現(xiàn)方式有兩種,一種是基于數(shù)組實(shí)現(xiàn)的順序棧,另一種是基于鏈表實(shí)現(xiàn)的鏈?zhǔn)綏?。這篇文章主要介紹了手把手教你實(shí)現(xiàn)棧以及C#中Stack源碼分析,需要的朋友可以參考下2021-09-09
C#中Request.Cookies 和 Response.Cookies 的區(qū)別分析
本文通過實(shí)例代碼向我們展示了C#中Request.Cookies 和 Response.Cookies 的區(qū)別,文章淺顯易懂,這里推薦給大家。2014-11-11
解析Silverlight調(diào)用WCF/Rest異常的解決方法
本篇文章對(duì)Silverlight調(diào)用WCF/Rest異常的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼的示例代碼
區(qū)位碼是一個(gè)4位的十進(jìn)制數(shù),每個(gè)區(qū)位碼都對(duì)應(yīng)著一個(gè)唯一的漢字,區(qū)位碼的前兩位叫做區(qū)碼,后兩位叫做位碼,下面我們就來看看如何使用C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼吧2024-01-01
C#使用TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)發(fā)送和接受的方法
這篇文章主要介紹了c#使用TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)發(fā)送和接受,使用TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受包括客戶端和服務(wù)端兩個(gè)部分,本文通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04

