首页 > 其他分享 >3-2. 野猪-撞墙判定和等候计时

3-2. 野猪-撞墙判定和等候计时

时间:2024-02-24 21:12:08浏览次数:26  
标签:撞墙 野猪 Vector2 bounds transform coll 计时 public size

检测左边和右边是否有地面

老师的代码写的是有问题的,见我扩展的代码

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class PhysicsCheck : MonoBehaviour
{
    private CapsuleCollider2D coll;

    [Header("监测参数")]
    public bool manual;
    public Vector2 bottomOffset;
    public Vector2 bottomLeftOffset;
    public Vector2 bottomRightOffset;
    public Vector2 leftOffset;
    public Vector2 rightOffset;
    public float checkRaduis;
    public LayerMask groundLayer;

    [Header("状态")]
    public bool isGround;
    public bool isLeftGround;
    public bool isRightGround;
    public bool touchLeftWall;
    public bool touchRightWall;

    private void Awake()
    {
        coll = GetComponent<CapsuleCollider2D>();
        //if (!manual)
        //{
        //    rightOffset = new Vector2(coll.offset.x + coll.bounds.size.x / 2, coll.bounds.size.y / 2);
        //    leftOffset = new Vector2(coll.offset.x - coll.bounds.size.x / 2, coll.bounds.size.y / 2);
        //}
    }

    void Update()
    {
        Check();
    }

    public void Check()
    {
        if (!manual)
        {
            int faceDir = 0;
            if (transform.localScale.x > 0)
            {
                faceDir = 1;
            }
            else if (transform.localScale.x < 0)
            {
                faceDir = -1;
            }

            bottomOffset = new Vector2(faceDir * coll.offset.x, coll.bounds.size.y / 2 - coll.offset.y);
            bottomLeftOffset = new Vector2(faceDir * coll.offset.x - coll.bounds.size.x / 2, coll.bounds.size.y / 2 - coll.offset.y);
            bottomRightOffset = new Vector2(faceDir * coll.offset.x + coll.bounds.size.x / 2, coll.bounds.size.y / 2 - coll.offset.y);
            leftOffset = new Vector2(faceDir * coll.offset.x - coll.bounds.size.x / 2, coll.bounds.size.y / 2);
            rightOffset = new Vector2(faceDir * coll.offset.x + coll.bounds.size.x / 2, coll.bounds.size.y / 2);
        }

        // 监测地面
        isGround = Physics2D.OverlapCircle((Vector2)transform.position + bottomOffset, checkRaduis, groundLayer);
        isLeftGround = Physics2D.OverlapCircle((Vector2)transform.position + bottomLeftOffset, checkRaduis, groundLayer);
        isRightGround = Physics2D.OverlapCircle((Vector2)transform.position + bottomRightOffset, checkRaduis, groundLayer);

        // 墙体判断
        touchLeftWall = Physics2D.OverlapCircle((Vector2)transform.position + leftOffset, checkRaduis, groundLayer);
        touchRightWall = Physics2D.OverlapCircle((Vector2)transform.position + rightOffset, checkRaduis, groundLayer);
    }

    private void OnDrawGizmosSelected()
    {
        // 绘制监测区
        Gizmos.DrawWireSphere((Vector2)transform.position + bottomOffset, checkRaduis);
        Gizmos.DrawWireSphere((Vector2)transform.position + bottomLeftOffset, checkRaduis);
        Gizmos.DrawWireSphere((Vector2)transform.position + bottomRightOffset, checkRaduis);
        Gizmos.DrawWireSphere((Vector2)transform.position + leftOffset, checkRaduis);
        Gizmos.DrawWireSphere((Vector2)transform.position + rightOffset, checkRaduis);
    }
}

这段代码在运行起来之后,就会出现左、右、左下、右下、下共五个检测盒,并且能判断左边、右边、左下、右下、下是否有地面

即使野猪转向了,检测盒的范围也是正确的

野猪撞墙后等待几秒再修改方向

项目相关代码

代码仓库:https://gitee.com/nbda1121440/2DAdventure.git

标签:20240224_2055

标签:撞墙,野猪,Vector2,bounds,transform,coll,计时,public,size
From: https://www.cnblogs.com/hellozjf/p/18031579

相关文章

  • 3-1. 野猪 - 基本的移动逻辑和动画
    野猪实现移动添加一个Enemy类usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassEnemy:MonoBehaviour{protectedRigidbody2Drb;protectedAnimatoranim;[Header("基本参数")]publicfloatnormalSpe......
  • 计时器工具
    思路制作一个计时器蓝图,放到关卡中实例化后使用关卡蓝图调用展示步骤1.计时器蓝图2.关卡蓝图调用......
  • 2024全年放假日历表及调休安排 用手机便签设置放假倒计时
    对于绝大多数的上班族来说,春节长假已经结束,现在要回归到正常的工作和生活中。为了给生活增加一些“盼头”,很多小伙伴不约而同打开手机日历,查看下个法定节假日是什么时候。下面给大家具体讲一下2024全年放假日历表及调休安排!除去元旦、春节之外,清明节是4月4日至6日放假共3天,4月7日......
  • python 倒计时功能
    importtime#导入时间模块deftimer(seconds):start_time=time.time()#获取当前时间end_time=start_time+seconds#当前时间+要倒数的秒数whiletime.time()<end_time:#当前时间小于结束时间执行remaining_time=int(end_time-time.time())#转......
  • Java中使用StopWatch实现代码块耗时统计/计时某段代码执行
    场景Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(SpringAOP、AutoCloseable方式):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130970242上面讲了统计方法的耗时,实现和使用面向方法体。如果是在方法中,需要频繁统计一段段的代码块的耗时,可以使用St......
  • OC 倒计时圆环
      @interfaceSHMaasPTOnlineCarMatchmakingCircleCountdownView:UIView@property(nonatomic,assign)NSIntegercountdownDuration;//倒计时总秒数@property(nonatomic,assign)NSIntegercurrentCountdown;//当前剩余秒数@property(nonatomic,strong)UILab......
  • 事件循环-同步异步-计时器精确问题
    消息队列的解释每个任务都有一个任务类型。同一个类型的任务必须在一个队列中。不同类型的任务可以分属于不同的队列中。在一次事件循环中,浏览器可以【根据实际情况】从不同的队列中取出任务执行。浏览器必须准备好一个微队列,微队列中的任务优先其他所有类型的任务。chrome......
  • 怎么在电脑桌面上设置倒计时天数?倒计时软件桌面显示方法
    在忙碌的工作中,上班族们经常需要设定倒计时来提醒重要事件或截止日期。如果你是项目经理,就需要在电脑桌面上显示项目截止日期的倒计时,以确保你和团队时刻关注项目进度。此外在特殊的日子里,例如自己或家人的生日、重要节日,通过电脑桌面显示倒计时,可以让你提前安排庆祝计划。那么我......
  • 【K哥爬虫普法】倒计时21天!事关爬虫er们能否平安回家过年!
     我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知晓如何合法合规利用爬虫技术,警钟长鸣,做一个守法、护法、有原则的技术人员。事出有因 ......
  • 2024年春节倒计时还有多少天?用手机便签设置倒计时天数方法
    进入每年的腊月中旬,相信很多学生已经无心学习了,而上班族也无心工作,大家只想赶快放假过年。不过在过年之前,有不少小伙伴都需要提前做好准备,例如为亲朋好友购买春节礼物、为家里购买年货、提前订购火车票等,这时候知晓每天距离春节的倒计时天数就非常有必要了。那么今天距离2024年春......