【sunnyland】【unity2D】使用碰撞器实现平台开关移动以及吃药解锁超级跳模式

简介: 【sunnyland】【unity2D】使用碰撞器实现平台开关移动以及吃药解锁超级跳模式

没用raycast投射,使用碰撞检测函数实现了一个平台的小开关

效果是这样的fbf67d4508b84f17be7b52dcc1dd23b7.gif


有点其实也可以不这么复杂的,但是我想起来raycast的时候已经做完了,我还想做点其他的东西,就这样写了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class platformController : MonoBehaviour
{
    // Start is called before the first frame update
    public GameObject crate;//存放第一个停泊点的位置
    public GameObject crate1;//第二个
    public GameObject platform;//平台
    public float speed;
    public bool isDown;//开关状态
    public bool Trigger = false;//检测是否站在了开关点
    Animator animator;
    public float TriggerTime = 3.0f;
    private float Timer;
    void Start()
    {
        animator = GetComponent<Animator>();  
    }
    // Update is called once per frame
    void Update()
    {
        if (Timer > 0)
        {
            if (Input.GetKeyDown(KeyCode.V))
            {
                isDown = !isDown;
            }
            Timer -= Time.deltaTime;
        }
        else Trigger = false;
        if (isDown)//如果开关下拉平台往右走,上拉往左走
        {
            Vector2 position = new Vector2(crate1.transform.position.x - 5, platform.transform.position.y);
            Move(position, Time.deltaTime);
        }
        else
        {
            Vector2 position = new Vector2(crate.transform.position.x + 5, platform.transform.position.y);
            Move(position, Time.deltaTime);
        }
        if (isDown)
        animator.SetBool("down", true);
        else animator.SetBool("down", false);
    }
    private void Move(Vector2 position,float dt)//移动
    {
        platform.transform.position = Vector2.MoveTowards(platform.transform.position, position, dt * speed);
    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        foxcontroller fox = other.gameObject.GetComponent<foxcontroller>();
        if (fox != null)//碰撞成功开始计时
        {
            Trigger = true;
            Timer = TriggerTime;
        }
    }
}

我这一套写了很多不必要的步骤,全部是按自己的编程习惯来的,有点子复杂与麻烦,还有些漏洞,不过也算是提供一点不那么好的思路吧,可以看一下。

第二个我是写了一个具有特殊效果的奇异果

吃了以后开启超级跳模式,无限跳跃次数,体验上天的感觉

效果是这样的


image.gif


吃果子之前是这样的




image.gif

弱,太弱了,所以我们得多寻找这样的奇迹之果(bushi)

代码是这样的

 private void superJump()//这里超级跳跃模式
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            isjump = true;
            rb2d.velocity = Vector2.up * jumpForce;//添加力
            jumpTime = jumpStartTime;
        }            
        if(Input.GetKey(KeyCode.Space)&&isjump == true)//甚至还有长跳
        {
            if(jumpTime > 0)
            {
                rb2d.velocity = Vector2.up * jumpForce;
                jumpTime -= Time.deltaTime;
            }
        }
        else
        {
            isjump = false;
        }
        if (Input.GetKeyUp(KeyCode.Space))
        {
            isjump = false;
        }
    }
    void normalJump()
    {
        if (Input.GetKeyDown(KeyCode.Space)&&jump>1)
        {
            rb2d.velocity = Vector2.up * jumpForce;
            jump--;
        }
        if (isGround)//落地刷新跳跃次数
        {
            jump = jumpNumber;
        }
    }
        if (canSuperJumpTime > 0)//这里是控制,剩余超级跳时间
        {
            canSuperJumpTime -= Time.deltaTime;
            canSuperJump = true;
        }
        else canSuperJump = false;
        if (canSuperJump)
        {
            superJump();
        }
        else normalJump();
public class superJump : MonoBehaviour
{
    // Start is called before the first frame update
    public float canSuperJumpTime;
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    {
    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        foxcontroller fox = other.GetComponent<foxcontroller>();
        if (fox != null)
        {
            fox.canSuperJumpTime = canSuperJumpTime;
        }
        Destroy(gameObject);
    }
}

果子的代码很简单,触发器触发以后给角色一个超级跳时间就行了

相关文章
|
2月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
150 0
|
3月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
120 0
|
3月前
|
开发者 图形学 iOS开发
掌握Unity的跨平台部署与发布秘籍,让你的游戏作品在多个平台上大放异彩——从基础设置到高级优化,深入解析一站式游戏开发解决方案的每一个细节,带你领略高效发布流程的魅力所在
【8月更文挑战第31天】跨平台游戏开发是当今游戏产业的热点,尤其在移动设备普及的背景下更为重要。作为领先的游戏开发引擎,Unity以其卓越的跨平台支持能力脱颖而出,能够将游戏轻松部署至iOS、Android、PC、Mac、Web及游戏主机等多个平台。本文通过杂文形式探讨Unity在各平台的部署与发布策略,并提供具体实例,涵盖项目设置、性能优化、打包流程及发布前准备等关键环节,助力开发者充分利用Unity的强大功能,实现多平台游戏开发。
98 0
|
3月前
|
Apache 图形学
WebGL☀️Unity WebGL适配到各平台的教程
WebGL☀️Unity WebGL适配到各平台的教程
|
数据采集 开发工具 图形学
Windows平台实现Unity下窗体|摄像头|屏幕采集推送
随着Unity3D的应用范围越来越广,越来越多的行业开始基于Unity3D开发产品,如传统行业中虚拟仿真教育、航空工业、室内设计、城市规划、工业仿真等领域。
107 0
|
6月前
|
数据采集 编解码 图形学
Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级RTSP服务
Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级RTSP服务
331 0
|
6月前
|
vr&ar 开发工具 图形学
Unity引擎:收费模式和服务升级,为游戏开发带来更多可能性
Unity引擎:收费模式和服务升级,为游戏开发带来更多可能性
119 0
|
6月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
106 0
|
11月前
|
图形学
Unity小游戏——怪物出现模式的管理
Unity小游戏——怪物出现模式的管理
123 0
|
编解码 监控 图形学
Windows平台Unity下播放RTSP或RTMP如何开启硬解码?
我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。
146 1