当前位置: 首页 > news >正文

Unity学习part3

此为b站视频【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p=55&share_source=copy_web&vd_source=6e7a3cbb802eb986578ad26fae1eeaab的笔记

1、反向动力学

打开ik处理

public class PlayerMoveController : MonoBehaviour
{
    public Transform target;
    private Animator animator;
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //水平轴
        float horizontal = Input.GetAxis("Horizontal");
        //垂直轴
        float vertical = Input.GetAxis("Vertical");
        //向量
        Vector3 dir = new Vector3(horizontal,0, vertical);

        //当用户按下方向键
        if (dir != Vector3.zero)
        {
            //面向向量
            transform.rotation = Quaternion.LookRotation(dir);
            //播放跑步动画
            animator.SetBool("isRun", true);
            //朝向前方移动
            transform.Translate(Vector3.forward * 2 * Time.deltaTime);
        }
        else {
            //播放站立动画
            animator.SetBool("isRun", false);
        }

        //随时获取test参数并打印出来
        //Debug.Log(animator.GetFloat("Test"));
    }

    void leftfoot()
    {
        //可以在这边播放音效或者添加特效
        Debug.Log("左脚");
    }

    void rightfoot()
    {
        Debug.Log("右脚");
    }

    //Ik写到这个方法
    private void OnAnimatorIK(int layerIndex)
    {
        //设置头部IK
        animator.SetLookAtWeight(1);
        animator.SetLookAtPosition(target.position);
        //设置右手IK
        animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1);
        //旋转权重
        animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
        //设置右手IK
        animator.SetIKPosition(AvatarIKGoal.RightHand, target.position);
        animator.SetIKRotation(AvatarIKGoal.RightHand, target.rotation);
    }
}

 2、unity导航组件

用于寻路。unity 2022需要窗口-包管理器-Unity注册表-AI Navigation-安装。安装后,菜单栏选择Window-AI-Navigation(Obsolete)-Object标签下,有Navigation Static勾选,下面就和up视频中一样了(弹幕),添加组件之后点击bake获取烘焙结果

玩家需要添加nav mesh agent组件 ,代理类型可以添加不同体型半径高度的体积

public class AgentMove : MonoBehaviour
{
    private NavMeshAgent agent;
    // Start is called before the first frame update
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    // Update is called once per frame
    void Update()
    {
        //如果按下鼠标
        if (Input.GetMouseButtonDown(0)) { 
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                //点击位置
                Vector3 point = hit.point;
                agent.SetDestination(point);
            }
        }
    }
}

动态障碍物,勾选切割之后会动态的重新计算导航地图。移动阈值是指移动多少时会重新开始计算导航地图。静止时间是指障碍物在移动时即使到达移动阈值任不会重新计算导航地图,而是要等待障碍物停止移动后多少秒才重新开始计算。取消仅在静止时切割的话,障碍物移动时导航地图实时计算,消耗高

 

相关导航因为版本更新需查询其他内容 

nav mesh agent的区域遮罩可以和区域成本结合起来,让玩家选择性的无法通过某个区域

 

相关文章:

  • 云计算——AWS Solutions Architect – Associate(saa)7.放置群组
  • 【LeetCode Hot100 普通数组】最大子数组和、合并区间、旋转数组、除自身以外数组的乘积、缺失的第一个正整数
  • 【Black Mesa】黑山起源用服务器开服多人联机教程
  • 2025年2月15日(虚拟环境-deepseek)
  • 什么是BlockingQueue?什么是阻塞队列?它的特点是什么?阻塞队列的生产方法和消费方法有什么?
  • 最佳的出牌方法
  • PbootCMS增加可允许上传文件类型,例如webp、mov等文件格式扩展
  • [小M全新力作-修稿]PFC_LLC电源设计全攻略:从原理学习到SIMULINK仿真到EDA板实战,再到实物电源调试
  • 什么是元学习?
  • 算法思考:非0整数除法
  • 建造者模式构建对象
  • 电解电容的参数指标
  • 高频更新字段问题思路
  • 【C++】基础入门(详解)
  • CAS单点登录(第7版)9.属性
  • 关于Redis的主从复制(上)
  • 【大模型部署实战】Ollama如何保持模型常驻内存,或者显存,如何立刻释放
  • 前缀和(Prefix Sum)算法笔记C++
  • ROS1基础学习[记录b站阿杰]
  • 通用节流函数
  • 上海市第二十届青少年科技节启动:为期半年,推出百余项活动
  • 上海:到2027年,实现近海航线及重点海域5G网络高质量覆盖
  • 博物馆日|为一个展奔赴一座城!上海171家博物馆等你来
  • 著名心血管病学专家李国庆教授逝世,享年63岁
  • 七猫征文大赛颁出112万奖金,非遗题材作品斩获金奖
  • 广西壮族自治区党委常委会:坚决拥护党中央对蓝天立进行审查调查的决定