要实现的目标

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

1、实现个性化鼠标

效果

2、添加弹弓

建立两个材质

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

3、建一个空GameObject 弹弓slingShot

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

  

  3.2创建一个Sphere碰撞体

  调整好radius=0.2大小

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

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class slingShot : MonoBehaviour
  5. {
  6.  
  7. /// <summary>
  8. /// 小鸟
  9. /// </summary>
  10. public GameObject bird;
  11. /// <summary>
  12. /// 弹弓拉伸的声音
  13. /// </summary>
  14. public AudioClip slingShotSound;
  15. /// <summary>
  16. /// 飞行声音
  17. /// </summary>
  18. public AudioClip flyingSound;
  19. /// <summary>
  20. /// 弹弓橡皮筋颜色
  21. /// </summary>
  22. public Color myColor;
  23. /// <summary>
  24. /// 是否按下鼠标
  25. /// </summary>
  26. private bool isClick = false;
  27. /// <summary>
  28. /// 发射出去的小鸟
  29. /// </summary>
  30. private GameObject shot;
  31.  
  32. /// <summary>
  33. /// 拉伸弹弓小鸟的位置
  34. /// </summary>
  35. private Vector3 lastKnowPosition;
  36.  
  37. private Vector3 direction;
  38. /// <summary>
  39. /// [ˈmægnɪtju:d] n. 巨大,广大;重大,重要;量级;(地震)级数
  40. /// </summary>
  41. private float magnitude;
  42.  
  43. /// <summary>
  44. /// 小鸟运动的轨迹线
  45. /// </summary>
  46. public static bool isDrawing = false;
  47. /// <summary>
  48. /// 小鸟发出去后下一个小鸟是否上弹弓
  49. /// </summary>
  50. public static bool isJump = false;
  51. /// <summary>
  52. /// 飞出去的小鸟
  53. /// </summary>
  54. public static GameObject myBird;
  55. /// <summary>
  56. /// 发射的是那只小鸟
  57. /// </summary>
  58. public static int birdNumber;
  59. /// <summary>
  60. /// 画弹弓的橡皮筋
  61. /// </summary>
  62. private LineRenderer lineRenderer;
  63.  
  64. private int index = ;
  65. private Vector3 position;
  66.  
  67. // Use this for initialization
  68. void Start()
  69. {
  70. birdNumber = -;
  71. lineRenderer = gameObject.AddComponent<LineRenderer>();//添加对象 画两条线
  72. lineRenderer.material.color = myColor;
  73. lineRenderer.SetWidth(0.1f, 0.1f);//设置宽度
  74. lineRenderer.SetVertexCount();//橡皮筋两个点+小鸟一个点 ['vɜ:teks] n. 最高点;顶点;<数>(三角形、圆锥体等与底相对的)顶;(三角形、多边形等的)角的顶点
  75. }
  76.  
  77. // Update is called once per frame
  78. void Update()
  79. {
  80. bool isMouseDown = Input.GetMouseButton();
  81. if (!isClick)//拖放小鸟 没有点击
  82. {
  83. if (isMouseDown)
  84. {
  85. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//把鼠标的点定义一个射线
  86. RaycastHit hit;//光线投射碰撞
  87. if (collider.Raycast(ray, out hit, 10.0f))//光线投射 选择小鸟 [distance光线的长度。]
  88. {
  89. isClick = true;
  90. if (birdNumber <= )
  91. {
  92. //Instantiate()克隆原始物体,位置设置在position,设置旋转在rotation,返回的是克隆后的物体
  93. //Quaternion.identity:返回恒等式旋转(只读)。这个四元数对于“无旋转”:这个物体完全对齐于世界或父轴。
  94. shot = Instantiate(bird, transform.position, Quaternion.identity) as GameObject;//动态的生成被发射的小鸟 [ɪns'tænʃɪeɪt] 实例化
  95. //Physics.IgnoreCollision 忽略碰撞:使碰撞体1和碰撞体2的碰撞侦测无效。
  96. Physics.IgnoreCollision(shot.collider, GetComponent<Collider>()); //忽略小鸟碰撞体
  97. shot.rigidbody.isKinematic = true;//运动属性
  98. myBird = GameObject.FindWithTag("bird0");//拉伸位置的Bird
  99. myBird.active = false;//隐藏
  100. }
  101. }
  102. }
  103. }
  104. else if (isMouseDown)
  105. {
  106. var lastDirection = direction;
  107. lastKnowPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.8f));
  108. direction = transform.position - lastKnowPosition;
  109. direction.Normalize();//规范化当规范化时,一个向量保持相同的方向,但它的长度为1.0。
  110. magnitude = Mathf.Min(Vector3.Distance(transform.position, lastKnowPosition), 2.5f);//最小值:橡皮筋拉伸距离;返回两个或更多值中最小的值。
  111. shot.transform.position = transform.position + direction * (-magnitude);
  112. lineRenderer.enabled = true;//LineRenderer :线渲染器 如果启用,使被渲染的物体可见
  113. //三点:小鸟+弹弓两点
  114. lineRenderer.SetPosition(, new Vector3(-5.1f, 2.2f, 0.1f));//弹弓橡皮筋点
  115. lineRenderer.SetPosition(, shot.transform.position);//小鸟点
  116. lineRenderer.SetPosition(, new Vector3(-5.6f, 1.2f, -0.1f));//弹弓橡皮筋点
  117. if (direction != lastDirection)
  118. {
  119. if (!audio.isPlaying)
  120. {
  121. PlaySound(slingShotSound);
  122. }
  123.  
  124. }
  125. }
  126. else//发射
  127. {
  128. birdNumber++;
  129. if (birdNumber<=)
  130. {
  131. GameObject birdObject2 = GameObject.FindWithTag("birdClone");//实例化的小鸟也就是飞出去的小鸟
  132. if (birdObject2!=null)
  133. {
  134. Destroy(birdObject2, 1.0f);////加载物体1秒后销毁游戏物体
  135. }
  136. lineRenderer.enabled = false;//不显示橡皮筋了
  137. shot.collider.isTrigger = false;
  138. shot.rigidbody.isKinematic = false;// 是否动力学:[ˌkɪnɪ'mætɪk] adj. 运动学的,运动学上的
  139. shot.rigidbody.velocity = direction * 7.0f * magnitude;//速度
  140. shot.rigidbody.useGravity = true;
  141. if (audio.isPlaying)
  142. {
  143. audio.Stop();
  144. }
  145. PlaySound(flyingSound);
  146. shot.tag = "birdClone";
  147. isClick = false;
  148. }
  149. }
  150. }
  151.  
  152. /// <summary>
  153. /// 小鸟拉伸发生声音
  154. /// </summary>
  155. /// <param name="soundName"></param>
  156. /// <returns></returns>
  157. public void PlaySound(AudioClip soundName)
  158. {
  159. if (!audio.isPlaying)
  160. {
  161. audio.clip = soundName;
  162. audio.Play();
  163. new WaitForSeconds(audio.clip.length);
  164. }
  165. }
  166. }

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. (Dos)/BAT命令入门与高级技巧详解(转)

    目录 第一章 批处理基础 第一节 常用批处理内部命令简介 1.REM 和 :: 2.ECHO 和 @ 3.PAUSE 4.ERRORLEVEL 5.TITLE 6.COLOR 7.mode 配置系统设 ...

  2. Lua常用时间函数

    常用时间函数 print(os.time()) --当前系统时间值 print(os.date( print(os.date("*t"), os.time()) --当前系统时间表 ...

  3. 关于 wsdl2Java 自动生成客户端调取webservice接口

    webservice地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl wsdl2Java 自动生成类名: 客户端调 ...

  4. 1、一、Introduction(入门): 0、Introduction to Android(引进到Android)

    一.Introduction(入门) 0.Introduction to Android(引进到Android) Android provides a rich application framewo ...

  5. 如何重新排列数组使得数组左边为奇数,右边为偶数,并使得空间复杂度为O(1),时间复杂度为O(n)

    思路分析: 类似快速排序的处理.可以用两个指针分别指向数组的头和尾,头指针正向遍历数组,找到第一个偶数,尾指针逆向遍历数组,找到第一个奇数,使用引用参数传值交换两个指针指向的数字,然后两指针沿着相应的 ...

  6. Javascript获取IFrame内容(兼容IE&FF)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/123303 作者: W ...

  7. springJdbc in 查询,Spring namedParameterJdbcTemplate in查询

    springJdbc in 查询,Spring namedParameterJdbcTemplate in查询, SpringJdbc命名参数in查询,namedParameterJdbcTempla ...

  8. python commands模块在python3.x被subprocess取代

    subprocess 可以执行shell命令的相关模块和函数有: os.systemos.spawnos.popen --废弃popen2.* --废弃commands.* --废弃,3.x中被移除 ...

  9. 查看本地RF版本号

    在CMD下执行:pybot --version

  10. Ubuntu下安装MySQL及简单操作

    Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client ...