要实现的目标

  实现个性化的鼠标
  实现弹弓
  选择小鸟、拉升弹弓、发射小鸟
  弹弓橡皮筋
  声音

1、实现个性化鼠标

效果

2、添加弹弓

建立两个材质

创建一个空GameObject 把两个shoot拖进来统一管理

3、建一个空GameObject 弹弓slingShot

  3.1把投掷中心移动到弹弓发射中心,就是小鸟发射架

  

  3.2创建一个Sphere碰撞体

  调整好radius=0.2大小

4、拉伸弹弓、发射小鸟代码

using UnityEngine;
using System.Collections; public class slingShot : MonoBehaviour
{ /// <summary>
/// 小鸟
/// </summary>
public GameObject bird;
/// <summary>
/// 弹弓拉伸的声音
/// </summary>
public AudioClip slingShotSound;
/// <summary>
/// 飞行声音
/// </summary>
public AudioClip flyingSound;
/// <summary>
/// 弹弓橡皮筋颜色
/// </summary>
public Color myColor;
/// <summary>
/// 是否按下鼠标
/// </summary>
private bool isClick = false;
/// <summary>
/// 发射出去的小鸟
/// </summary>
private GameObject shot; /// <summary>
/// 拉伸弹弓小鸟的位置
/// </summary>
private Vector3 lastKnowPosition; private Vector3 direction;
/// <summary>
/// [ˈmægnɪtju:d] n. 巨大,广大;重大,重要;量级;(地震)级数
/// </summary>
private float magnitude; /// <summary>
/// 小鸟运动的轨迹线
/// </summary>
public static bool isDrawing = false;
/// <summary>
/// 小鸟发出去后下一个小鸟是否上弹弓
/// </summary>
public static bool isJump = false;
/// <summary>
/// 飞出去的小鸟
/// </summary>
public static GameObject myBird;
/// <summary>
/// 发射的是那只小鸟
/// </summary>
public static int birdNumber;
/// <summary>
/// 画弹弓的橡皮筋
/// </summary>
private LineRenderer lineRenderer; private int index = ;
private Vector3 position; // Use this for initialization
void Start()
{
birdNumber = -;
lineRenderer = gameObject.AddComponent<LineRenderer>();//添加对象 画两条线
lineRenderer.material.color = myColor;
lineRenderer.SetWidth(0.1f, 0.1f);//设置宽度
lineRenderer.SetVertexCount();//橡皮筋两个点+小鸟一个点 ['vɜ:teks] n. 最高点;顶点;<数>(三角形、圆锥体等与底相对的)顶;(三角形、多边形等的)角的顶点
} // Update is called once per frame
void Update()
{
bool isMouseDown = Input.GetMouseButton();
if (!isClick)//拖放小鸟 没有点击
{
if (isMouseDown)
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//把鼠标的点定义一个射线
RaycastHit hit;//光线投射碰撞
if (collider.Raycast(ray, out hit, 10.0f))//光线投射 选择小鸟 [distance光线的长度。]
{
isClick = true;
if (birdNumber <= )
{
//Instantiate()克隆原始物体,位置设置在position,设置旋转在rotation,返回的是克隆后的物体
//Quaternion.identity:返回恒等式旋转(只读)。这个四元数对于“无旋转”:这个物体完全对齐于世界或父轴。
shot = Instantiate(bird, transform.position, Quaternion.identity) as GameObject;//动态的生成被发射的小鸟 [ɪns'tænʃɪeɪt] 实例化
//Physics.IgnoreCollision 忽略碰撞:使碰撞体1和碰撞体2的碰撞侦测无效。
Physics.IgnoreCollision(shot.collider, GetComponent<Collider>()); //忽略小鸟碰撞体
shot.rigidbody.isKinematic = true;//运动属性
myBird = GameObject.FindWithTag("bird0");//拉伸位置的Bird
myBird.active = false;//隐藏
}
}
}
}
else if (isMouseDown)
{
var lastDirection = direction;
lastKnowPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.8f));
direction = transform.position - lastKnowPosition;
direction.Normalize();//规范化当规范化时,一个向量保持相同的方向,但它的长度为1.0。
magnitude = Mathf.Min(Vector3.Distance(transform.position, lastKnowPosition), 2.5f);//最小值:橡皮筋拉伸距离;返回两个或更多值中最小的值。
shot.transform.position = transform.position + direction * (-magnitude);
lineRenderer.enabled = true;//LineRenderer :线渲染器 如果启用,使被渲染的物体可见
//三点:小鸟+弹弓两点
lineRenderer.SetPosition(, new Vector3(-5.1f, 2.2f, 0.1f));//弹弓橡皮筋点
lineRenderer.SetPosition(, shot.transform.position);//小鸟点
lineRenderer.SetPosition(, new Vector3(-5.6f, 1.2f, -0.1f));//弹弓橡皮筋点
if (direction != lastDirection)
{
if (!audio.isPlaying)
{
PlaySound(slingShotSound);
} }
}
else//发射
{
birdNumber++;
if (birdNumber<=)
{
GameObject birdObject2 = GameObject.FindWithTag("birdClone");//实例化的小鸟也就是飞出去的小鸟
if (birdObject2!=null)
{
Destroy(birdObject2, 1.0f);////加载物体1秒后销毁游戏物体
}
lineRenderer.enabled = false;//不显示橡皮筋了
shot.collider.isTrigger = false;
shot.rigidbody.isKinematic = false;// 是否动力学:[ˌkɪnɪ'mætɪk] adj. 运动学的,运动学上的
shot.rigidbody.velocity = direction * 7.0f * magnitude;//速度
shot.rigidbody.useGravity = true;
if (audio.isPlaying)
{
audio.Stop();
}
PlaySound(flyingSound);
shot.tag = "birdClone";
isClick = false;
}
}
} /// <summary>
/// 小鸟拉伸发生声音
/// </summary>
/// <param name="soundName"></param>
/// <returns></returns>
public void PlaySound(AudioClip soundName)
{
if (!audio.isPlaying)
{
audio.clip = soundName;
audio.Play();
new WaitForSeconds(audio.clip.length);
}
}
}

