Unity3D入门--见缝插针

Unity 游戏实例开发集合 之 FlyPin (见缝插针) 休闲小游戏快速实现 Unity 游戏实例开发集合 之 FlyPin (见缝插针) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 FlyPin (见缝插针) 休闲小游戏快速实现 一、简单介绍 二、FlyPin (见缝插针)游戏内容与操作 三、游戏代码框架 四、知识点 五、游戏效果预览 六、实现步骤 七、工程源码地址 八、延伸扩展 一、简单介绍 Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便后期类似游戏开发的借鉴和复用。 本节介绍,FlyPin . 阅读详情

是跟着Siki上的网站进行的,整理思路,原网址如下:

http://www.sikiedu.com/course/78 点击打开链接

打开课程的素材,只有两张图,即圆圈和针棒:


可以把Image文件夹整个拖到Project-Assets下,除此之外在这里再create几个folder:

Scene:存放场景,这个游戏就只有main场景一个

Prefabs:存放“预设”,在Unity3D的工程建设中,Prefabs(预设)是最非常用的一种资源类型,是一种可被重复使用的游戏对象。 特点1:它可以被置入多个场景中,也可以在一个场景中多次置入。 特点2:当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。这里将要存入组合好的带圆圈的针

Scripts:存放C#脚本,处理游戏中组件的属性、操作等

(scripts下面添加的脚本)

大致思路:

设置一个mainCamara;拖入圆,调节大小,调为黑色,作为“被插针”的圆;添加Canvas下面的Text也就是UI->Text,记录分数;添加两个位置,起始位置和生成位置,分别表示屏幕上点击之前针的位置和屏幕外游戏中实例化针的位置;然后添加GameManager处理整个游戏的逻辑

    

对Circle的处理

调节成黑色;居中(x坐标为0);调节合适的大小,添加旋转的运动:也就是在Scripts下新建C#脚本RotateSelf,并拖拽到Circle的属性中;打开后在update()函数中添加旋转的代码:

void Update () {
        transform.Rotate(new Vector3(0, 0, -speed*Time.deltaTime));
	}

这里的update函数在打开之初就有,每帧执行一次;

transform是unity组件,每个游戏对象都有组件,transition下常见的属性包括position(组件位置)、parent(组件父级)等用来描述物体的各种属性

transform.Rotate()为旋转物体的函数,参数为一个vector3也就是三维向量x,y,z,这里围绕Z轴旋转;而Time类包下面的一个重要重要的类变量deltaTime,它表示距上一次调用Update或FixedUpdate所用的时间。

对Text的处理:

需要调节好大小,这里的单位与圆的单位不一致,要比圆的单位大100倍,所以需要缩小,将其canvas一起缩小,最后拖拽到圆的中心,修改颜色,默认字符可以为0,居中显示


对针的处理:

这里处理完后整体拖入到Prefabs中做预设,就得在这一栏删掉了,窦泽屏幕上凭空多一个

可以先添加针的图片,再加入一个圆,但是把圆放在Pin的下面,这样整个Pin可以作为一个整体。调节针头的大小和颜色,然后移动的合适的位置做针头;针同样要调节到合适的大小和长度,然后可以把整个Pin拖到prefabs中作为一个预设,后面不断实例化和使其运动就可以了。其中这个circle针头的Add component中要添加Circle colider2D 和Rigidbody2D两个组件(搜索即可),是为了之后做碰撞检测。其中Circle colider2D中要勾选IsTrigger使得碰撞后还能继续做处理;Rigidbody2D里gravity要设为0,否则针头就会离针而去啦!


当然还得添加PinHead脚本(scripts文件夹下),才能具体的处理针头碰撞。另外在针头添加Tag PinHead以区分大圆做碰撞处理,需要Add tag之后再次选择,然后apply应用

在PinHead脚本中,添加下面的函数:

private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag=="PinHead")
        GameObject.Find("GameManager").GetComponent<GameManager>().GameOver();

    }

 Gameobject是一个类型,所有的游戏物件都是这个类型的对象,是由component组成的;GameObject.find()通过名字来查找场景中的游戏对象,找到里面的GameManager组件下面的GameOver()方法;其中GameManager也是在Scripts下面添加的脚本文件,掌控整个游戏逻辑,里面会有涉及到游戏结束的函数,这里针头碰撞时要调用,可想而知,GameOver()是public的


