Unity3D游戏开发之《愤怒的小鸟》弹弓怎么实现

下面我们开始今天的Unity3D游戏开发技能培训
我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D、3D小规模游戏及网页游戏开发。

今天我们来做一个高端大气上档次的东西。我相信大家都玩过一款叫做《愤怒的小鸟》的游戏,这款游戏之所以能够受到玩家的喜爱,是因为这是一款物理游戏,在游戏中处处充满了物理。我们熟悉的抛物线、引力等物理元素都在这款游戏中得到了体现。那么《愤怒的小鸟》这款游戏使用的正是Unity引擎,所以我们在游戏中看到了各种各种有趣的物理现象。那么,我们今天呢,就以《愤怒的小鸟》游戏中的小鸟发射器——弹弓为例,来讲述在Unity中如何实现弹性效果。

首先,我们来引入一个新的概念——LineRenderer。在Unity3D中LineRenderer被称为线性渲染器。通过这个组件,我们可以做一些比较有创意的东西,比如在游戏中绘制线段、制作激光特效、武器拖尾效果等。那么今天呢,我们是用LineRenderer来构造弹弓两边的绳子,这个绳子是具有弹性的,在受力结束后可以恢复到原来的状态。我们首先创建一个如下图的简单场景:

在上面的场景中,两边的柱子作为固定绳子的物体,小球在两根绳子中间。我们希望实现的是:

当用户按下鼠标左键并移动鼠标的时候,小球和绳子都将跟着移动,当松开鼠标左键的时候,小球以一定的角度和一定的力发射出去。我们今天着重来讲绳子的实现。首先我们创建一个空的GameObject将坐标值设为原点,命名为RopeL。接下来我们通过Component->Effects->Line Renderer为添加一个线性渲染器组件。如图:

我们设定好上述参数后,就可以开始编写脚本了,这里两根绳子是对称的:

[csharp] view plaincopyprint?

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Ball : MonoBehaviour {
  4. //鼠标位置
  5. private Vector3 MousePos;
  6. //左侧LineRenderer
  7. private LineRenderer LineL;
  8. //右侧LineRenderer
  9. private LineRenderer LineR;
  10. void Start ()
  11. {
  12. //获取LineRenderer
  13. LineL=GameObject.Find("Shootor").transform.FindChild("RopeL").
  14. transform.GetComponent<LineRenderer>();
  15. LineR=GameObject.Find("Shootor").transform.FindChild("RopeR").
  16. transform.GetComponent<LineRenderer>();
  17. }
  18. void Update ()
  19. {
  20. if(Input.GetMouseButton(0))
  21. {
  22. //获取鼠标位置
  23. MousePos=Camera.main.ScreenToViewportPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,-2F));
  24. //设置小球的位置
  25. transform.position=MousePos;
  26. //重新设置LineRenderer的位置
  27. LineL.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
  28. LineR.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
  29. }
  30. if(Input.GetMouseButtonUp(0))
  31. {
  32. //获取鼠标位置
  33. MousePos=Camera.main.ScreenToViewportPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,-2F));
  34. //设置小球的位置
  35. transform.position=MousePos;
  36. //重新设置LineRenderer的位置
  37. LineL.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
  38. LineR.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
  39. //计算小球合力方向
  40. Vector3 Vec3L=new Vector3(-2F-MousePos.x,1.8F-MousePos.y,0F-MousePos.z);
  41. Vector3 Vec3R=new Vector3(2F-MousePos.x,1.8F-MousePos.y,0F-MousePos.z);
  42. Vector3 Dir=(Vec3L+Vec3R).normalized;
  43. //获取刚体结构
  44. transform.GetComponent<Rigidbody>().useGravity=true;
  45. transform.GetComponent<Rigidbody>().AddForce(Dir*10F,ForceMode.Impulse);
  46. //恢复LineRenderer
  47. LineL.SetPosition(0,new Vector3(0F,1.8F,0F));
  48. LineR.SetPosition(0,new Vector3(0F,1.8F,0F));
  49. }
  50. }
  51. }

我们给小球加上刚体后,绑定这段脚本就可以了。我们需要注意的问题有:

1、这里的力是给定的大小,我们可以根据绳子被拉长的距离使用一个弹性系数来计算力的大小。

更多精彩请到http://www.gopedu.com/