5、最终效果

Unity3D笔记 愤怒的小鸟<六> 弹弓发射小鸟的更多相关文章

  1. Unity3D笔记 愤怒的小鸟<五> 小鸟动画+Unity3D如何设置断点调式

    前言:实现小鸟的动画,之前吐槽过js写U3D,就改成了C#来写,没想到遇到问题了. 实现的效果 using UnityEngine; using System.Collections; /// < ...

  2. Unity3D笔记 愤怒的小鸟<七> 小鸟群准备动画

    要实现的目标: 1.3只小鸟初始动画 2.完善代码slingShot.js 3.完善代码BirdMoving.js 1.实现3个准备动画:Unity3D内置的动画管理器 1.1.先选择GameObje ...

  3. Unity3D笔记 愤怒的小鸟<二> 实现Play界面

    创建Play界面.能个把各个图片组合成一个场景,场景组成后背景能够不停的滚动,当鼠标单击时显示图片手型鼠标 一.GUI Texture 1.创建背景.地面.树木.草 ,这里注意Z轴的排序,一层一层则第 ...

  4. Unity3D笔记 愤怒的小鸟<一>场景切换

    新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...

  5. Unity3D笔记 愤怒的小鸟<四> 实现Selelction界面

    一直跟着龚老师用js写,VS智能感应用习惯后发现这里用js对初学者比较蛋疼,MONO有提示但是还是无法和VS媲美就目前来看.所以这次还是换成熟悉的VS来开发. 目标:实现关卡页面 跑起来的效果如下: ...

  6. Unity3D笔记 愤怒的小鸟<三> 实现Play界面2

    前言:在Play页面中给Play页面添加一个“开始游戏”和“退出游戏”按钮顺便再来一个背景音乐 添加按钮可以是GUI.Button(),也可以是GUILayout.Button():给图片添加按钮可以 ...

  7. Unity3D笔记十六 输入输出-键盘事件、鼠标事件

    输入与控制操作Unity为开发者提供了Input类库,其中包括键盘事件.鼠标事件和触摸事件等一切跨平台所需要的控制事件. 一.键盘事件 1.按下事件 Input.GetKeyDown():如果按键被按 ...

  8. Unity3D游戏-愤怒的小鸟游戏源码和教程(一)

    Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...

  9. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

随机推荐

  1. electron demo项目npm install安装失败解决办法

    electron官网提供的demo项目,在npm install 的时候总是报错显示安装失败, 解决办法:FQ即可成功安装.

  2. 安全检测:2013 Top 10 List

    转自:https://www.owasp.org/index.php/Top_10_2013-Top_10   Risk 2013 Table of Contents 2013 Top 10 List ...

  3. PDF文件转换成Excel表格的操作技巧

    我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...

  4. symfony 事务提交

    1. 添加数据 新建一个对象,给对象赋值 $em = $this->getDoctrine()->getManager(); //添加事物 $em->getConnection()- ...

  5. Ubuntu 16.04服务器 软件的安装及配置

    SSH的安装及配置 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则 ...

  6. 使用Ajax long polling实现简单的聊天程序

    关于web实时通信,通常使用长轮询或这长连接方式进行实现. 为了能够实际体会长轮询,通过Ajax长轮询实现了一个简单的聊天程序,在此作为笔记. 长轮询 传统的轮询方式是,客户端定时(一般使用setIn ...

  7. error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

    更新的软件可以解决 TortoiseGit-preview-2.5.7.0-20180127-b2d00f8-64bit.msi和Git-2.16.2-64-bit.exe. 链接地址为: https ...

  8. Python生成器笔记

    Python中三大器有迭代器,生成器,装饰器,本文主要讲述生成器.主要从生成器的概念,本质,以及yield关键字的使用执行过程. 本质:生成器是一类特殊的迭代器,使用了yield关键字的函数不再是函数 ...

  9. RN(八)——react-native-image-viewer & react-native-swiper

    以项目(业务GO)为例: react-native-swiper 轮播(用在首页的图集轮播) https://github.com/leecade/react-native-swiper react- ...

  10. codeforces水题100道 第十五题 Codeforces Round #262 (Div. 2) A. Vasya and Socks (brute force)

    题目链接:http://www.codeforces.com/problemset/problem/460/A题意:Vasya每天用掉一双袜子,她妈妈每m天给他送一双袜子,Vasya一开始有n双袜子, ...