(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力

一.写脚本pysicscheck拖拽添加到人物身上

二.检测内容

1.是否在地面,如果在,跳跃,不在则不允许跳跃
对应人物存在组件capsule collider,在人物接触到地面后会产生碰撞(包括碰撞地面和墙面,此时跳跃检测的是地面)

地面检测方法

Physics2D.OverlapCircle

Declaration
public static Collider2D OverlapCircle(Vector2 point, float radius, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

layerMask: Filter to check objects only on specific layers.

圆是由其在世界空间中的中心坐标和半径定义的。可选的 layerMask 允许测试只检查特定层上的对象

1)查看人物中心点位置,由于人物的pivot点设置在脚底,刚好就是在对是否接触地面时候的检测位置,故函数中point是transform.position
(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第1张图片

2)对于半径,通过设置public变量在编辑器中调整检测范围

3)对于结构体layermask需要添加我们需要的检测图层

pysicscheck脚本内容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PysicsCheck : MonoBehaviour
{
    public bool isGround;
    public float checkRadius;
    public LayerMask groundLayer;
    //持续不断的进行物理检测
    private void Update()
    {
        Check();
    }
    public void Check()
    {
        isGround=Physics2D.OverlapCircle(transform.position,checkRadius,groundLayer);
    }
}

①可以看到添加过public实例后的layermask下拉框内容如下,没有需求的层(地面层,platdorm)

(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第2张图片
②添加地面层

(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第3张图片

(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第4张图片
将platform设置为Ground层

(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第5张图片

③设置给人需要检测的碰撞层

(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第6张图片

设置好检测半径0.几就可以测试,落地上就true,不落 F,从而通过访问是否落地来限制跳跃次数。

4)在playercontroller中添加代码完成人物跳跃的限制

组件,代码之间的互相访问
①创建组件对应的类型的变量
②通过getcomponent获得组件

private PysicsCheck physicsCheck;

physicsCheck = GetComponent<PysicsCheck>();

如此就可以获取到在物理检测脚本中创建的所有公开变量
完成判定

 private void Jump(InputAction.CallbackContext obj)
    {
        if (physicsCheck.isGround)
        {
            rb.AddForce(transform.up * JumpForce, ForceMode2D.Impulse);
        }
        
    }

绘制较低碰撞范围的检测可以用OnDrawGizemosSelectsed()在dizemos中绘制一个小范围加入到检测锚点的周围减小半径检测带来的偏差。

2.敌人也需要检测周围的物理环境包括

ps 人物材质的变化,更改摩擦力

1.创建一种光滑的材质,类型如红圈所示,调整摩擦力为0
(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第7张图片

2.为人物碰撞添加该材质,就不会猛撞到墙上粘住

(M)unity制作组件完成物理环境监测 落地方可起跳、人物材质变化从而减小人物摩擦力_第8张图片

你可能感兴趣的:(unity,材质,游戏引擎)