各位朋友,大家晚上好, 我是秦元培。欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。今天我们来做一个高端大气上档次的东西。

我相信大家都玩过一款叫做《愤慨的小鸟》的游戏,这款游戏之所以可以受到玩家的喜爱,是由于这是一款物理游戏,在游戏中处处充满了物理。我们熟悉的抛物线、引力等物理元素都在这款游戏中得到了体现。

那么《愤慨的小鸟》这款游戏使用的正是Unity引擎,所以我们在游戏中看到了各种各种有趣的物理现象。

那么,我们今天呢,就以《愤慨的小鸟》游戏中的小鸟发射器——弹弓为例,来讲述在Unity中怎样实现弹性效果。

首先,我们来引入一个新的概念——LineRenderer。

在Unity3D中LineRenderer被称为线性渲染器。通过这个组件,我们能够做一些比較有创意的东西。比方在游戏中绘制线段、制作激光特效、武器拖尾效果等。

那么今天呢,我们是用LineRenderer来构造弹弓两边的绳子,这个绳子是具有弹性的,在受力结束后能够恢复到原来的状态。我们首先创建一个例如以下图的简单场景:

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

当用户按下鼠标左键并移动鼠标的时候,小球和绳子都将跟着移动,当松开鼠标左键的时候,小球以一定的角度和一定的力发射出去。我们今天着重来讲绳子的实现。首先我们创建一个空的GameObject将坐标值设为原点,命名为RopeL。

接下来我们通过Component->Effects->Line Renderer为加入一个线性渲染器组件。如图:

我们设定好上述參数后,就能够開始编写脚本了,这里两根绳子是对称的:

using UnityEngine;
using System.Collections; public class Ball : MonoBehaviour { //鼠标位置
private Vector3 MousePos; //左側LineRenderer
private LineRenderer LineL;
//右側LineRenderer
private LineRenderer LineR; void Start ()
{
//获取LineRenderer
LineL=GameObject.Find("Shootor").transform.FindChild("RopeL").
transform.GetComponent<LineRenderer>();
LineR=GameObject.Find("Shootor").transform.FindChild("RopeR").
transform.GetComponent<LineRenderer>();
} void Update ()
{
if(Input.GetMouseButton(0))
{
//获取鼠标位置
MousePos=Camera.main.ScreenToViewportPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,-2F));
//设置小球的位置
transform.position=MousePos;
//又一次设置LineRenderer的位置
LineL.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
LineR.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
}
if(Input.GetMouseButtonUp(0))
{
//获取鼠标位置
MousePos=Camera.main.ScreenToViewportPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,-2F));
//设置小球的位置
transform.position=MousePos;
//又一次设置LineRenderer的位置
LineL.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F));
LineR.SetPosition(0,new Vector3(MousePos.x,MousePos.y,MousePos.z-0.5F)); //计算小球合力方向
Vector3 Vec3L=new Vector3(-2F-MousePos.x,1.8F-MousePos.y,0F-MousePos.z);
Vector3 Vec3R=new Vector3(2F-MousePos.x,1.8F-MousePos.y,0F-MousePos.z);
Vector3 Dir=(Vec3L+Vec3R).normalized;
//获取刚体结构
transform.GetComponent<Rigidbody>().useGravity=true;
transform.GetComponent<Rigidbody>().AddForce(Dir*10F,ForceMode.Impulse);
//恢复LineRenderer
LineL.SetPosition(0,new Vector3(0F,1.8F,0F));
LineR.SetPosition(0,new Vector3(0F,1.8F,0F));
}
}
}

我们给小球加上刚体后。绑定这段脚本就能够了。我们须要注意的问题有:

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

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

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

今天被宿舍里玩游戏的这些人搞得心情非常不好,也许注定我们不是同一个世界的人吧,大学三年。渐渐地对专业、班级没有了归属感,我宁愿在我的小圈子里努力做好自己的事情。二十几岁的人,每天就指望着游戏来满足你的成就感,这种生活我实在不喜欢。

人还是应该努力一点的。不为什么,就为了我们父母、亲人、爱人。大学里知道自己喜欢什么。能够做什么比上课学到了什么更重要。

你不努力,永远有别人比你更努力。生活总得有点向往吧。

唉,算了,发什么牢骚啊,做好自己即可了。该睡觉了,大家晚安吧!

