欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity3D實現(xiàn)物體旋轉(zhuǎn)縮放移動效果

 更新時間:2019年02月22日 10:22:55   作者:qq_27361571  
這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)物體旋轉(zhuǎn)縮放移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Unity3D實現(xiàn)物體旋轉(zhuǎn)縮放移動的具體代碼,供大家參考,具體內(nèi)容如下

由于項目運行在安卓上,運用到了插件,比較麻煩。你們可以在觸發(fā)條件上進行修改,不用插件也可以。

1.下載FingerGestures 插件 下載地址 點擊打開鏈接

2.導入插件,創(chuàng)建場景 將預設Finger Gestures Initializer 拖拽到 Hierarchy 視圖中

3.添加腳本,拖拽到攝像機上。創(chuàng)建一個方塊拖拽到腳本target 屬性上。

using UnityEngine;
using System.Collections;
 
public class ObjectControl : MonoBehaviour
{
 public Transform target;
 public float yawSensitivity = 80.0f;
 public float pitchSensitivity = 160.0f;
 public bool clampPitchAngle = true;
 public float pinchZoomSensitivity = 0.5f;//縮放速度
 public float smoothZoomSpeed = 10.0f;
 public float smoothOrbitSpeed = 20.0f;
 public float distance = 0;
 
 float yaw = 0;
 float pitch = 0;
 float idealYaw = 0;
 float idealPitch = 0;
 float fChangeScale = 0;
 float fChangeideal = 0;
 public Transform[] movementP;
 
 /// <summary>
 /// 控制模式枚舉
 /// </summary>
 public enum ControlModel
 {
 Zoom, Rotate, Translate
 }
 
 public ControlModel controlModel = ControlModel.Rotate;
 
 //Vector3 position=new Vector3();
 public bool bArrive = false;//鼠標是否到達零件箱邊界區(qū)域
 //平移方式是否根據(jù)鼠標拖動距離還是直接置為鼠標位置
 public bool ifDragMove = false;
 //平移方式為:根據(jù)鼠標拖動距離 時,評議的速度
 public float moveSpeed = 1.0f;
 //是夠需要畫出按鈕(縮放、旋轉(zhuǎn)、平移)
 public bool ifDrawBtn = true;
 //縮放方式改為:改變相機范圍
 public bool zoomCamera = false;
 //zoomCamera = true ,相機的最小范圍值
 public float minZoom = 0f;
 //zoomCamera = true ,相機的最大范圍值
 public float maxZoom = 179f;
 //平移對象
 public Transform moveTarget;
 //平移對象的初始位置
 Vector3 moveTargetPos;
 //模型的直接父對象
 public Transform parentModel;
 Vector3 parentModelPos;
 
 void Start()
 {
 zoomCamera = true;
 }
 
 void OnEnable()
 {
 
 FingerGestures.OnDragMove += FingerGestures_OnDragMove;
 FingerGestures.OnPinchMove += FingerGestures_OnPinchMove;
 FingerGestures.OnFingerDragEnd += OnFingerDragEnd;
 
 }
 
 void OnDisable()
 {
 FingerGestures.OnDragMove -= FingerGestures_OnDragMove;
 FingerGestures.OnPinchMove -= FingerGestures_OnPinchMove;
 FingerGestures.OnFingerDragEnd -= OnFingerDragEnd;
 }
 
 public void setRotation()
 {
 Vector3 angles = target.eulerAngles;
 yaw = idealYaw = angles.y;
 pitch = idealPitch = angles.x;
 }
 
 void FingerGestures_OnDragMove(Vector2 fingerPos, Vector2 delta)
 {
 onDrag = true;
 try
 {
  Screen.showCursor = false;
 }
 catch
 {
  Screen.showCursor = false;
 }
 if (controlModel == ControlModel.Rotate && !bArrive)
 {
  idealYaw -= delta.x * yawSensitivity * 0.02f;
  idealPitch += delta.y * pitchSensitivity * 0.02f;
  len = delta;
  if (target) target.transform.Rotate(new Vector3(delta.y, -delta.x, 0), Space.World);
 }
 if (controlModel == ControlModel.Translate && !bArrive)
 {
  if (ifDragMove)
  {
  if (moveTarget == null)
  {
   target.position = new Vector3(target.position.x + delta.x * moveSpeed, target.position.y + delta.y * moveSpeed, target.localPosition.z);// GetWorldPos( fingerPos );
  }
  else
  {
   moveTarget.position = new Vector3(moveTarget.position.x + delta.x * moveSpeed, moveTarget.position.y + delta.y * moveSpeed, moveTarget.localPosition.z);
  }
  }
  else
  {
  if (moveTarget == null)
  {
   target.position = GetWorldPos(fingerPos);
  }
  else
  {
   moveTarget.position = GetWorldPos(fingerPos);
  }
  }
 }
 
 }
 
