Unity3D笔记 愤怒的小鸟<六> 弹弓发射小鸟
要实现的目标
实现个性化的鼠标
实现弹弓
选择小鸟、拉升弹弓、发射小鸟
弹弓橡皮筋
声音
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笔记 愤怒的小鸟<六> 弹弓发射小鸟的更多相关文章
- Unity3D笔记 愤怒的小鸟<五> 小鸟动画+Unity3D如何设置断点调式
前言:实现小鸟的动画,之前吐槽过js写U3D,就改成了C#来写,没想到遇到问题了. 实现的效果 using UnityEngine; using System.Collections; /// < ...
- Unity3D笔记 愤怒的小鸟<七> 小鸟群准备动画
要实现的目标: 1.3只小鸟初始动画 2.完善代码slingShot.js 3.完善代码BirdMoving.js 1.实现3个准备动画:Unity3D内置的动画管理器 1.1.先选择GameObje ...
- Unity3D笔记 愤怒的小鸟<二> 实现Play界面
创建Play界面.能个把各个图片组合成一个场景,场景组成后背景能够不停的滚动,当鼠标单击时显示图片手型鼠标 一.GUI Texture 1.创建背景.地面.树木.草 ,这里注意Z轴的排序,一层一层则第 ...
- Unity3D笔记 愤怒的小鸟<一>场景切换
新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...
- Unity3D笔记 愤怒的小鸟<四> 实现Selelction界面
一直跟着龚老师用js写,VS智能感应用习惯后发现这里用js对初学者比较蛋疼,MONO有提示但是还是无法和VS媲美就目前来看.所以这次还是换成熟悉的VS来开发. 目标:实现关卡页面 跑起来的效果如下: ...
- Unity3D笔记 愤怒的小鸟<三> 实现Play界面2
前言:在Play页面中给Play页面添加一个“开始游戏”和“退出游戏”按钮顺便再来一个背景音乐 添加按钮可以是GUI.Button(),也可以是GUILayout.Button():给图片添加按钮可以 ...
- Unity3D笔记十六 输入输出-键盘事件、鼠标事件
输入与控制操作Unity为开发者提供了Input类库,其中包括键盘事件.鼠标事件和触摸事件等一切跨平台所需要的控制事件. 一.键盘事件 1.按下事件 Input.GetKeyDown():如果按键被按 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...
- Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...
随机推荐
- (Dos)/BAT命令入门与高级技巧详解(转)
目录 第一章 批处理基础 第一节 常用批处理内部命令简介 1.REM 和 :: 2.ECHO 和 @ 3.PAUSE 4.ERRORLEVEL 5.TITLE 6.COLOR 7.mode 配置系统设 ...
- Lua常用时间函数
常用时间函数 print(os.time()) --当前系统时间值 print(os.date( print(os.date("*t"), os.time()) --当前系统时间表 ...
- 关于 wsdl2Java 自动生成客户端调取webservice接口
webservice地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl wsdl2Java 自动生成类名: 客户端调 ...
- 1、一、Introduction(入门): 0、Introduction to Android(引进到Android)
一.Introduction(入门) 0.Introduction to Android(引进到Android) Android provides a rich application framewo ...
- 如何重新排列数组使得数组左边为奇数,右边为偶数,并使得空间复杂度为O(1),时间复杂度为O(n)
思路分析: 类似快速排序的处理.可以用两个指针分别指向数组的头和尾,头指针正向遍历数组,找到第一个偶数,尾指针逆向遍历数组,找到第一个奇数,使用引用参数传值交换两个指针指向的数字,然后两指针沿着相应的 ...
- Javascript获取IFrame内容(兼容IE&FF)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/123303 作者: W ...
- springJdbc in 查询,Spring namedParameterJdbcTemplate in查询
springJdbc in 查询,Spring namedParameterJdbcTemplate in查询, SpringJdbc命名参数in查询,namedParameterJdbcTempla ...
- python commands模块在python3.x被subprocess取代
subprocess 可以执行shell命令的相关模块和函数有: os.systemos.spawnos.popen --废弃popen2.* --废弃commands.* --废弃,3.x中被移除 ...
- 查看本地RF版本号
在CMD下执行:pybot --version
- Ubuntu下安装MySQL及简单操作
Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client ...