資源簡介
u3d拖拽旋轉(zhuǎn)縮放模型腳本:
拖放到要操作的模型即可
拖放到要操作的模型即可
代碼片段和文件信息
using?System.Collections;
using?System.Collections.Generic;
using?UnityEngine;
public?class?DragRoteScale?:?MonoBehaviour
{
????public?float?scaleRate?=?0.01f;?????????//縮放系數(shù)
????public?float?scaleMin?=?0.1f;???????????//最小縮放
????public?float?scaleMax?=?10.0f;??????????//最大縮放
????public?bool?isRotateY?=?true;???//是否繞y軸旋轉(zhuǎn)
????public?bool?isRotateX?=?true;???//是否繞X軸旋轉(zhuǎn)
????public?float?rotateRate?=?1.0f;?//旋轉(zhuǎn)系數(shù)
????public?Transform?transform?=?null;??//要操作的物體若直接掛在物體上不用設(shè)置
????private?Touch?oldTouch1;??//上次觸摸點(diǎn)1(手指1)
????private?Touch?oldTouch2;??//上次觸摸點(diǎn)2(手指2)
????private?bool?isDrag?=?false;????????//拖拽標(biāo)志
????private?Vector3?m_Offset;???????????//偏移值
????private?Vector3?m_TargetScreenVec;??//當(dāng)前物體對應(yīng)的屏幕坐標(biāo)
????private?bool?isRote?=?false;????????//是否旋轉(zhuǎn)
????private?Vector2?oldMousePos;????????//鼠標(biāo)上次位置
????void?Start()
????{
????????if?(transform?==?null)
????????{
????????????transform?=?gameobject.transform;
????????}
????}
????void?Update()
????{
????????if?(Application.platform?==?RuntimePlatform.Android?||?Application.platform?==?RuntimePlatform.IPhonePlayer)
????????{
????????????if?(Input.touchCount?<=?0)??//沒有觸摸
????????????????return;
????????????Touch?touch1?=?new?Touch();
????????????Touch?touch2?=?new?Touch();
????????????if?(Input.touchCount?>=?1)
????????????????touch1?=?Input.GetTouch(0);
????????????if?(Input.touchCount?>=?2)
????????????????touch2?=?Input.GetTouch(1);
????????????if?(Input.touchCount?==?1)//單指
????????????{
????????????????if?(touch1.phase?==?TouchPhase.Began)//開始單擊
????????????????{
????????????????????Ray?ray?=?Camera.main.ScreenPointToRay(touch1.position);
????????????????????//hit用來存儲碰撞物體的信息???
????????????????????RaycastHit?hit;
????????????????????//ray表示射線,hit存儲物體的信息100為設(shè)定射線發(fā)射的距離???
????????????????????if?(Physics.Raycast(ray?out?hit?100)?&&?hit.transform?==?transform)?//自身被點(diǎn)中
????????????????????{
????????????????????????isDrag?=?true;
????????????????????????//當(dāng)前物體對應(yīng)的屏幕坐標(biāo)
????????????????????????m_TargetScreenVec?=?Camera.main.WorldToScreenPoint(transform.position);
????????????????????????//偏移值=物體的世界坐標(biāo),減去轉(zhuǎn)化之后的鼠標(biāo)世界坐標(biāo)(z軸的值為物體屏幕坐標(biāo)的z值)
????????????????????????m_Offset?=?transform.position?-?Camera.main.ScreenToWorldPoint(new?Vector3(touch1.position.x?touch1.position.y?m_TargetScreenVec.z));
????????????????????}
????????????????????else
????????????????????????isDrag?=?false;
????????????????}
????????????????else
????????????????{
????????????????????if?(isDrag)??//拖拽
????????????????????{
????????????????????????//當(dāng)前坐標(biāo)等于轉(zhuǎn)化鼠標(biāo)為世界坐標(biāo)(z軸的值為物體屏幕坐標(biāo)的z值)+?偏移量
????????????????????????transform.position?=?Camera.main.ScreenToWorldPoint(new?Vector3(touch1.position.x?touch1.position.y?m_TargetScreenVec.z))?+?m_Offset;
????????????????????}
????????????????????else????????//旋轉(zhuǎn)
????????????????????{
????????????????????????if?(isRotateY)
????????????????????????????transform.Rotate(Vector3.down?*?touch1.deltaPosition.x?*?rotat
- 上一篇:C#winform textbox 畫邊框和圓角
- 下一篇:Echart使用demo
評論
共有 條評論