1. 程式人生 > >Unity3d觸控式螢幕手勢控制鏡頭旋轉卡位到目標物件

Unity3d觸控式螢幕手勢控制鏡頭旋轉卡位到目標物件

本文主要介紹如何在unity中通過滑鼠或手指觸控螢幕對鏡頭進行旋轉,並實現鏡頭旋轉卡位功能,使鏡頭平滑的旋轉至目標角度。

鏡頭繞著目標物件進行旋轉改變的是攝相機在世界座標中的x、y方向的座標值。那麼我們只需要在指令碼中控制相機的x\y座標即可。

將指令碼RotationTarget.cs新增到主攝相機上,在遊戲場景裡建立一個簡單的遊戲物件作為鏡頭旋轉的參照物,將該遊戲物件賦值給公開屬性TargetObject;

下面是完整的RotationTarget.cs程式碼篇段:

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程式碼; 
以上程式碼必須在觸屏裝置才有效果,在電腦上執行沒有效果,在android真機上經過測試,ios系統下沒有測試過,

相關推薦

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;//小球運動的速率