Unity3d觸控式螢幕手勢控制鏡頭旋轉卡位到目標物件
本文主要介紹如何在unity中通過滑鼠或手指觸控螢幕對鏡頭進行旋轉,並實現鏡頭旋轉卡位功能,使鏡頭平滑的旋轉至目標角度。
鏡頭繞著目標物件進行旋轉改變的是攝相機在世界座標中的x、y方向的座標值。那麼我們只需要在指令碼中控制相機的x\y座標即可。
將指令碼RotationTarget.cs新增到主攝相機上,在遊戲場景裡建立一個簡單的遊戲物件作為鏡頭旋轉的參照物,將該遊戲物件賦值給公開屬性TargetObject;
下面是完整的RotationTarget.cs程式碼篇段:
以上程式碼必須在觸屏裝置才有效果,在電腦上執行沒有效果,在android真機上經過測試,ios系統下沒有測試過,using UnityEngine; using System.Collections; public class RotationTarget : MonoBehaviour { //攝相機位置的參照物件; public Transform TargetObject; //攝相機的Z軸座標; private float distance = 9.0f; float maxDistance; //攝相機的角度; Vector3 targetV; //手指滑動的始\終位置; Vector2 firstV; Vector2 endV; //手旨在X軸方向上滑動的距離; float dx; //攝相機旋轉的目標角度; float targetAngle; // Use this for initialization void Start () { maxDistance = 105.0f; targetAngle = 0; targetV = FirstCamera.transform.eulerAngles; } void Update () { if(Input.GetTouch(0).phase == TouchPhase.Began) { firstV = Input.GetTouch(0).position; } if(Input.GetTouch(0).phase == TouchPhase.Moved) { endV = Input.GetTouch(0).position; dx = endV.x - firstV.x; targetV.y += dx/30.0f; //將手指在X軸方向上滑過的距離增量賦給攝相機; FirstCamera.transform.eulerAngles = targetV; if(dx > 0 || dx <0) { if(dx < 0) { //向左轉至目標角度; RotateToLeft(); }else if(dx > 0) { //向右轉至目標角度; RotateToRight(); } } } } void LateUpdate () { //利用插值角度方法,調整攝相機的位置和旋轉角度,使相機旋轉到目標角度前後時產生卡位效果; if (Target) { float currentRotationAngle = Mathf.LerpAngle(FirstCamera.transform.eulerAngles.y, targetAngle, 2.0f * Time.deltaTime); Quaternion rotation = Quaternion.Euler(0, currentRotationAngle, 0); Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + TargetObject.position; FirstCamera.transform.rotation = rotation; FirstCamera.transform.position = position; targetV = FirstCamera.transform.eulerAngles; } } /// <summary> /// 向左旋轉至目標角度. /// </summary> void RotateToLeft() { if(FirstCamera.transform.eulerAngles.y >= 0 && FirstCamera.transform.eulerAngles.y < 72) { targetAngle = 0; } else if(FirstCamera.transform.eulerAngles.y >= 72 && FirstCamera.transform.eulerAngles.y < 144) { targetAngle = 72; }else if(FirstCamera.transform.eulerAngles.y >= 144 && FirstCamera.transform.eulerAngles.y < 216) { targetAngle = 144; }else if(FirstCamera.transform.eulerAngles.y >= 216 && FirstCamera.transform.eulerAngles.y < 288) { targetAngle = 216; }else if(FirstCamera.transform.eulerAngles.y >= 288 && FirstCamera.transform.eulerAngles.y < 360) { targetAngle = 288; }else if(FirstCamera.transform.eulerAngles.y <= 360) { targetAngle = 360; } } /// <summary> /// 向右旋轉至目標角度. /// </summary> void RotateToRight() { if(FirstCamera.transform.eulerAngles.y > 0 && FirstCamera.transform.eulerAngles.y <= 72) { targetAngle = 72; } else if(FirstCamera.transform.eulerAngles.y > 72 && FirstCamera.transform.eulerAngles.y <= 144) { targetAngle = 144; }else if(FirstCamera.transform.eulerAngles.y > 144 && FirstCamera.transform.eulerAngles.y <= 216) { targetAngle = 216; }else if(FirstCamera.transform.eulerAngles.y > 216 && FirstCamera.transform.eulerAngles.y <= 288) { targetAngle = 288; }else if(FirstCamera.transform.eulerAngles.y > 288 && FirstCamera.transform.eulerAngles.y <= 360) { targetAngle = 360; }else if(FirstCamera.transform.eulerAngles.y >= 0) { targetAngle = 0; } } } 直接釋出到android平臺下不用寫任何android程式碼;
相關推薦
Unity3d觸控式螢幕手勢控制鏡頭旋轉卡位到目標物件
本文主要介紹如何在unity中通過滑鼠或手指觸控螢幕對鏡頭進行旋轉,並實現鏡頭旋轉卡位功能,使鏡頭平滑的旋轉至目標角度。 鏡頭繞著目標物件進行旋轉改變的是攝相機在世界座標中的x、y方向的座標值。那麼我們只需要在指令碼中控制相機的x\y座標即可。 將指令碼RotationTa
unity3d觸控式螢幕手勢控制鏡頭旋轉與縮放
//用於繫結參照物物件 var target : Transform; //縮放係數 var distance = 10.0; //左右滑動移動速度 var xSpeed = 250.0; var yS
【unity實用技能】unity3d 陀螺儀控制camera移動旋轉
無https://docs.unity3d.com/ScriptReference/Gyroscope.html unity 官方文檔就很清楚,只有一點要註意: 所有教程都教你怎麽用 input.gyro.attitude 但是這個表示的是空間中的位置,首先你是想做像王者榮耀開頭晃動攝像機的效果,需要把上個位
Unity3d 手勢控制模型放大縮小
先看一下效果 步驟: 先新建一個Cube,調整一下位置和大小 新建指令碼Gesture.cs,將指令碼Gesture掛在Cube上 編寫指令碼Gesture.cs using UnityEngine; using System.Coll
Unity3D 第一人稱視角攝像機旋轉控制
//方向靈敏度 public float sensitivityX = 10.0f; public float sensitivityY = 10.0f; //上下最大視角(Y視角) public float minmumY = -60f;
Unity 移動端簡單手勢控制(移動,旋轉,縮放)
using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 點選螢幕實現縮放與旋轉,移動 /// </summary> public cl
Unity攝像機跟隨 Touch遮蔽UI 觸控控制攝像機旋轉,手勢控制放大縮小 穿牆拉近攝像機
using UnityEngine; using System.Collections; using UnityEngine.EventSystems; using UnityEngine.UI; using UnityEngine.PostProcessing; using
轉:IT巨頭紛紛“卡位” 智能語音成人機交互入口必爭之地
擁有 汽車 科技 googl 3.2 三方 nbsp lex 兼容 http://www.cs.com.cn/xwzx/hwxx/201707/t20170712_5368595.html 隨著物聯網的迅速發展,作為重要接口的智能語音技術已成為國內外IT巨頭的
MUI設置卡頭卡位的形式進行切換
parent atm border ltm awl middle 底部選項卡 ons sset 這是mui的官方幫助文檔,一切問題都能在這裏找到http://dev.dcloud.net.cn/mui/ui/解決方案。 下面是MUI官方對卡頭卡尾的一些描
【小松教你手遊開發】【unity實用技能】角色頭部跟隨鏡頭旋轉
無這個在端遊上比較場景,在角色展示的時候,當攝像頭在角色身邊上下左右旋轉時,角色頭部跟隨鏡頭旋轉。如天涯明月刀等。 這個在手遊上比較少見,不過實現也沒什麽區別。 首先一般情況下,找到模型的頭部節點,直接用lookAt指向camera就可以了,不過一般需求不會這麽簡單。 比如說,超過頭部扭動極限,頭部需要插值回
卡位亞洲新門戶,華為雲泰國開服
計算資源 在線 以及 農業 歐洲 proc 速度 雲數據 路線圖 2018年8月23日,泰國投資委員會(BOI)宣布於近期通過了華為技術(泰國)有限公司的投資申請,同意華為在東部經濟走廊(EEC)建設雲數據中心,面向公共機構和企業提供雲服務。華為此次投資首期將達7億泰銖(
Unity控制指標旋轉到指定的位置
一、搭建基礎的錶盤、指標 二、編寫控制指標旋轉到指定位置的指令碼: using UnityEngine; using System.Collections; public class Test_OnDashboard : MonoBehaviour { public int
關於Unity3D第一視角下鏡頭穿牆的問題解決方法
昨天做室內模型的時候,遇到一個非常棘手的問題,那就是第一視角在室內執行的時候,會出現穿牆的效果。類似下圖效果,在靠近牆壁的時候,出現了鏡頭看見了牆壁外的情況,很顯然這是不符合邏輯的。我們要做的就是避免這一問題的發生。 我的程式碼很簡單,就是官方的FPS控制器,拿過來就能用。 我一開始遇到這個問題,
unity3d之滑鼠控制人物移動
參考http://blog.csdn.net/a2587539515/article/details/9390795博文 實現其實很簡單,用到navigation 第一步獲取滑鼠點選的世界座標 第二步,移動到改座標點 程式碼如下: Vector3 poin
Unity3D搖桿控制物體移動及圖片
Unity3D搖桿控制物體移動 指令碼掛在移動的控制器上 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;
實現硬體PWM控制電機旋轉和通過編碼器計算所轉圈數的簡單例程
該例程所用的硬體裝置: 直流電機驅動模組YYH-LWZ: H橋 大功率 正反轉 剎車 PWM 調速 5/12/24V 12V直流減速電機JGB37-520B:ASLONG JGB37-520B編碼器減速電機直流減速馬達A/B相碼盤訊號測速 &nbs
移動端 圖片手勢控制 雙指縮放 單指移動
var pageX,pageY,position_top,position_left; function setGesture(el) { var obj = {}; //定義一個物件 var istouch = fals
正則控制可以輸兩位小數、負數,整數
function num(obj){ obj.value = obj.value.replace(/[^\d.-]/g,""); //清除"數字"和"."以外的字元 obj.value = obj.value.replace(/^\./g,""); //驗證第一個字元是.字 ob
LeapMotion簡單手勢控制
使用LeapMotion做手勢識別,控制物體的放大縮小/移動/旋轉/單選 需要做的效果是: 伸出食指和中指,物體旋轉 食指中指加拇指,物體移動 五指伸出手掌垂直,物體進行放大縮小 食指單指伸出,進入選擇狀態,選擇單個物體控制 準備工作 需要做的是對手指狀態的
Unity3D小球移動控制程式碼(向量相加)
using UnityEngine; using System.Collections; public class BallControl : MonoBehaviour { public float movementSpeed = 6.0f;//小球運動的速率