 void FingerGestures_OnPinchMove(Vector2 fingerPos1, Vector2 fingerPos2, float delta)
 {
 
 if (controlModel == ControlModel.Zoom && !bArrive)
 {
  if (zoomCamera)
  {
  float fZoom = camera.fieldOfView - delta * pinchZoomSensitivity * 800 * Time.deltaTime;
  fZoom = Mathf.Min(fZoom, maxZoom);
  fZoom = Mathf.Max(fZoom, minZoom);
  camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, fZoom, Time.deltaTime * smoothZoomSpeed);
  // camera.transform.position = target.position - fZoom * camera.transform.forward;
  }
  else
  {
 
  fChangeScale = target.localScale.x + delta * pinchZoomSensitivity;
 
  Vector3 vc = new Vector3(fChangeScale, fChangeScale, fChangeScale);
  }
 }
 }
 //滑動結(jié)束
 void OnFingerDragEnd(int fingerIndex, Vector2 fingerPos)
 {
 Screen.showCursor = true;
 
 onDrag = false;
 }
 
 
 //把Unity屏幕坐標換算成3D坐標
 Vector3 GetWorldPos(Vector2 screenPos)
 {
 // Camera mainCamera = Camera.main;
 Camera mainCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
 if (!mainCamera.enabled)
 {
  mainCamera = mainCamera.transform.parent.FindChild("CameraOne").GetComponent<Camera>();
 }
 return mainCamera.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, Mathf.Abs(target.position.z - mainCamera.transform.position.z)));
 }
 
 void Apply()
 {
 if (controlModel == ControlModel.Rotate && !bArrive)
 {
  yaw = Mathf.Lerp(yaw, idealYaw, Time.deltaTime * smoothOrbitSpeed);
  pitch = Mathf.Lerp(pitch, idealPitch, Time.deltaTime * smoothOrbitSpeed);
 }
 }
 bool onDrag;
 Vector2 len;
 
 void LateUpdate()
 {
 if (Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(0))
 {
  Screen.showCursor = true;
 }
 Apply();
 }
 
 static float ClampAngle(float angle, float min, float max)
 {
 if (angle < -360)
  angle += 360;
 
 if (angle > 360)
  angle -= 360;
 
 return Mathf.Clamp(angle, min, max);
 }
 
 void Update()
 {
 ///自由切換
 
 if (Input.GetMouseButtonDown(0))
 {
 
  controlModel = ControlModel.Translate;
 }
 
 if (Input.GetMouseButtonDown(1))
 {
 
  controlModel = ControlModel.Rotate;
 }
 
 if (Input.GetAxis("Mouse ScrollWheel") != 0)
 {
  controlModel = ControlModel.Zoom;
 }
 
 }
 
 /// <summary>
 /// 復位
 /// </summary>
 public void ResetValue()
 {
 if (moveTarget != null)
 {
  moveTarget.localPosition = moveTargetPos;
 }
 if (parentModel != null)
 {
  parentModel.localPosition = parentModelPos;
 }
 yaw = 0;
 pitch = 0;
 idealYaw = 0;
 idealPitch = 0;
 }
 
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#利用iTextSharp添加PDF水印

    C#利用iTextSharp添加PDF水印

    這篇文章主要為大家詳細介紹了C#利用iTextSharp添加PDF水印的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Unity向量按照某一點進行旋轉(zhuǎn)

    Unity向量按照某一點進行旋轉(zhuǎn)

    這篇文章主要為大家詳細介紹了Unity向量按照某一點進行旋轉(zhuǎn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 在C#中使用MongoDB數(shù)據(jù)庫

    在C#中使用MongoDB數(shù)據(jù)庫

    這篇文章介紹了在C#中使用MongoDB數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 基于C#委托的深入分析

    基于C#委托的深入分析

    本篇文章介紹了,基于C#委托的深入分析。需要的朋友參考下
    2013-04-04
  • C#使用正則表達式實現(xiàn)首字母轉(zhuǎn)大寫的方法

    C#使用正則表達式實現(xiàn)首字母轉(zhuǎn)大寫的方法

    這篇文章主要介紹了C#使用正則表達式實現(xiàn)首字母轉(zhuǎn)大寫的方法,涉及C#基于正則表達式操作字符串的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • VB.NET中Caching的使用方法

    VB.NET中Caching的使用方法

    Caching緩存,就是將一些生成代價比較大的常用數(shù)據(jù),保存起來重用。一般數(shù)據(jù)都保存在內(nèi)存中,因為從內(nèi)存中讀取數(shù)據(jù)比從數(shù)據(jù)庫等其他地方要快。
    2013-04-04
  • C#中數(shù)組、ArrayList和List三者的區(qū)別詳解及實例

    C#中數(shù)組、ArrayList和List三者的區(qū)別詳解及實例

    這篇文章主要介紹了C#中數(shù)組、ArrayList和List三者的區(qū)別詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • C#實現(xiàn)定時關(guān)機小應用

    C#實現(xiàn)定時關(guān)機小應用

    這篇文章主要為大家詳細介紹了C#實現(xiàn)定時關(guān)機小應用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C#實現(xiàn)定義一套中間SQL可以跨庫執(zhí)行的SQL語句(案例詳解)

    C#實現(xiàn)定義一套中間SQL可以跨庫執(zhí)行的SQL語句(案例詳解)

    這篇文章主要介紹了C#實現(xiàn)定義一套中間SQL可以跨庫執(zhí)行的SQL語句,主要包括hisql查詢樣例、group by查詢、鏈式查詢及hisql語句和鏈式查詢混用的sql語句,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#獲取CPU處理器核心數(shù)量的方法

    C#獲取CPU處理器核心數(shù)量的方法

    本文主要介紹了C#獲取CPU處理器核心數(shù)量的方法,代碼簡單易懂,具有很好的參考價值,需要的朋友可以看下
    2016-12-12

最新評論