整个针也有脚本Pin,需要控制针的运动;使其插上后一起跟圆旋转,Pin中的变量和函数,核心就两个函数

public float speed = 20;//针移动的速度
    private bool isFly = false;//针是否在从起始点到圆的过程中
    private bool isReach = false;//针是否实例化后到达了屏幕起始位置
    private Transform startPoint;//屏幕上点击之前针的位置
    private Transform circle;//获取组件大圆
    private Vector3 targetCirclePosition;//由于不是插到圆心位置,需要另求目标位置
	// Use this for initialization
	void Start () {
        startPoint = GameObject.Find("StartPosition").transform;
        circle = GameObject.Find("Circle").transform;
        targetCirclePosition = circle.position;
        targetCirclePosition.y -= 1.55f;//这里是理想碰撞下圆的y坐标和针的y坐标的差,也就是目标的插入位置

    }
    /// <summary>
    /// 从起始点到插入,具体的移动见Update
    /// </summary>
	public void StartFly()
    {
        isFly = true;
        isReach = true;
    }
	// Update is called once per frame
	void Update () {
		if(isFly == false)
        {
            if(isReach==false)
            {//这一段是从屏幕外的生成位置,到屏幕上的开始位置,参数:当前位置,目标位置,速度
                transform.position= Vector3.MoveTowards(transform.position, startPoint.position, speed * Time.deltaTime);
                if (Vector3.Distance(transform.position, startPoint.position) < 0.05f)//计算距离
                    isReach = true;//已到达起始位置
            }
        }
        //从屏幕起始位置移动到圆
        else
        {
            transform.position = Vector3.MoveTowards(transform.position, targetCirclePosition, speed * Time.deltaTime);
            if(Vector3.Distance(transform.position,targetCirclePosition)<0.05f)
            {
                transform.position = targetCirclePosition;
                transform.parent = circle;//这样就会和圆一起rotate
                isFly = false;
            }
        }
	}



GameManager

这里要拖入GameManager脚本,这个脚本就是和其他脚本的图标不一样QAQ

这个脚本主要是实例化针;响应鼠标点击事件;记录修改游戏得分;处理碰撞后游戏结束事件

其中实例化针:

//生成针:在spawnpoint位置实例化
    void SpawnPin()
    {
        currentPin= GameObject.Instantiate(pinPrefab, spawnPoint.position, pinPrefab.transform.rotation).GetComponent<Pin>();
    }

其中pinPrefab是public 的GameObject类型的对象,可以拖拽赋值为之前保存的预设;

开始函数,初始化获取参数,生成针:

 void Start()
    {
        //获取具体位置
        startPoint = GameObject.Find("StartPosition").transform;
        spawnPoint = GameObject.Find("SpawnPoint").transform;
        mainCamera = Camera.main;//主相机
        SpawnPin();
        animationSpeed = 3;//不在这里初始化可能会被初始化为0
    }

Update随时响应鼠标点击事件:

// Update is called once per frame
    void Update()
    {
        if (isGameOver) return;//游戏结束不响应鼠标点击了
        //鼠标点击事件
        if(Input.GetMouseButtonDown(0))
        {
            currentPin.StartFly();//从起始位置向上
            score++;//更新分数
            scoreText.text = score.ToString();
            SpawnPin();//重新实例化针
        }
    }

GameOver处理函数:

public void GameOver()
    {
        if (isGameOver) return;
        
        GameObject.Find("Circle").GetComponent<RotateSelf>().enabled = false;//停止旋转
        StartCoroutine(GameOverAnimation());//游戏结束动画,自己另写一个协程


        isGameOver = true;
    }

GameOver动画,将主相机的背景色渐变,大小渐变:

IEnumerator GameOverAnimation()
    {
        while(true)
        {
            
            //lerp()进行差值计算。背景色和大小都线性变化
            mainCamera.backgroundColor = Color.Lerp(mainCamera.backgroundColor, Color.red, animationSpeed* Time.deltaTime);
            mainCamera.orthographicSize = Mathf.Lerp(mainCamera.orthographicSize, 4, animationSpeed * Time.deltaTime);
            Debug.Log(animationSpeed);
            if (Mathf.Abs(mainCamera.orthographicSize - 4) < 0.01f) break;
            yield return 0;//每次暂停一帧
        }
        yield return new WaitForSeconds(0.2f);//动画暂停0.5秒
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);//重新加载场景
    }
