Unity 3D游戏-见缝插针源码
Unity见缝插针功能实现
|
本文提供全流程,中文翻译。 Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
游戏效果:
1
Sphere Rotation ——控制球体旋转
了解更多,可以跳转到SiKi学院,观看视频:SiKi学院
SiKi学院——是本人发现的网络教程做的很完善的网络课堂,推荐大家多学,多看
using UnityEngine;
/// <summary>
/// 球体旋转
/// </summary>
public class Whirl : MonoBehaviour
{
public float Speed = 90; //转速
void Update()
{
transform.Rotate(new Vector3(0, 0, -Speed * Time.deltaTime)); //控制自身旋转
}
}
举个栗子
2
Shoot Pin ——射出 针
using UnityEngine;
/// <summary>
/// 发射针
/// </summary>
public class Pin : MonoBehaviour
{
private bool _isBall = false; //是否朝着球走
private bool _isStartPos = false; //是否朝着就位点走
private Transform _startPos; //就位 位置
private Transform _targetBall; //球 位置
private Vector3 _targetOffsetBall; //与球中心的偏移位置(正确位置)
public float Speed = 5; //速度5
void Start()
{
_startPos = GameObject.Find("StartPos").transform; //找到就位 位置
_targetBall = GameObject.Find("Whirl").transform; //找到生成位置
_targetOffsetBall = _targetBall.position; //把球的中心位置,赋值给球偏移位置
_targetOffsetBall.y -= 1.66f; //得到球偏移的正点位置,所以需要球的中心点的Y 减去 1.66f
}
void Update()
{
if (_isBall == false) //朝着球飞 为 false
{
if (_isStartPos == false) //朝着就位点飞 为 false
{
transform.position =
Vector3.MoveTowards(transform.position, _startPos.position, Speed * Time.deltaTime); //朝目标移动(当前位置,目标位置,速度)
if (Vector3.Distance(transform.position, _startPos.position) < 0.05f) //如果当前位置 与 目标位置 < 0.05f
{
_isStartPos = true; //到达就位点
}
}
}
else //如果_isBall 为 True的情况,就说明需要让 箭 从就位点,到球
{
transform.position =
Vector3.MoveTowards(transform.position, _targetOffsetBall, Speed * Time.deltaTime); //朝目标移动(当前位置,目标位置,速度)
if (Vector3.Distance(transform.position, _targetOffsetBall) < 0.05f) //如果当前位置 与 目标位置 < 0.05f
{
transform.position = _targetOffsetBall; //赋值,定点到位
transform.SetParent(_targetBall); //设置父物体
_isBall = false; //到了目标点后,就不需要飞了
}
}
}
/// <summary>
/// 朝着球飞
/// </summary>
public void DistanceBall()
{
_isBall = true;
_isStartPos = true;
}
}
举个栗子
3
Detection Of Failure ——检测 游戏失败
using UnityEngine;
/// <summary>
/// 碰撞检测
/// </summary>
public class Shit : MonoBehaviour
{
/// <summary>
/// 检测碰撞
/// </summary>
/// <param name="col"></param>
private void OnTriggerEnter2D(Collider2D col)
{
if (col.tag == "Shit") //检测到碰撞
{
GameObject.Find("ScriptMount").GetComponent<GameManager>().GameOver(); //调用游戏结束方法
}
}
}
举个栗子
4
GameManager ——游戏控制脚本
了解更多,可以跳转到SiKi学院,观看视频:SiKi学院
SiKi学院——是本人发现的网络教程做的很完善的网络课堂,推荐大家多学,多看
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
/// <summary>
/// 总控制脚本
/// </summary>
public class GameManager : MonoBehaviour
{
private Transform _startPos; //就位 位置
private Transform _generatePos; //生成位置
private GameObject _arrowObj; //箭
private Pin _selectPin; //选择的针
private bool _isOver = false; //默认游戏未结束
private int _score = 0; //分数
public Text ScoreText; //分数文本框
private Camera _mainCamera; //主相机组件对象
private float _animationSpeed = 3; //动画播放速度
/// <summary>
/// 初始化数据
/// </summary>
void Start()
{
_startPos = GameObject.Find("StartPos").transform; //找到就位 位置
_generatePos = GameObject.Find("GeneratePos").transform; //找到生成位置
_mainCamera = Camera.main; //指定主相机
GenerateArrow(); //调用生成
}
/// <summary>
/// 生成箭
/// </summary>
public void GenerateArrow()
{
_arrowObj = Resources.Load<GameObject>("Prefabs/Pin"); //动态加载预设物
GameObject obj =
Instantiate(_arrowObj, _generatePos.position, _arrowObj.transform.rotation) as GameObject; //实例化预设物(预设物,位置,旋转信息)
_selectPin = obj.GetComponent<Pin>(); //获取实例化 箭 的脚本Pin
}
/// <summary>
/// 更新函数
/// </summary>
void Update()
{
if (_isOver) return; //如果游戏结束,直接跳出不执行
if (Input.GetMouseButtonDown(0)) //按下鼠标左键
{
_score++; //分数自增
ScoreText.text = _score.ToString(); //给文本赋值,int转string
_selectPin.DistanceBall(); //调用朝着球飞的方法
GenerateArrow(); //生成一个新的箭,准备
}
}
/// <summary>
/// 游戏结束
/// </summary>
public void GameOver()
{
if (_isOver) return; //如果游戏结束状态为True,直接跳出
GameObject.Find("Whirl").GetComponent<Whirl>().enabled = false; //关闭球体旋转
StartCoroutine(GameOverAnimation()); //开启
_isOver = true; //游戏结束
}
/// <summary>
/// 开启协程 —— 游戏结束的动画
/// </summary>
/// <returns></returns>
IEnumerator GameOverAnimation()
{
_isOver = true; //游戏结束
while (true) //死循环
{
//插值运算
//主相机背景色 = 颜色,插值(当前色,目标色,渐变速度)
_mainCamera.backgroundColor = Color.Lerp(_mainCamera.backgroundColor, Color.green, _animationSpeed * Time.deltaTime);
//主相机的正交尺寸 = 运算,插值(当前尺寸,目标尺寸,渐变速度)
_mainCamera.orthographicSize = Mathf.Lerp(_mainCamera.orthographicSize, 3.5f, _animationSpeed * Time.deltaTime);
//判断是否达到目标值 运算,计算向量(当前值 减去 3.5f )< 0.01f的话 跳出
if (Mathf.Abs(_mainCamera.orthographicSize - 3.5f) < 0.01f) break;
yield return 2; //每次暂停一帧
}
yield return new WaitForSeconds(1); //等待1秒
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //重载当前场景
}
}
支持
May Be —— 搞开发,总有一天要做的事!
|
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠卷 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
" role="presentation">
技术交流群:806091680 ! Chinar 欢迎你的加入
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
Unity 3D游戏-见缝插针源码的更多相关文章
- 一个3D ar打飞机的游戏iOS源码
这是国内目前第一款集合了AR实景,3D游戏和人脸识别的射击游戏,通过旋转和改变手机的角度与位置,所有的射击操作都靠手势来完成,目前所有的源码全部都在这里.appStore地址:https://itun ...
- 猜拳游戏GuessGame源码
该游戏是一款比较不错的猜拳游戏GuessGame源码案例,GuessGame——猜拳游戏,这也是我自己的第一款休闲类的游戏案例,游戏实现也比较简单的,希望这个能够帮大家的学习和使用,更多安卓源码尽在源 ...
- 双人对战的球类游戏IOS源码
双人对战的球类游戏源码,这个是一款双人对战的ios球类游戏源码,游戏的源码也比较详细的,我们在屏幕上下看到各有一个球门,内有一球,两边通过控制轮盘使球进入对方的球门的,其实玩法也很简单的,我们知道体育 ...
- 一款类似塔防类的保卫羊村游戏android源码
一款类似塔防类的保卫羊村游戏源码,这个游戏很像我们平时玩的塔防游戏的,游戏的源码比较完整的,大家可以修改一下或者添加一些广告就可以上线到应用商店了,而且这个游戏目前已经上线国内的一些应用商店了,360 ...
- Unity 3D游戏开发学习路线(方法篇)
Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...
- pygame系列_小球完全弹性碰撞游戏_源码下载
之前做了一个基于python的tkinter的小球完全碰撞游戏: python开发_tkinter_小球完全弹性碰撞游戏_源码下载 今天利用业余时间,写了一个功能要强大一些的小球完全碰撞游戏: 游戏名 ...
- 《Unity 3D游戏客户端基础框架》概述
框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框 ...
- Chrome自带恐龙小游戏的源码研究(七)
在上一篇<Chrome自带恐龙小游戏的源码研究(六)>中研究了恐龙的跳跃过程,这一篇研究恐龙与障碍物之间的碰撞检测. 碰撞盒子 游戏中采用的是矩形(非旋转矩形)碰撞.这类碰撞优点是计算比较 ...
- Chrome自带恐龙小游戏的源码研究(完)
在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每 ...
随机推荐
- 手动添加 launcher 到 Ubuntu Unity
本来,启动程序之后,在左边的launcher bar点右键,[Lock to Launcher]就可以的. 但是,有时候因为某种原因,需要手工添加. 这时候,就要参考下面的文章了 http://ask ...
- .net GUI框架
十大开源的.NET用户界面框架 让GUI设计不再犯难 选择一款合适的GUI框架是.NET开发中比较重要但又很棘手的问题,因为用户界面相当于一款应用的"门面",直接面向用户.好的UI ...
- [Java学习] Java类的基本运行顺序
我们以下面的类来说明一个基本的 Java 类的运行顺序: 1. public class Demo{ 2. private String name; 3. private int age; 4. 5. ...
- Report CodeForces - 631C (栈)
题目链接 题目大意:给定序列, 给定若干操作, 每次操作将$[1,r]$元素升序或降序排列, 求操作完序列 首先可以发现对最后结果有影响的序列$r$一定非增, 并且是升序降序交替的 可以用单调栈维护这 ...
- python-day34--进程补充
一.进程补充: 1,生产者消费者模型: 两类角色,一类负责生产数据,另外那类负责数据 生产完放到共享空间,另外那类到空间取数据进行处理 好处: 生产数据的同时可以进行数据的处理,不用等(并发效果) 问 ...
- UVA-10318 Security Panel (DFS+剪枝)
题目大意:求将一个r*c的按钮矩阵由全部为关变成全部为开的最少按扭次数,每按一次开关能作用到的范围不定. 题目分析:开关问题.打眼一看就是BFS+位压缩,但是写出来之后TLE.用DFS不断更新最优解. ...
- 页面跳转 Server.Transfer和 Response.Redirect的区别
1.Server.Transfer 用于把处理的控制权从一个页面转移到另一个页面,在转移的工程中没有离开服务器内部控件(如request,session等)保存的信息不变.因此你能从a页面跳转到b页面 ...
- Ajax中Delete请求参数 后台无法获取的解决方法(Restful风格)
方法一: 在ajax中写入data来传参时,直接把参数拼接到url后面 例如: $.ajax({ url: '/cyberspace/vrv/event/delete/1002?startTime=& ...
- vnc xfce tab自动补全失效的解决方法
edit~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml find the line <proper ...
- 无名管道跟dup,dup的使用
参考资料: http://www.tldp.org/LDP/lpg/node11.html http://blog.csdn.net/yeyuangen/article/details/6852682 ...