Unity實(shí)現(xiàn)繞任意軸任意角度旋轉(zhuǎn)向量
本文實(shí)例為大家分享了Unity實(shí)現(xiàn)繞任意軸任意角度旋轉(zhuǎn)向量的具體代碼,供大家參考,具體內(nèi)容如下
游戲中有一需求,就是一個(gè)矩形或者Cube繞著某一點(diǎn)旋轉(zhuǎn)任意角度,現(xiàn)在給出下面算法。
public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle)
{
Vector3 point = Quaternion.AngleAxis(angle, axis) * (position - center);
Vector3 resultVec3 = center + point;
return resultVec3;
}
測(cè)試用例
using UnityEngine;
using System.Collections;
public class RotateTest : MonoBehaviour
{
public LineRenderer line1;
public LineRenderer line2;
public float angle = 30f;
private Vector3 v0;
private Vector3 v1;
private Vector3 v2;
private Vector3 v3;
private Vector3 v4;
private Vector3 vCenter;
void Start()
{
v0 = new Vector3(3f,0f,1f);
v1 = new Vector3(1f, 0f, 3f);
v2 = new Vector3(4f, 0f, 6f);
v3 = new Vector3(6f, 0f, 4f);
vCenter = new Vector3(2f, 0f, 2f);
}
// Use this for initialization
void Update ()
{
line1.SetVertexCount(5);
line1.SetPosition(0,v0);
line1.SetPosition(1,v1);
line1.SetPosition(2,v2);
line1.SetPosition(3,v3);
line1.SetPosition(4,v0);
line2.SetVertexCount(5);
Vector3 v01 = MathUtils.RotateRound(v0, vCenter, Vector3.up, angle);
Vector3 v11 = MathUtils.RotateRound(v1, vCenter, Vector3.up, angle);
Vector3 v21 = MathUtils.RotateRound(v2, vCenter, Vector3.up, angle);
Vector3 v31 = MathUtils.RotateRound(v3, vCenter, Vector3.up, angle);
Vector3 v41 = MathUtils.RotateRound(v4, vCenter, Vector3.up, angle);
line2.SetPosition(0, v01);
line2.SetPosition(1, v11);
line2.SetPosition(2, v21);
line2.SetPosition(3, v31);
line2.SetPosition(4, v01);
}
}
效果圖

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Unity 從UI中拖拽對(duì)象放置并拖動(dòng)效果 附demo
- Unity UGUI實(shí)現(xiàn)簡(jiǎn)單拖拽圖片功能
- Unity工具類ScrollView實(shí)現(xiàn)拖拽滑動(dòng)翻頁(yè)
- Unity UI拖拽模型選擇功能
- Unity3D實(shí)現(xiàn)物體旋轉(zhuǎn)縮放移動(dòng)效果
- Unity向量按照某一點(diǎn)進(jìn)行旋轉(zhuǎn)
- Unity實(shí)現(xiàn)旋轉(zhuǎn)扭曲圖像特效
- Unity實(shí)現(xiàn)物體沿自身的任意軸向旋轉(zhuǎn)
- Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果
- Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn)
相關(guān)文章
C#實(shí)現(xiàn)將程序運(yùn)行信息寫入日志的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將程序運(yùn)行信息寫入日志的方法,可實(shí)現(xiàn)將程序運(yùn)行信息寫入日志并存儲(chǔ)在Debug目錄下的"/Log/PRG"下的功能,涉及C#針對(duì)日志的相關(guān)寫入技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
關(guān)于C#中async/await的用法實(shí)例詳解
這篇文章主要介紹了關(guān)于C#中async/await的用法,今天寫一個(gè)demo徹底搞明白async/await的用法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
C#實(shí)現(xiàn)的SN快速輸入工具實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的SN快速輸入工具,以實(shí)例的形式詳細(xì)講述了C#實(shí)現(xiàn)序列號(hào)快速輸入的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
C# WinForm捕獲全局變量異常 SamWang解決方法
本文將介紹C# WinForm捕獲全局變量異常 SamWang解決方法,需要的朋友可以參考2012-11-11
C#中OpenCvSharp 通過特征點(diǎn)匹配圖片的方法
這篇文章主要介紹了OpenCvSharp 通過特征點(diǎn)匹配圖片的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
使用 C# 動(dòng)態(tài)編譯代碼和執(zhí)行的代碼
一個(gè)控制臺(tái)例子, 演示了如何用 C# 動(dòng)態(tài)的生成代碼, 編譯代碼, 最后執(zhí)行2011-05-05
WinForm實(shí)現(xiàn)攔截窗體上各個(gè)部位的點(diǎn)擊特效實(shí)例
這篇文章主要介紹了WinForm實(shí)現(xiàn)攔截窗體上各個(gè)部位的點(diǎn)擊特效實(shí)例,對(duì)窗體上各個(gè)部位進(jìn)行定義,從而實(shí)現(xiàn)了點(diǎn)擊特效,需要的朋友可以參考下2014-09-09
C#實(shí)現(xiàn)微信結(jié)合百度api獲取當(dāng)前用戶地理位置的方法
這篇文章主要介紹了C#實(shí)現(xiàn)微信結(jié)合百度api獲取當(dāng)前用戶地理位置的方法,結(jié)合實(shí)例形式分析了C#調(diào)用微信與百度API接口的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07