2、计算合力的方向时,我们首先计算两边绳子的向量值,然后将这两个向量想加即可得到我们的合力方向。

好了,我们一起来看今天的效果演示吧!

时间: 2024-10-14 21:43:38

Unity3D游戏开发之《愤怒的小鸟》弹弓怎么实现的相关文章

Unity3D游戏开发之《愤怒的小鸟》弹弓实现技能培训

今天我们来做一个高端大气上档次的东西.我相信大家都玩过一款叫做<愤怒的小鸟>的游戏,这款游戏之所以能够受到玩家的喜爱,是因为这是一款物理游戏,在游戏中处处充满了物理.我们熟悉的抛物线.引力等物理元素都在这款游戏中得到了体现.那么<愤怒的小鸟>这款游戏使用的正是Unity引擎,所以我们在游戏中看到了各种各种有趣的物理现象.那么,我们今天呢,就以<愤怒的小鸟>游戏中的小鸟发射器——弹弓为例,来讲述在Unity中如何实现弹性效果. 下面我们开始今天的Unity3D游戏开发技能

Unity3D游戏开发之《愤怒的小鸟》弹弓实现的技能培训

下面我们开始今天的Unity3D游戏开发技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天我们来做一个高端大气上档次的东西.我相信大家都玩过一款叫做<愤怒的小鸟>的游戏,这款游戏之所以能够受到玩家的喜爱,是因为这是一款物理游戏,在游戏中处处充满了物理.我们熟悉的抛物线.引力等物理元素都在这款游戏中得到了体现.那么<愤怒的小鸟>这款游戏使用的正是Unity引擎,所以我们在游戏中

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

[Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3D游戏开发之从<魂斗罗>游戏说起(上)--目标追踪这篇文章后再写一篇<Unity3D游戏开发之从<魂斗罗>游戏说起(下)>,只是眼下博主的项目进度有些缓慢,所以想等项目稳定下来以后再和大家分享. 作为大家等待博主更新博客的回报,我们今天来说一说Unity3D中的游戏场景异步

Unity3D游戏开发从零单排(六) - 人物运动及攻击连击

提要 今天要实现的是一个简单人物控制器.包括用w,a,s,d来控制人物上下左右跑动,鼠标左击发出连招,都是基于老的lagacy的动画.虽然unity3d自带有charactorcontroller,但是并不是很好用,所以人物控制相关的全部自己来实现.先上效果图: 场景搭建 首先下载这个package,里面包含了人物的动作还有地面的模型.将人物和地面都拖进场景中.这里的模型默认的动画模式是lagacy,不用修改.模型有点偏小,改变模型的scale值为10.最好不要改源文件的scale的scale

unity3D游戏开发实战原创视频讲座系列10之《保卫战:异形入侵》游戏开发第一季

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

Unity3D游戏开发从零单排(五) - 导入CS模型到Unity3D

游戏动画基础 Animation组件 Animation组件是对于老的动画系统来说的. 老的动画形同对应的动画就是clip,每个运动都是一段单独的动画,使用Play()或CrossFade(),直接播放动画 或淡入淡出播放动画. animation.Play("name"); animation.CrossFade("name"); 下面的是它的几个属性 Animation:默认的动画片段: Aniamtions:包含的动画片段: Play Automaticall

【Unity3D游戏开发】—— 导入网上下载的.unitypackage包

这两天遇到了这样一个问题,网上下载的别人导出的.unitypackage包.如果双击打开,则会出现"Failed importing package "的错误. 为此很头疼,查了一些资料,需要将.unitypackage包复制到Editor\Standard Packages文件夹下, 然后ctrl+9打开 Asset Store, 点击下载然后找到刚刚复制的包名,点击Import导入即可. 还有一种方法类似,将.unitypackage包复制到Editor\Standard Pack

Unity3D游戏开发之详解 Animation类和Animator类

Unity3D游戏开发之详解 Animation类和Animator类 Animation类 animation组件用于播放动画.可以指定动画剪辑到动画组件并从脚本控制动画播放.在Unity的动画系统基于权重并且支持动画融合,叠加动画,动画混合,标签和完全控制动画播放的各个方面. 如果想播放一个简单的动画,可以使用Animation.Play:如果想在动画之间交叉淡入,可以使用Animation.CrossFade:如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的Wra