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自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每 ...
随机推荐
- 聊一聊 Cloud Native 与12-Factor
12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则.Cloud Native架构中使用12-Factor作为设计准则. 12-Factor 的目标在于: ...
- w3c标准 dom对象 事件冒泡和事件捕获
http://www.cnblogs.com/chengxs/p/6388779.html http://www.jb51.net/article/42492.htm W3C标准是什么? 1.表现(c ...
- 很实用且容易忘记的小命令 for Linux(更新中...)
系统相关 # 系统安装日期 sudo tune2fs -l /dev/sda1 |grep create # 查看centos版本命令 rpm -q centos-release #查看centos版 ...
- Java基础-面向对象(08)
面向过程 完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现.一步一步去实现,而具体的每一步都需要我们去实现和操作.这些步骤相互调用和协作,完成我们的需求.面向过程开发 ...
- AC自动机练习
多模板串匹配一般有两种方法 暴力kmp, 适用于模板串少的情形 直接trie上暴力, 适用于模板串比较短的情形, 并且可以动态插入合并 建立AC自动机, 复杂度是严格线性的, 但不能动态插入 cons ...
- 『cs231n』循环神经网络RNN
循环神经网络 循环神经网络介绍摘抄自莫凡博士的教程 序列数据 我们想象现在有一组序列数据 data 0,1,2,3. 在当预测 result0 的时候,我们基于的是 data0, 同样在预测其他数据的 ...
- nyoj-489-dinic/建图
哭泣天使 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石 ...
- 关于一些逗逼函数//atoi,itoa,strtok,strupr,
reverse(begin,end) 反转容器内容可以是string,char数组,也可以是int型数组...用于反转其中的内容: char * strtok(cahr *,const char ...
- POJ 2352 treap
当年经常遇到这种题,愣是没做出来,好像那时不会线段树,也不会平衡树. 凭借一身蛮力来搞,倒是和那群朋友搞得开开心心. 题意: y从小到大,若y相同,x从小到大,这样给出一些坐标,求每个点覆盖的点个数. ...
- 最小生成树 - 克鲁斯卡尔 - 并查集 - 边稀疏 - O(E * logE)
#define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<cstring> #include<algorithm ...