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

 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 代码


//旋转移动速度   var Speed = 50;      //控制对象   var Control;      function Update()   {     //得到控制对象     Control = GetComponent(js1);           //判断按键             if(Input.GetKey(KeyCode.W))     {           //前进           Control.ForWard();                }else if(Input.GetKey(KeyCode.S))      {           //后退           Control.Back();     }            if(Input.GetKey(KeyCode.A))     {           //前左           Control.GLeft();                }else if(Input.GetKey(KeyCode.D))      {           //后右           Control.GRight();     }                    if(Input.GetKey(KeyCode.Q))     {       //左旋转              Control.leftRotate(Vector3.up *Time.deltaTime * -Speed);        }else if(Input.GetKey(KeyCode.E))     {       //右旋转       Control.RightRotate(Vector3.up *Time.deltaTime * Speed);        }         }   

js1.js 代码


参数的传递可以使用obj进行传递,代码中我将旋转的角度做为参数传递到了js1.js中控制模型旋转。

Vector3 标示一个3D的向量单位,它可以标示模型的三个方向,这里根据旋转的角度与移动的向量设置它。


//前进速度   var Speed = 50;      //前进   function ForWard()    {       transform.Translate(Vector3.forward * Time.deltaTime *Speed);   }      //后退   function Back()    {       transform.Translate(Vector3.forward * Time.deltaTime * -Speed);        }         //向左   function GLeft()    {       transform.Translate(Vector3.right * Time.deltaTime *-Speed);   }      //向右   function GRight()    {       transform.Translate(Vector3.right * Time.deltaTime * Speed);           }               //传递参数      //左旋转   function leftRotate(obj)   {       transform.Rotate(obj);     }      //右旋转   function RightRotate(obj)   {       transform.Rotate(obj);     }   

OK点击运行,通过按键我们可以正常的控制模型平移与旋转,但是现在有两个问题 1, 主摄像机不能跟随控制模型, 2  、模型可以横穿过山丘,感觉很假。下面我们解决这两个问题。



在Unity3D标准资源的脚本中系统帮我们写好了跟随脚本.如下图所示,点击Import Package - > Scripts 将系统脚本导入。







选中摄像机 点击Component - > Camera-Control - > Smoot Follow ,给主摄像机添加一个跟随脚本。








跟随脚本添加完以后,须要指定一个跟随的物体,下面红框内将跟随的物体Cube拖动进来,这里Cube就是我们上面控制的模型,那么这样,摄像机将会一直在身后跟随我们控制的模型。下面是一些跟随的参数,设置 跟随的距离 高度等等,盆友们手动的修改一下运行游戏就可以看出来变化,。














控制物体的碰撞可以使用 选中模型, Component - > Physics - > Rigidbody 设置这个模型的重力碰撞。那么这样你控制的模型就不会穿过山丘,而是感应重力碰撞。








点击运行游戏,看看效果,控制箱子行走的同时,我们可以清晰的看出旁边的树木被物理碰撞所干扰,前后,左右,旋转 完全OK .大家快试试吧。哇咔咔~~








明天开始MOMO又要开始处理一部分iPhone 的界面图形化开发,Tomorrow is another day ,加油哇咔咔~ Unity3D 的世界中脚本还可以做很多事情,以后我在慢慢向各位道来~ 欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~

本文出自 “雨松MOMO的程序世界” 博客,请务必保留此出处http://xys289187120.blog.51cto.com/3361352/696792


     

相关知识

Unity3D 游戏引擎之控制模型移动旋转与碰撞(七)
Unity3D深度探索2D游戏开发
Unity3D一个全面整合的专业游戏引擎
Unity3D手机游戏开发
Unity3D射击游戏案例实战教学
游戏引擎的进化论
Unity3D视频教程 U3D游戏开发
游戏引擎小常识.docx
移动游戏社交引擎KTplay助力游戏运营
探索Android 2D游戏引擎库与2D手游引擎

网址: Unity3D 游戏引擎之控制模型移动旋转与碰撞(七) http://www.hyxgl.com/newsview361902.html

推荐资讯