歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Unity3D游戲物體跟著鼠標方向移動

Unity3D游戲物體跟著鼠標方向移動

日期:2017/3/1 10:23:53   编辑:Linux編程

效果:當點擊鼠標左鍵時,游戲對象會朝鼠標點擊的方向移動,類似魔獸爭霸一樣。

思路:把鼠標的坐標轉化成世界坐標(鼠標默認是屏幕坐標),然後當點擊鼠標時,物體將朝著鼠標的世界坐標方向移動。

如果你看到這的話,最好先別往下看,自己按著這個思路試做一下,實在不行再看看我的哈~~~~

  1. var world:Vector3;
  2. var speed:float=0;//物體的移動速度
  3. function Update (){
  4. var screenpos=Camera.main.WorldToScreenPoint(transform.position);//物體的世界坐標轉化成屏幕坐標
  5. var e:Vector3=Input.mousePosition;//鼠標的位置
  6. //當點擊鼠標左鍵時
  7. if(Input.GetMouseButton(0)){
  8. e.z=screenpos.z;//1.因為鼠標的屏幕 Z 坐標的默認值是0,所以需要一個z坐標
  9. world=Camera.main.ScreenToWorldPoint(e);
  10. speed=1;
  11. }
  12. if(transform.position==world){
  13. speed=0;
  14. }else{
  15. animation.Play("walk");//這是我自身帶的一個默認動畫,你可以把它刪了
  16. }
  17. transform.LookAt(world); //物體朝向鼠標
  18. transform.Translate(Vector3.forward*speed*Time.deltaTime);
  19. }

當然,上面那個適合垂直平面,即攝像頭垂直x-z平面,但一般游戲都不會垂直的。如果不垂直的話,用上面方法可能就會出現類似游戲對象穿透地面的現象,所以我們得改一下代碼。

就只用把world=Camera.main.ScreenToWorldPoint(e); 改成以下這句就行了

  1. world.x=Camera.main.ScreenToWorldPoint(e).x;
  2. world.z=Camera.main.ScreenToWorldPoint(e).z;
  3. world.y=transform.position.y;

注:穿透地面現象是Y軸,所以讓y軸不變,且大小等於游戲對象的y值。

Copyright © Linux教程網 All Rights Reserved