Unity3D游戏引擎之控制模型移动旋转与碰撞

上一章介绍了模型的旋转与平移,本章介绍一些好玩的,通过按钮来控制模型的移动与镜头的跟随,脚本参数的传递。个人觉得Unity3D 这套游戏引擎真的很棒,它可以为开发者节省时间。用更多少的脚本,可以实现更多的功能。先赞一下,哇咔咔~废话不多说了,入正题! 首先在3D世界中创建一个箱子模型,然后添加一个脚本,命名为  js0绑定到这个箱子中。在添加一个脚本,命名为js1 ,同样绑定到这个箱子上,用来实现对象的创建与调用方法参数的传递 ~ var Control;   这里声明一个控制类的对象,用来进行参数的传递,调用方法。 Getomponent(js1): 得到脚本名称为js1的对象,这里把值赋给Control,就可以使用js1脚本中的方法了,下面的代码中通过这个对象调用模型的移动方法。 Input.GetKey(KeyCode): 这个方法返回一个Bool 判断当前按键是否被按下,当然这里只能运行在PC上才可以感应按钮,因为IOS的设备上没有按键,以后我会介绍在IOS上添加游戏摇杆的功能,本章我们先学习一下PC上的基本按钮响应。 下面代码 实现按下“W”控制物体向前 实现按下“S”控制物体向后 实现按下“A”控制物体向左平移 实现按下“D”控制物体向右平移 实现按下“Q”控制物体向左旋转 实现按下“E”控制物体向右旋转 js0.js 代码

[代码]js代码:

01 //旋转移动速度 
02 var Speed = 50; 
03    
04 //控制对象 
05 var Control; 
06    
07 function Update() 
08
09   //得到控制对象 
10   Control = GetComponent(js1);  
11      
12   //判断按键  
13        
14   if(Input.GetKey(KeyCode.W)) 
15   { 
16         //前进 
17         Control.ForWard(); 
18            
19   }else if(Input.GetKey(KeyCode.S))  
20   { 
21         //后退 
22         Control.Back(); 
23   } 
24      
25     if(Input.GetKey(KeyCode.A)) 
26   { 
27         //前左 
28         Control.GLeft(); 
29            
30   }else if(Input.GetKey(KeyCode.D))  
31   { 
32         //后右 
33         Control.GRight(); 
34   } 
35      
36      
37      
38   if(Input.GetKey(KeyCode.Q)) 
39   { 
40     //左旋转 
41        
42     Control.leftRotate(Vector3.up *Time.deltaTime * -Speed); 
43    
44   }else if(Input.GetKey(KeyCode.E)) 
45   { 
46     //右旋转 
47     Control.RightRotate(Vector3.up *Time.deltaTime * Speed); 
48    
49   } 
50       
51 }

js1.js 代码   参数的传递可以使用obj进行传递,代码中我将旋转的角度做为参数传递到了js1.js中控制模型旋转。 Vector3 标示一个3D的向量单位,它可以标示模型的三个方向,这里根据旋转的角度与移动的向量设置它。

[代码]js代码:

01 //前进速度 
02 var Speed = 50; 
03    
04 //前进 
05 function ForWard()  
06
07     transform.Translate(Vector3.forward * Time.deltaTime *Speed); 
08
09    
10 //后退 
11 function Back()  
12
13     transform.Translate(Vector3.forward * Time.deltaTime * -Speed);      
14
15    
16    
17 //向左 
18 function GLeft()  
19
20     transform.Translate(Vector3.right * Time.deltaTime *-Speed); 
21
22    
23 //向右 
24 function GRight()  
25
26     transform.Translate(Vector3.right * Time.deltaTime * Speed);         
27
28    
29    
30    
31    
32 //传递参数 
33    
34 //左旋转 
35 function leftRotate(obj) 
36
37     transform.Rotate(obj);   
38
39    
40 //右旋转 
41 function RightRotate(obj) 
42
43     transform.Rotate(obj);   
44 }

OK点击运行,通过按键我们可以正常的控制模型平移与旋转,但是现在有两个问题 1, 主摄像机不能跟随控制模型, 2  、模型可以横穿过山丘,感觉很假。下面我们解决这两个问题。     在Unity3D标准资源的脚本中系统帮我们写好了跟随脚本.如下图所示,点击Import Package - > Scripts 将系统脚本导入。       选中摄像机 点击Component - > Camera-Control - > Smoot Follow ,给主摄像机添加一个跟随脚本。     跟随脚本添加完以后,须要指定一个跟随的物体,下面红框内将跟随的物体Cube拖动进来,这里Cube就是我们上面控制的模型,那么这样,摄像机将会一直在身后跟随我们控制的模型。下面是一些跟随的参数,设置 跟随的距离 高度等等,盆友们手动的修改一下运行游戏就可以看出来变化,。     控制物体的碰撞可以使用 选中模型, Component - > Physics - > Rigidbody 设置这个模型的重力碰撞。那么这样你控制的模型就不会穿过山丘,而是感应重力碰撞。     点击运行游戏,看看效果,控制箱子行走的同时,我们可以清晰的看出旁边的树木被物理碰撞所干扰,前后,左右,旋转 完全OK .大家快试试吧。哇咔咔~~

网页标题:Unity3D游戏引擎之控制模型移动旋转与碰撞
网址分享:http://www.csdahua.cn/qtweb/news39/365439.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网