日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动

發布時間:2023/12/4 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

上一篇通過鼠標移動的代碼很簡單,所以看的人也不多,但是還是要感謝“武裝三藏”在博客園給出的評論和支持,希望他也能看到第二篇,其實可以很簡單,而且是精靈自控制,關鍵是代碼少是我喜歡的方式,也再次印證了Unity3d的復雜性(同樣的功能多次封裝),代碼如下:

public class DebugTest : MonoBehaviour { RectTransform m_Rect;void Start () { m_Rect = GetComponent<RectTransform>(); }void Update() { if(Input.GetMouseButtonUp(0)) { m_Rect.position = Input.mousePosition; }}}

  

效果如下(由于效果基本相似,接上一篇的預覽圖):

這一篇主要解決上一篇最后提出的問題,也就是通過這樣鼠標移動物體時不夠平滑的,不管有多遠都是瞬移過去的,視覺體驗不夠優秀。

本文旨在通過Update中逐幀移動。達到平滑移動的效果

原理

1、記錄鼠標點擊的點,這個點是如果是屏幕坐標
2、將這個屏幕坐標轉換成世界坐標
3、使用鼠標的世界坐標-精靈的世界坐標||也可以使用鼠標的本地坐標-精靈的本地坐標
4、通過3獲得移動方向,做插值在Update里面移動精靈
5、移動精靈可以使用世界坐標移動,也可以通過local本地坐標移動

實現1

通過UGUI 事件系統中的IPointerClickHandler實現鼠標點擊,然后在Update中逐幀移動,所有坐標使用LocalPosition,原理很簡單這里代碼不啰嗦

private RectTransform childPlayTransform;private float speed =10.0f;private Vector2 pointClickPostion;private Vector3 currentLocalPostion;private Vector3 moveDirect;// Use this for initializationvoid Start (){//獲得Image的TransformchildPlayTransform = transform.Find("Image").GetComponent<RectTransform>();}// Update is called once per framevoid Update (){currentLocalPostion = childPlayTransform.localPosition;Vector3 targetPosition = moveDirect * speed + currentLocalPostion;childPlayTransform.localPosition = Vector3.Lerp(currentLocalPostion, targetPosition, Time.deltaTime*4f);}public void OnPointerClick(PointerEventData eventData){Vector2 localPoint;//在矩形范圍內檢測,全局鼠標點擊點,到local點的轉換RectTransformUtility.ScreenPointToLocalPointInRectangle(transform.GetComponent<RectTransform>() , eventData.position,eventData.enterEventCamera, out localPoint);pointClickPostion = localPoint;moveDirect = new Vector3(pointClickPostion.x, pointClickPostion.y, 0) - currentLocalPostion;moveDirect.z = 0;moveDirect.Normalize();}

  

實現2

通過Unity3d 輸入系統Input輸入得鼠標位置,然后再Update中使用世界坐標進行精靈的逐幀平移,代碼如下:

private Transform spriteTransform;Vector3 direction;Vector3 spriteCurentPoistion;Vector3 targetPosition;float speed = 2.0f;void Start () {spriteTransform = transform.Find("Image") as Transform;}// Update is called once per framevoid Update () {spriteCurentPoistion = spriteTransform.position;//向量加法(向鼠標方向)targetPosition = direction * speed + spriteCurentPoistion;spriteTransform.position = targetPosition;}public void OnPointerClick(PointerEventData eventData){Vector3 mouseWorldPointer = new Vector3(eventData.position.x, eventData.position.y, 0);//屏幕坐標轉換成世界坐標//Vector3 mouseWorldPointer = Camera.main.ScreenToWorldPoint(mouseScreenPointer);//向量減法獲得指向鼠標點的方向direction = mouseWorldPointer - spriteTransform.position;direction.z = 0;direction.Normalize();Debug.Log(string.Format("x:{0},y:{1}-- {2},{3}", mouseWorldPointer.x, mouseWorldPointer.y, eventData.position.x, eventData.position.y));}

  

問題記錄

在試驗的時候遇到一些小問題,特此記錄,也希望高手路過慷慨回答

