歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Unity3D物體的旋轉和縮放

Unity3D物體的旋轉和縮放

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

去看電影了,《泰坦尼克號》,看完我心裡有種說不出來的味道~~~~。

呵呵~~~幾天沒寫博客了,這幾天學了兩天3Dmax,因為網上下載的都是bip和模型,就是沒動畫,所以我就想把這兩個合到一起,學了兩天就懂了一點點,哎~~~~ 然後又給一個廣州飛樂無限公司做了一個簡單的展示3D模型的demo,就是旋轉和縮放啦,效果做的不是很滿意啦,我今天又改了一下,然後和大家分享一下,好了,進入主題吧。

一.旋轉:

旋轉有很多種函數,我都試了一下,最後我選擇了RotateAround函數;

Input.GetAxis("Mouse X")又正左負,Input.GetAxis("Mouse Y")上正下負,這兩個函數你可以感受一下,他的大小會隨著你的手勢(或者鼠標)方向和速度改變的。

用這兩個函數就能做出手勢控制物體的旋轉了,重點:你自己要體驗一下Input.GetAxis("Mouse X/Y")的用法,然後就是注意一下旋轉方向;

二.縮放:

縮放手勢是用兩個手指來模擬的,當兩手之間的距離越來越大,那就是放大,反之縮小;

放大的方法有兩種:

1.物體用localScale來放大物體。不知道為什麼我用這種放大得不到我想要的效果;

2.拉近攝像機,這裡面可就有一點學問了,我記得我在看OpenGL的時候,上面用鐵軌來比喻一個視覺效果,實際當中鐵軌是平行的不相交,但是我們視覺上的效果就是鐵軌間的距離越來越近,最後相交了。unity3D默認的是相交的效果(camera-->Projection-->perspective),當然也有不想交的效果了(camera-->

Projection-->orthographic),你們試試效果很不一樣的。如果你想加入天空盒而且不想隨著物體縮放,看到天空背景也移動的話,那就選第二種。我加了天空盒,所以用第二種了,呵呵~~~

  1. var rotatepos:Transform;//rotatepos是該物體的一個子物體,放到物體的中心地方就行。
  2. var horizontalSpeed : float ;
  3. var verticalSpeed : float ;
  4. var flag:boolean;
  5. var olddis:float=0;
  6. var newdis:float=0;
  7. var child:Transform;
  8. function Start(){
  9. horizontalSpeed=0;
  10. verticalSpeed=0;
  11. flag=true;
  12. }
  13. function Update () {
  14. if(flag){
  15. transform.RotateAround(rotatepos.position,Vector3.up,1);
  16. }
  17. //物體的旋轉
  18. if(Input.touchCount==1){
  19. if(Input.GetTouch(0).phase==TouchPhase.Moved){
  20. flag=false;
  21. var h : float=Input.GetAxis("Mouse X");//又正左負
  22. var v : float =Input.GetAxis("Mouse Y");//上正下負
  23. if(Mathf.Abs(h)>=Mathf.Abs(v)){
  24. if(h<0){
  25. horizontalSpeed=6;
  26. transform.RotateAround(rotatepos.position,Vector3.up,horizontalSpeed);
  27. }
  28. if(h>0){
  29. horizontalSpeed=6;
  30. transform.RotateAround(rotatepos.position,-Vector3.up,horizontalSpeed);
  31. }
  32. }
  33. else{
  34. if(v<0){
  35. verticalSpeed=6;
  36. transform.RotateAround(rotatepos.position,-Vector3.right,verticalSpeed);
  37. }
  38. if(v>0){
  39. verticalSpeed=6;
  40. transform.RotateAround(rotatepos.position,Vector3.right,verticalSpeed);
  41. }
  42. }
  43. }
  44. }
  45. //物體的縮放
  46. if(Input.touchCount>1){
  47. flag=false;
  48. if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
  49. var pos1=Input.GetTouch(0).position;
  50. var pos2=Input.GetTouch(1).position;
  51. newdis=Vector2.Distance(pos1,pos2);
  52. if(olddis!=null){
  53. if(newdis<olddis) {
  54. Camera.main.camera.orthographicSize+=2;
  55. }
  56. if(newdis>olddis) {
  57. Camera.main.camera.orthographicSize-=2;
  58. }
  59. }
  60. olddis=newdis;
  61. }
  62. }
  63. //按返回鍵退出程序
  64. if(Input.GetKey(KeyCode.Escape)){
  65. Application.Quit();
  66. }
  67. }
Copyright © Linux教程網 All Rights Reserved