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

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

效果是这样的

 有点其实也可以不这么复杂的,但是我想起来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;
        }
    }
}

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

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

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

效果是这样的

吃果子之前是这样的

 

 弱,太弱了,所以我们得多寻找这样的奇迹之果(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);
    }
}

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

猜你喜欢

转载自blog.csdn.net/qq_63499305/article/details/130364247