每日箴言:成长,便是接受一个不完美的自己和一个不理想的自己,也接受这个世界的不完美和不理想。

——张小娴

喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。

    转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/24941939

[Unity3D]Unity3D游戏开发之《愤慨的小鸟》弹弓实现的更多相关文章

  1. 关于《Unity3D/2D游戏开发从0到1》书籍再版说明

    关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于U ...

  2. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  3. 《Unity3D/2D游戏开发从0到1》正式出版发行

    <Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息:      书籍的名称: <Uni ...

  4. Unity3D 入门 游戏开发 Unity3D portal game development

    Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...

  5. Unity3D手机游戏开发

    <Unity3D手机游戏开发> 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 ...

  6. Unity3D独立游戏开发日记(二):摆放建筑物

    在沙盒游戏里,能自由建造是很重要的特点,比如说风靡全球的<我的世界>,用一个个方块就能搭建出规模宏大的世界.甚至有偏激的人说,没有自由建造,就不是一个真正的沙盒游戏.的确,沙盒游戏的魅力有 ...

  7. Unity3D独立游戏开发日记(一):动态生成树木

    目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干 ...

  8. Unity3D小游戏开发之两个我踩过的坑

    最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑. 1.我在做简易僵尸模型的时候,这个僵尸模型 ...

  9. Photon + Unity3D 在线游戏开发 学习笔记(两)

    本文和大家 和大家说说 Photon 解压后的目录结构 这里面最基本的我们 以后开发要用到的目录 就是  deploy目录,这个目录里 放的是要挂载的 server 当然我们的 server端也要放在 ...

  10. Unity3D流行的游戏开发人员构建高速检查站系统

    好友,大家好,欢迎关注我的博客.我是秦培,我的博客地址blog.csdn.net/qinyuanpei. 今天,我想分享的是,现在在移动平台上的检查点系统更受欢迎,机游戏如<愤慨的小鸟>. ...

随机推荐

  1. 【JavaScript】history.back() 网页已过期

    使用history.back()进行返回时,有时会提示“网页已过期”, 多数是因为目标页面的form为post提交方式,而且是表单已经提交后的响应页面,无法找到form中的具体参数,而“报错”. 具体 ...

  2. HTML5新标签

    <article>标签定义外部的内容.比如来自一个外部的新闻提供者的一篇新的文章,或者来自 blog 的文本,或者是来自论坛的文本.亦或是来自其他外部源内容. HTML5:<arti ...

  3. Python之路Day7

    第7天主要是面向对象的内容. 学到现在越来越吃力了,从上节课开始博客就没时间写了,看看别人写的博客都那么棒.又想起了那句话比你牛逼的人都在努力,你却在放羊...唉,我写作业的效率有点低,以后得抓紧时间 ...

  4. 我的Python成长之路---GitHub使用之注册GitHub并安装Git客户端

    一.注册GitHub账号 进入GitHub官方网站,输入用户名.邮箱地址及密码,点击“Sign up for GitHub”. 选择免费的,不要问我为什么,除非有钱任性选择付费版 验证邮箱地址并激活G ...

  5. 计算ptd

    因为公司的IC扫描sensor的频率常常和adapter中的noise频率重叠,导致IC接收到的数据出错.所以我们经常会用示波器看adapter的Noise,再用傅里叶变换找到相应应该回避的频段,包括 ...

  6. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  7. 全栈project师的悲与欢

    从小米辞职出来创业的两个多月里,通过猎头或自己投简历,先后面试了知乎,今日头条,豌豆荚,美团,百度,App Annie,去哪儿,滴滴打车等技术团队,一二面(技术面)差点儿都轻松的过了,三面却没有毕业那 ...

  8. JFinal教程1——小白的第一个JFinal程序

    为了使小白能够完全的按步骤创建第一个JFinal应用并运行,笔者将以Java界最流行的Eclipse平台为例,搭建出所有基础教程中喜欢的Hello world应用. 1. JFinal简介 2. 小白 ...

  9. 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)

    面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...

  10. 二、Nginx变量

    $arg_PARAMETER 功能:如果在请求中设置了查询字符串,那么这个变量包含在查询字符串是GET请求PARAMETER中的值. $args 功能:该变量的值是GET请求在请求行中的参数. $bi ...