1、關于進行顯性插值函數

Vector3.Lerp(currentLocalPostion, targetPosition, Time.deltaTime*4f);

實際這是一個公式也很簡單,就是我看教程(Unity3d)的時候Time.deltaTime這個值很大,而實際中發現這個值很小,造成插值的時候很微量的移動,不知為何只能乘以一個系數

2、關于Unity3d的Input輸入的函數提示很弱

比如 eventData.position和Input.mousePosition到底是什么坐標是屏幕坐標還是世界坐標,文檔模棱兩可并沒有說明

總結

在實現一個如此小的功能,給人深刻影響的可以使用的方法很多,遇到一些知識點,原理也很簡單,但你不深入卻得不到答案。這個世界就像快餐,變得太快。

轉載于:https://www.cnblogs.com/IlidanStormRage/p/5993772.html

總結

以上是生活随笔為你收集整理的【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色av地址| 日韩毛片中文字幕 | 青青青青青青草 | 欧美第一夜 | 99精品一级欧美片免费播放 | 亚洲视频一区二区在线观看 | 中文在线а√天堂官网 | 黄色在线观看国产 | www四虎com | 91视频最新入口 | 51精品国产 | 在线一二三区 | 日本视频在线观看免费 | 久久久久久久久福利 | 99re热这里只有精品视频 | 兔费看少妇性l交大片免费 日韩高清不卡 | 黄色免费在线网站 | 国产午夜精品福利视频 | 天天插天天操天天干 | 亚洲丝袜在线视频 | 午夜精品福利在线观看 | 色爱综合网 | 伊人网av在线 | 午夜激情在线播放 | av播播 | 亚洲精品久久久久久久久久久久久 | 国产欧美一区二区精品性色超碰 | 天堂网中文在线观看 | 日本一区不卡在线 | 久青草视频 | 草久在线观看视频 | 亚洲中文字幕视频一区 | 亚洲欧美日本一区二区 | 无码人妻aⅴ一区二区三区日本 | 人人人人爽 | 亚洲一区二区三区四区五区午夜 | 原创真实夫妻啪啪av | 在线中文字幕亚洲 | 亚洲成人动漫在线观看 | 8050午夜二级 | 三级男人添奶爽爽爽视频 | 亚洲成人精品在线 | 欧美91精品久久久久国产性生爱 | 美女张开腿让男人桶爽 | 日日舔夜夜摸 | 免费在线观看av片 | 国产4区| 国产精品专区在线观看 | 男女三级视频 | 快播怡红院 | 免费看黄色片子 | 最新中文字幕在线 | 97超碰人人 | av电影在线不卡 | 人人爽久久涩噜噜噜网站 | 午夜视频久久 | 一本一道久久 | 露脸丨91丨九色露脸 | 性xxxxx大片免费视频 | 日日射射 | 久久久99久久| 亚洲精品污| 免费网站在线高清观看 | 东京久久久 | 久久综合91 | 波多野结衣在线视频播放 | 久久噜噜噜精品国产亚洲综合 | 亚洲成av人片一区二区梦乃 | 好色av| 人妻丰满熟妇av无码区免 | 午夜视频a| 肉肉av福利一精品导航 | 亚洲另类色综合网站 | 日韩av午夜| 天天干网 | 免费一级毛片麻豆精品 | 日本xxxx色 | 性一交一乱一伧老太 | 91在线视频播放 | 日本高清无吗 | 男女做的视频 | 99热国内精品 | 国产美女无遮挡网站 | 校霸被c到爽夹震蛋上课高潮 | 极品美女无套呻吟啪啪 | 黄色片视频网站 | 日本免费黄色网址 | 国产又大又粗又爽的毛片 | 精品人妻一区二区三区换脸明星 | 亚洲春色av| 美女久久久| 韩国一区二区三区视频 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久999精品视频 国产在线xx | 澳门色网 | 一本一本久久a久久精品综合麻豆 | 爱搞国产 | 青青国产在线视频 | 少妇一级淫片免费播放 |