Hollow-knight开发日志(8.21)

目前开发到Crawler的移动和翻转效果

 

 

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

public class Crawler : MonoBehaviour
{
    //朝向
    private bool isFacingRight;
    //死亡施加力
    private bool isDead;
    private Rigidbody2D rigidBody;
    public float movementSpeed;
    //地面墙壁检测
    private bool isGrounded;//是否将要到悬崖
    public GameObject groundCheck;//虫子的一个子物体
    public LayerMask ground;//设置为地面
    public float circleRadiu;//半径
    //面向的物体碰撞检测
    public Collider2D facingDetector;//脸上设置碰撞体
    public ContactFilter2D contact;//接触筛选器,用于以不同方式筛选结果,例如按层遮罩、Z 深度。注意,法线角度不用于重叠测试。


    private void Start()
    {
        rigidBody = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        Direction();
        Movement();
        FacingDetect();
    }


    /// <summary>
    /// 检测朝向
    /// </summary>
    private void Direction()
    {
        if(transform.localScale.x == 1)
        {
            isFacingRight = true;
        }
        else if(transform.localScale.x == -1)
        {
            isFacingRight = false;
        }
    }

    /// <summary>
    /// 移动
    /// </summary>
    private void Movement()
    {
        if (!isDead)
        {
            if (isFacingRight)
            {
                rigidBody.velocity = Vector2.right * movementSpeed;  
            }
            else
            {
                rigidBody.velocity = Vector2.left * movementSpeed;
            }
        }
    }

    /// <summary>
    /// 面向检测 (有两个可能性一是快到悬崖 二是撞到墙壁)
    /// </summary>
    private void FacingDetect()
    {
        if (isDead)
        {
            return;
        }
        //是否碰到地面或者墙壁 在一个圆圈内检测是否碰到相应的LayerMask
        isGrounded = Physics2D.OverlapCircle(groundCheck.transform.position,circleRadiu,ground);
        if(!isGrounded) //检测到快离开地面 回头
        {
            Filp();
        }
        else//检测虫子碰到了几个碰撞体 count大于0 就是撞墙了回头
        {
            int count = Physics2D.OverlapCollider(facingDetector, contact, new List<Collider2D>());
            if(count > 0)
            {
                Filp();
            }
        }
        

       
    }

    /// <summary>
    /// 碰到墙壁后翻转
    /// </summary>
    private void Filp()
    {
        Vector2 vector = transform.localScale;
        vector.x *= -1;
        transform.localScale = vector;

    }
    

}

其中 Physics2D.OverlapCircle 的unity 相关文档https://docs.unity.cn/cn/2022.3/ScriptReference/Physics2D.OverlapCircle.html

和 Physics2D.OverlapCollider 的unity 相关文档

https://docs.unity.cn/cn/2022.3/ScriptReference/Physics2D.OverlapCollider.html

注意设置上的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值