unity协程是一个能暂停执行,暂停后立即返回,直到中断指令完成后继续执行的函数。

它类似一个子线程单独出来处理一些问题,性能开销较小,但是他在一个MonoBehaviour提供的主线程里只能有一个处于运行状态的协程。

效果如图:


这样就好啦

正常的游戏效果:



unity3D 《见缝插针》--得分显示、结束动画、以及游戏的重置 一、得分显示 1.首先在scene新建一个Text的UI组件,它在Canvas面板下 2.进行缩放 3.为Canvas添加脚本,代码如下 public static int scoreValue; public Text scoreText; // Use this for initialization void Start () { scoreValue = 0; ... 阅读详情

相关推荐

Unity 3D入门教程之简化版见缝插针的实现

开发工具Unity 2018.4和VS 2017 开发语言C# 见缝插针这款游戏相应各位都是有尝试,其功能还是相当的简单,就是让针插到转盘上面并且不会碰到已经插好的针就成功,达到相应的指定条件则游戏成功,然后控制转盘的速度、针的个数或者是转盘的旋转方式这样不断地提升游戏难度。(作为简化版的见缝插针我就只是增加针的个数)。 //控制针的运动 void Update () { ...

qq_41967240的博客 612

Unity小游戏--见缝插针(含登录界面) 北京联合大学校选课程期末项目(版本5.4)

