要实现的目标

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

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 = 0;private Vector3 position;// Use this for initializationvoid Start(){birdNumber = -1;lineRenderer = gameObject.AddComponent<LineRenderer>();//添加对象 画两条线lineRenderer.material.color = myColor;lineRenderer.SetWidth(0.1f, 0.1f);//设置宽度lineRenderer.SetVertexCount(3);//橡皮筋两个点+小鸟一个点 ['vɜ:teks] n. 最高点;顶点;<数>(三角形、圆锥体等与底相对的)顶;(三角形、多边形等的)角的顶点
    }// Update is called once per framevoid Update(){bool isMouseDown = Input.GetMouseButton(0);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 <= 1){//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");//拉伸位置的BirdmyBird.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(0, new Vector3(-5.1f, 2.2f, 0.1f));//弹弓橡皮筋点lineRenderer.SetPosition(1, shot.transform.position);//小鸟点lineRenderer.SetPosition(2, new Vector3(-5.6f, 1.2f, -0.1f));//弹弓橡皮筋点if (direction != lastDirection){if (!audio.isPlaying){PlaySound(slingShotSound);}   }}else//发射
        {birdNumber++;if (birdNumber<=2){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、最终效果

转载于:https://www.cnblogs.com/PEPE/p/3553281.html

Unity3D笔记 愤怒的小鸟六 弹弓发射小鸟相关推荐

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

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

  2. Unity3D笔记 愤怒的小鸟一场景切换

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

  3. Unity3D笔记 愤怒的小鸟七 小鸟群准备动画

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

  4. Unity3D笔记 愤怒的小鸟四 实现Selelction界面

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

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. 深入理解 C 指针阅读笔记 -- 第六章

    Chapter6.h #ifndef __CHAPTER_6_ #define __CHAPTER_6_/*<深入理解C指针>学习笔记 -- 第六章*/typedef struct __p ...

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

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

  8. OpenCV学习笔记(六)(七)(八)(九)(十)

    OpenCV学习笔记(六)--对XML和YAML文件实现I/O操作 1. XML.YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: [c ...

  9. Intel VT学习笔记(六)—— VM-Exit Handler

    Intel VT学习笔记(六)-- VM-Exit Handler Reutrn To DriverEntry VM-Exit Handler External interrupt I/O instr ...

最新文章

  1. dedecms 财付通接口
  2. 【OpenCV 4开发详解】Canny算法
  3. laravel 模型查找数据
  4. 动画 java_Java动画程序介绍
  5. OpenGL 几何着色器剔除的实例
  6. 04_Flink-HA高可用、Standalone集群模式、Flink-Standalone集群重要参数详解、集群节点重启及扩容、启动组件、Flink on Yarn、启动命令等
  7. 您好GroovyFX
  8. 汽车电子专业知识篇(九)-charge pump的原理介绍
  9. 计算机视觉—图像特效(3)
  10. opencv SIFT角检测
  11. 中国主要的区块链公司以及融资情况
  12. java开发实训报告范文_java实训报告总结
  13. 使用IBM SPSS Statistics常用图表附例演示讲解
  14. 推荐系统(Recommendation System )介绍
  15. SegNet论文笔记
  16. 消息钩子入门篇(4)---示例__外壳钩子(WH_SHELL)
  17. arm 开发环境搭建-基于QEMU和Docker
  18. Spring IoC容器设计原理及高级特性
  19. #12304;#9733;#28404;#28404;#37329;#34701;#23458;#26381;#30005;#35805;#9733;#12305;
  20. 论文笔记:SAITS: SELF-ATTENTION-BASED IMPUTATION FOR TIMESERIES

热门文章

  1. Android编码实现软件界面
  2. 产品经理在跨部门沟通中常见问题和解决办法[转自UCDChina]
  3. 浅谈视觉设计的准确性
  4. jquery after append appendTo三个函数的区别
  5. 三层架构—实践篇(.Net登录实例)
  6. C++ STL泛型编程——在ACM中的运用
  7. 快速理解Docker - 容器级虚拟化解决方案
  8. linux下挂载和卸载的命令的用法:mount 、umount
  9. 基于STM32的DS1302时钟芯片驱动
  10. 数据结构与算法:归并排序