【unity基础_Day13】 NavMeshComponent、Unity2D

一.NavMeshComponent

1.NavMeshSurface组件

(1)利用脚本在游戏中进行实时烘焙

 surface.BuildNavMesh();  //创建导航网格 进行烘焙

 (2)当有多个NavMeshSurface组件进行烘焙时,通过list列表的方式进行获取;同时,他们的AgentTypeID并不是二进制的形式,除了默认的Humanoid的ID默认为0

List<NavMeshSurface> surfaces = NavMeshSurface.activeSurfaces;
        foreach (var item in surfaces)
        {
            item.BuildNavMesh();
            print(item.agentTypeID);
        }

(3)给NavMeshSurface的AgentType确定时,可以使用NavMesh的AgenTypeId来赋值

        surface = gameObject.AddComponent<NavMeshSurface>();
        //通过NavMesh中的索引 来获取AgentType
        NavMeshBuildSettings build = NavMesh.GetSettingsByIndex(1);
        //将AgentType赋予到MeshSurface上 
        surface.agentTypeID = build.agentTypeID;

2.NavMeshModifier组件

对一个特定的对象,进行特定的导航网格类型设定

3.NavMeshModifierVolume组件

对一块区域进行特定的导航网格类型设定,通过值来进行设定

4.NavMeshLink

实现的效果与Off Mesh LInk类似

 5.实现动态烘焙

LocalNavMeshBuilder 可以挂在一个空物体上,会形成一个动态烘焙的包围盒,盒子之内的则可以形成动态烘焙

NavMeshSourceTag  在包围盒中的加上该脚本,即可以被认为需要动态烘焙的物体;同时也可以参与动态遮挡的效果,参与了其中的动态烘焙

 【实现跟随游戏对象实时渲染】

 二.AStar寻路

1.A*寻路的原理

寻找最优解

三.Unity2D

 1.Sprite Render 精灵渲染

 OrderInLayer 渲染顺序 数字越大越优先渲染

2.Rigidbody2D

 if (Input.GetKeyDown(KeyCode.Space) && jump==true)
        {
            //跳跃
            rig.velocity = Vector2.up * Time.deltaTime * speed;
            ani.SetBool("IsJump", true);
            //变为false 只能跳跃一次
            jump = false;
        }
        if (Input.GetKeyUp(KeyCode.Space))
        {
            ani.SetBool("IsJump", false);
        }


//检测碰撞进入
    void OnCollisionEnter2D (Collision2D c) 
    {
        if (c.gameObject.name == "Ground")
        {
            jump = true;
        }
    }

    //当碰撞离开的时候
    void OnTriggerExit2D(Collider2D c)
    {
        if (c.gameObject.name == "Obstacle")
        {
            //当游戏对象离开障碍物时的速度大于0,说明人物是向上走的,此时要关闭istrigger
            //反之,速度小于0的时候,则是往下走的
            if (rig.velocity.y > 0)
            {
                c.gameObject.GetComponent<EdgeCollider2D>().isTrigger = false;
            }
            else
            {
                c.gameObject.GetComponent<EdgeCollider2D>().isTrigger = true;
            }
        }
    }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值