Target中添加Circle Collider2D(圆形碰撞组件),圆Pin添加Circle Collider2D、Box Collider2D(矩形碰撞组件)和Rigidbody2D,其中Rigidbody2D的重力参数为零即Gravity Scale为0,所有的Collider2D勾选Is Trigger,然后碰撞体调整至如下效果(PS:针的圆碰撞与圆形贴合即可矩形碰撞大致为针柄的一半或更短,是为了保障连发时不出现针之间的误碰而导致直接判定为失败,同时也保障了靶下针柄相互碰撞导致判定为失败。

m0_74372006的博客 784

unity3d 《见缝插针》---transform.Rotate

unity3d 5.6.7初学 总结-1 1.设置精灵原地旋转 (1)拖入一个精灵 (2)创建一个脚本 (3)拖入脚本 (4)在脚本的update方法内编写: private int speed;//速度 void Update () { transform.Rotate(0, 0, speed); } (5)运行 说明:1.transform是所有gameObject的属性,用于设置物体的位置,...

qq_34838859的博客 938

Unity|小游戏复刻|见缝插针1(C#)

给针头添加碰撞器,选中针头,在检查器底下的添加组件,搜Circle Collider 2D添加。创建一个脚本,选择MonoBehaviour,命名为RotateSelf。将Pin放到StartPosition的下面,这样可以进行预览,调整位置。选中Circle,位置为左右居中,偏上,颜色为黑色,大小缩为0.7。使得Circle和Canvas的位置坐标一致,都为0,2,0。创建两个空对象,将第一个命名为StartPosition。选中Text,点击重置,文本居中,颜色为白色,内容为0。

ChoSeitaku的博客 687

使用unity制作见缝插针

首先创建2D精灵命名为Rotater 园旋转代码 public class Rotation: MonoBehaviour { public float speed = 90f; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { transform

m0_51483279的博客 797

unity3D 《见缝插针》----使“针“”扎“在”“圆盘上”并随之转动

1、向“飞出去的针”添加脚本 先者我们已有lunch脚本让“针”飞出去,现在我们添加碰撞检测函数,代码如下: void OnTriggerEnter2D(Collider2D col) { if (col.tag == "rotate") { col.GetComponent<rotate>().Speed *= -1; ...

qq_34838859的博客 580

Unity|小游戏复刻|见缝插针2(C#)

给Pin的针头添加Circle Collider 2D,勾上触发器,再添加rigidbody 2D,重力设为0。添加PinHead脚本,将其挂载到PinHead上,给PinHead添加上自己添加的PinHead标签。当游戏结束后,将主摄像头背景变为红色,并且使摄像头size变小,使得游戏内容放大。将Pin脚本拖到针Pin的下面。通过camera组件进行控制。

ChoSeitaku的博客 2042

Unity3D见缝插针小游戏开发完整实战项目

回顾整个流程,我们构建了一个具备以下特征的系统:✅状态清晰:使用FSM管理生命周期✅输入兼容:支持多平台操作✅动画流畅:基于LeanTween实现高性能旋转✅碰撞精准:结合Collider + LayerMask + Raycast✅反馈强烈:视觉、听觉、触觉三位一体✅性能可控:对象池、GC优化、Draw Call合并这不是某一种技术的胜利,而是整体工程思维的体现。

weixin_34520664的博客 842

入门级案例学习 - 见缝插针

导入素材,没啥好说的。

qq_43720139的博客 349

C#基于Unity3D游戏设计作品-见缝插针游戏完整源码+项目说明.zip

C#基于Unity3D游戏设计作品_见缝插针游戏完整源码+项目说明.zip 【提示】 如何用Unity3D打开已有的游戏文件,直接在打开Unity3D时选择Open,能看到.vs文件夹时,直接选择这个文件 脚本是用C#写的(在Unity3D中脚本可以当作组件使用,进行拖拽) 创建UI (1)Text UI:用于记录分数 1): Rect Transform: 用于调整Text的大小 2): Text(Scripts): 里面可以设置字体样式,大小,居中等 (2)画布Canvas:是Text UI 所在的画布(创建的UI都在里面 ) 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的C#学习者。 也可作为课程设计、期末大作业。包含:项目源码、项目说明等,该项目可以直接作为毕设使用。 也可以用来学习参考借鉴! 【特别强调】 1、csdn上资源保证是完整最新,会不定期更新优化; 2、请用自己的账号在csdn官网下载,若通过第三方代下,博主不对您下载的资源作任何保证,且不提供任何形式的技术支持和答疑!!!

在AutoDL的A100云服务器上,用Docker搞定Sapien+RobotWin环境(附完整conda list)

本文详细介绍了在AutoDL的A100云服务器上使用Docker构建Sapien+RobotWin环境的完整指南。通过配置Vulkan渲染管线、精确复现Conda环境以及解决常见问题,帮助研究人员高效搭建稳定的机器人仿真开发环境,特别适合需要高性能GPU加速的复杂仿真任务。

weixin_30689307的博客 431

Unity3D基础案例-见缝插针

引言:人生无处不代码,无代码处不人生。小生作为U3D学习之旅中的一员,将基础案例主要开发流程记录下来,与共同兴趣的你分享。 开发版本:unity 5.3.5f 适合人群:初学Unity者 源文件链接请见文末! 开启学习之旅吧!   01 场景搭建 创建2D工程StickPin,并创建新场景MainScene,导入素材,完成初始场景搭建 注意工程路径最好不要有中文 在Circl...

胖胖的橘猫君 8291

LM Studio Bionic:本地AI智能体从部署到实战完整指南

AI智能体作为能够自主规划、执行多步任务的人工智能系统,其核心原理在于结合大语言模型的推理能力与工具调用机制。通过状态保持和任务分解算法,智能体实现了从单次问答到持续协作的技术跃迁。在工程实践中,这种架构显著降低了复杂任务自动化的门槛,特别适用于数据敏感场景和定制化需求。以Tesla V100等专业硬件为例,本地部署能充分发挥其大显存优势,支持更高精度的模型量化格式。在实际应用层面,智能体可无缝集成到代码审查、文档生成等开发工作流中,而LM Studio Bionic通过统一界面整合了模型服务、任务规划器等

weixin_29053695的博客 649

Unity零基础入门 - 见缝插针

Unity零基础入门 - 见缝插针(Unity2017)

wenjunanother的博客 2905

嵌入式存储实战:FAL+SFUD+flashDB三件套在STM32上的完整移植指南(附避坑技巧)

本文提供了一套在STM32上完整移植FAL、SFUD与flashDB嵌入式存储框架的实战指南。详细解析了从SPI驱动配置、SFUD设备识别、FAL抽象层分区到flashDB键值数据库初始化的全流程,并分享了关键的避坑技巧与性能优化建议,帮助开发者构建稳定可靠的嵌入式存储系统。

rnn9storyteller的博客 1015

UM982上位机调试【精简版】

分享一些关于UM982卫导模块上位机调试的简快捷单小功能。

在线求职中... 1万+

HTML5见缝插针小游戏

用H5与cocos-js结合编写的小游戏,见缝插针。 游戏截图 ​点击鼠标发射针,插在中间的球体当中进行旋转。 onTouchBegan:function(touch, event){         var target =event.getCurrentTarget();         if(target.playerBall.lenght  

bright_mmmmmmmmmmmm的专栏 1766

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

qq_45634989的博客 2878

Unity小游戏2D(见缝插针)

首先做一个针以及一个目标,可以自选比如箭矢射靶,网上自己找素材都行,注意目标最好是圆的。 需要创建一个目标、针、计算得分的text、以及三个空物体命名如下 InsPoint是针生成的地方 StartPoint是游戏开始的地方 两者之间距离远一些 1.在生成好的目标上挂上代码 public class RotateSelf : MonoBehaviour { public float speed = 30;//小球旋转的速度 // Start is called before the fir

AI200的博客 1023

7、基于机器学习的生产效率估计方法解析

本文探讨了基于机器学习的生产效率估计方法,重点介绍了效率分析树(EAT)和凸效率分析树(CEAT)算法的原理及其与传统自由处置壳(FDH)和数据包络分析(DEA)方法的对比。通过剪枝优化、生产可能性集构建及方向距离函数(DDF)估计,EAT和CEAT在避免过拟合、提升估计稳定性与处理凸性假设方面展现出优势。结合PISA教育数据的实证研究,采用箱线图、核密度图和非参数检验方法验证了不同模型效率得分分布的显著差异。研究表明,EAT与CEAT为生产效率评估提供了更准确、灵活的工具,适用于教育、企业生产和医疗等多个

milk5的博客 92

ESP32开发进阶:1.接入文心一言

ESP32开发进阶:接入文心一言大模型,串口对话

qq_53529450的博客 1431

Cocos2dx游戏教程(四):“见缝插针”,第一个场景的建立

从这一篇开始就正是进入游戏具体实现啦,前面都了解了核心类的基本操作,那么现在我们开始具体实现吧 一、见缝插针的玩法 简单的说,玩家有一些小球,将这些小球弹射到大球上且不能碰到大球上的小球哦,前面介绍的“口红机”就是这样的玩法,只不过我们把小球换成了口红而已。 看看广告词,说的还是很清楚的么 又是一款简单而不简略的游戏,游戏画面简略但玩法新颖。玩家手中有一定数量的针头,必须把所有的针头都插进旋转的球...

小白的专栏 736

FPGA发展趋势:异构计算、AI加速、可重构计算

FPGA技术正朝着异构计算、AI加速和可重构计算三大方向发展。作为高效能计算平台,FPGA在异构架构中与CPU/GPU协同工作,发挥低延迟、高能效优势;在AI领域通过定制化架构实现边缘推理加速;其硬件可重构特性支持动态适应多样化计算需求。最新进展包括部分可重构技术、智能网卡和边缘AI应用。未来,FPGA将在自适应计算、量子接口和软件定义硬件等领域持续突破,成为异构计算架构的核心组件,推动硬件与软件的深度融合。性能对比显示FPGA在能效比(5-20TOPS/W)和灵活性方面具有显著优势。

2301_79143213的博客 968

Unity 3D游戏-见缝插针源码

Unity见缝插针功能实现 1 Sphere Rotation 控制球体旋转 2 Shoot Pin 射出 针 3 Detection Of Failure 检测 游戏失败 4 GameManager 游戏控制脚本 游戏效果:1 Sphere Rot

Chinar优快云的博客 4512

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Unity3D见缝插针完整游戏模板1200关

摘要:这是一款完整的跨平台2D游戏,包含1200个关卡,支持iOS、Android、Windows、Mac等多平台。主要功能包括:完整的游戏系统、关卡管理、对象池系统、UI界面、音效资源、无限关卡生成器,以及适配移动和PC设备的输入控制器。游戏还包含动画效果和菜单系统。

醉后不知天在水,满船清梦压星河 145

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

unity做一个简单的见缝插针游戏

【代码】unity做一个简单的见缝插针游戏。

qq_20179331的博客 919

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: LeetCode 11 : 盛最多水的容器 C++ 贪心
下一篇: CCF 2018真题--持续更新ing
BeforeEasy
博客等级 码龄10年 92粉丝 207原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值