資源簡介
當我們做一些農場游戲或者類似可編輯戰場類游戲時經常會遇到從UI上拖動物體在3D場景里生成,要實現這種從UI上拖物體的效果其實挺簡單,代碼不復雜,主要是想法很重要,一個優秀的程序員不只是技術扎實,更重要的是要多思考,不思考的程序員只是一個碼農。

代碼片段和文件信息
using?System.Collections;
using?System.Collections.Generic;
using?UnityEngine;
public?class?Dragobject?:?MonoBehaviour?{
//只針對指定的層級進行拖動
public?layerMask?_draglayerMask;
//指定當前要拖動的對象
public?Transform?currentTransform;
//是否可以拖動當前對象
public?bool?isDrag?=?false;
//用于存儲當前需要拖動的對象在屏幕空間中的坐標
Vector3?screenPos?=?Vector3.zero;
//當前需要拖動對象的坐標相對于鼠標在世界空間坐標中的偏移量
Vector3?offset?=?Vector3.zero;
void?Update?()?{
if?(Input.GetMouseButtonDown?(0))?{
//將鼠標輸入點轉化為一條射線
Ray?ray?=?Camera.main.ScreenPointToRay?(Input.mousePosition);
RaycastHit?hitinfo;
//如果當前對象與指定的層級發生碰撞,表示當前對象可以被拖動
if?(Physics.Raycast?(ray?out?hitinfo?1000f?_draglayerMask))?{
isDrag?=?true;
//將當前需要拖動的對象賦值為射線碰撞到的對象
currentTransform?=?hitinfo.transform;
//將當前對象的世界坐標轉化為屏幕坐標
screenPos?=?Camera.main.WorldToScreenPoint?(currentTransform.position);
//將鼠標的屏幕坐標轉換為世界空間坐標,再與當前要拖動的對象計算兩者的偏移量
offset?=?currentTransform.position?-?Camera.main.ScreenToWorldPoint?(new?Vector3?(Input.mousePosition.x?Input.mousePosition.y?screenPos.z));
}?else?{
isDrag?=?false;
}
}
if?(Input.GetMouseButton?(0))?{
if?(isDrag?==?true)?{
var?currentScreenPos?=?new?Vector3?(Input.mousePosition.x?Input.mousePosition.y?screenPos.z);
//鼠標的屏幕空間坐標轉化為世界坐標,并加上偏移量
var?currentPos?=?Camera.main.ScreenToWorldPoint?(currentScreenPos)?+?offset;
currentTransform.position?=?currentPos;
}
}
if?(Input.GetMouseButtonUp?(0))?{
isDrag?=?false;
currentTransform?=?null;
}
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-07-31?07:41??Placeob
?????目錄???????????0??2018-07-31?07:41??Placeob
?????文件????????1347??2018-07-31?07:41??Placeob
?????文件????????7207??2018-07-31?07:41??Placeob
?????目錄???????????0??2018-07-31?07:41??Placeob
?????文件?????????213??2018-07-31?07:41??Placeob
?????目錄???????????0??2018-07-31?07:41??Placeob
?????文件????????2019??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
?????文件????????2012??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
?????文件????????1991??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
?????文件????????2019??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
?????文件?????????213??2018-07-31?07:41??Placeob
?????目錄???????????0??2018-07-31?07:41??Placeob
?????文件????????2718??2018-07-31?07:41??Placeob
?????文件?????????231??2018-07-31?07:41??Placeob
?????文件????????2709??2018-07-31?07:41??Placeob
?????文件?????????231??2018-07-31?07:41??Placeob
?????文件????????2704??2018-07-31?07:41??Placeob
?????文件?????????231??2018-07-31?07:41??Placeob
?????文件?????????213??2018-07-31?07:41??Placeob
?????目錄???????????0??2018-07-31?07:41??Placeob
?????文件?????????679??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
?????文件?????????676??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
?????文件?????????678??2018-07-31?07:41??Placeob
?????文件?????????229??2018-07-31?07:41??Placeob
............此處省略533個文件信息
- 上一篇:GSM模塊的使用說明
- 下一篇:vivado燒寫與擦除flash.pdf
評論
共有 條評論