『功能项目』骑乘坐骑【22】

news2024/12/24 3:29:28

我们打开上一篇21项目优化的项目,

本章要做的事情是在召唤坐骑后的指定距离内点击骑乘即可乘坐坐骑

首先进入坐骑熊的预制体空间,将主角模型拖拽至坐骑身上并删除所有组件及标签

将子物体Player拖拽至其子级,父类删掉

将其Player隐藏

创建坐骑的动画控制器MountBearAC

创建参数IsIdle

设直线

设置返回线

将新建动画控制器MountBearAC拖拽至坐骑熊对象的动画控制器框选上

对坐骑熊增加一个NavMeshAgent组件,并修改标签为Player

(这里标签设置为Player的原因是当主角骑乘后会激活坐起身上隐藏的主角模型并隐藏本身主角Player,所以该标签设置为Player)

创建一个脚本:RidingMountMoving.cs

编写脚本:

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.AI;
using UnityEngine.EventSystems;
public class RidingMountMoving : MonoBehaviour{
    bool isInMount;
    Vector3 mountPos;
    Animator animator;
    GameObject playerObj;
    Transform mount;
    NavMeshAgent agent;
    Button callBtn;
    CameraCtrl cameraCtrl;
    void Start(){
        isInMount = false;
        animator = GetComponent<Animator>();
        playerObj = GameObject.Find("PlayerNormal(Clone)").gameObject;
        mount = GetComponent<Transform>();
        agent = mount.GetComponent<NavMeshAgent>();
        cameraCtrl = Camera.main.GetComponent<CameraCtrl>();
        callBtn = GameObject.Find
            ("Canvas/MountUI/Image/RideBtn").GetComponent<Button>();
        callBtn.onClick.AddListener(OnCallButton);
    }
    public void OnCallButton(){
        if (isInMount){
            animator.SetBool("IsIdle", true);
            isInMount = false;
            mountPos = transform.position;
            playerObj.transform.position = mountPos + Vector3.right * 2f;
            Camera.main.GetComponent<CameraCtrl>().player = playerObj.transform;
            transform.Find("Armature/Root_M/Spine1_M/Player").gameObject.SetActive(false);
            playerObj.transform.gameObject.SetActive(true);
            agent.speed = 3.5f;
        }
        else{
            if (Vector3.Distance(transform.position, playerObj.transform.position) < 5f){
                isInMount = true;
                GameObject.Find("PlayerNormal(Clone)").SetActive(false);
                transform.Find("Armature/Root_M/Spine1_M/Player").gameObject.SetActive(true);
                cameraCtrl.player = transform;
                animator.SetBool("IsIdle", false);
                agent.speed = 6.5f;
            }
        }
    }
    void FixedUpdate(){
        // 检查代理是否到达了目的地
        if (agent.pathStatus == NavMeshPathStatus.PathComplete &&
            agent.remainingDistance <= agent.stoppingDistance){
            // 到达目的地,停止跑步动画,播放停止动画
            animator.SetBool("IsIdle", true);
        }
    }
    void Update(){
        if (EventSystem.current.IsPointerOverGameObject())
            return;
        if (Input.GetMouseButtonDown(0)){
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit)){
                animator.SetBool("IsIdle", false);
                agent.SetDestination(hit.point);
            }
        }
    }
}

将脚本挂载至坐骑熊预制体上

优化:(让主角在骑乘坐骑时点击取消坐骑失效)

修改脚本:CallOrHideMount.cs

优化:(让主角在下坐骑时停止移动)

运行项目 - 点击召唤坐骑后骑乘效果

本篇做了前十篇文章的项目优化,接下来还需做以下内容:

1.可拖动UI窗口

2.怪物集目标点巡航功能

3.隐藏怪物的生成

4.怪物I攻击范围内的主动攻击

5.掉落坐骑蛋的获取

6.异步传送转换场景

7.主城的Npc对话功能

以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。

具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2106309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI在台球助教系统中的应用与优化

随着科技的发展&#xff0c;AI技术在各个领域的应用越来越广泛。特别是在体育培训领域&#xff0c;AI的应用为传统教学方式带来了革命性的变化。对于热爱台球运动的朋友来说&#xff0c;台球助教系统无疑是一个令人兴奋的新工具。它利用先进的AI技术&#xff0c;为台球爱好者提…

vscode任务配置之tasks.json

目录 用途说明 用途1&#xff1a;配置编译任务 1.生成task.json文件 2.编辑task.json文件 3.运行任务 用途2&#xff1a;给一个脚本文件配置任务 1.生成task.json文件 2.编辑task.json文件 3.运行任务 用途说明 在VS Code中配置任务主要涉及到task.json文件的编辑&am…

训练 GAN 之技巧

GAN 是以很难训练而闻名的&#xff0c;我们接下来介绍一些其中的原因和训练GAN的小技巧。 首先&#xff0c;我们回顾一下判别器和生成器都在做些什么。判别器的目标是要分辨真的图片与产生 出来的假图片间的差异&#xff0c;而生成器在做的事情是要去产生假的图片&#xff0c;骗…

RK3588平台开发系列讲解(显示篇)图像的宽高和跨距

文章目录 一、图像宽、高二、图像跨距沉淀、分享、成长,让自己和他人都能有所收获!😄 “图像的基本组成单元为像素,对视频图像的存储,实际上是对像素的存储”。基于图像位深,我们可以确定存储一个像素所需的字节数,下面,可以开始“指导”计算机如何定量读取图像数据了…

图文解析保姆级教程:Postman专业接口测试工具的安装和基本使用

文章目录 1. 引入2. 介绍3. 安装4. 使用 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记16——请求&#xff08;postman、简单参数、实体参数、数组集合参数、日期参数、Json参数、路径参数&#xff09;想要详细了解更多有关请求各种参数介绍的知识可以移步此篇笔记。 1…

存储卡恢复:如何从存储卡恢复已删除的照片/视频?

如何使用免费软件从存储卡恢复已删除的照片/视频&#xff1f; 在我们的指南中&#xff0c;从 Android 手机的微型 SD 卡恢复已删除的文件是免费的。以下是恢复所需的信息。 一台装有 Windows 操作系统的计算机&#xff1b;一个存储卡适配器&#xff08;必需&#xff0c;因为如…

配置IPv6 over IPv4的手动隧道和自动隧道

正文共&#xff1a;888 字 9 图&#xff0c;预估阅读时间&#xff1a;1 分钟 随着IPv6的不断普及&#xff0c;现在家庭宽带基本上都能获取到IPv6地址了&#xff0c;介于此种场景&#xff0c;我们介绍了比较常见的GRE over IPv6的业务配置&#xff08;配置GRE over IPv6隧道&…

基于SSM+MySQL的民宿推荐系统

系统背景 随着经济发展&#xff0c;各类电子产品普及千家万户。网民数量不断增加&#xff0c;网络显然已经成为了人际交流的重要形式。回顾近一个世纪的科技发展史&#xff0c;各类新的信息发布手段均随着时代洪流更新。旧时代是广播&#xff0c;报纸&#xff0c;电视&#xff…

读软件设计的要素01概念

1. 概念 1.1. 一个软件&#xff0c;从运行于手机上的最小程序到大型的企业系统&#xff0c;都是由概念组成的&#xff0c;每个概念都是独立的功能单元 1.2. 软件中的可用性问题&#xff0c;经常可以追溯到其底层概念 1.2.1. 概念帮助识别软件的不可用性 1.3. 概念都是以同样…

后端发送数据成功,前端也接收成功,但是显示不出来

提示&#xff1a; shouye.vue:128 [Vue warn]: Property "LiuyanData" was accessed during render but is not defined on instance. at <PopularPets onVnodeUnmountedfn<onVnodeUnmounted> refRef< Proxy(Object) {getdata: ƒ, getLiuyan: ƒ, …} …

武汉凯迪正大—氧化锌避雷器带电测试仪 氧化锌避雷器阻性电流测试仪

产品概述 武汉凯迪正大KDYZ-201氧化锌避雷器测试仪是用于检测氧化锌避雷器电气性能的专用仪器&#xff0c;该仪器适用于各种电压等级的氧化锌避雷器的带电或停电检测&#xff0c;从而及时发现设备内部绝缘受潮及阀片老化等危险缺陷。 仪器操作简单、使用方便&#xff0c;测量…

经济下行,这4家AGV巨头却逆势扩产

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 在全球经济普遍面临下行压力的微妙时刻&#xff0c;当众多企业纷纷收缩战线、谨慎前行时&#xff0c;自动引导车&#xff08;AGV&#xff09;行业却悄然掀起了一股扩产浪潮。 四家行业…

2024国赛数学建模备战-数学建模思想方法大全及方法适用范围

第一篇&#xff1a;方法适用范围 一、统计学方法 1.1 多元回归 1、方法概述&#xff1a; 在研究变量之间的相互影响关系模型时候&#xff0c;用到这类方法&#xff0c;具体地说&#xff1a;其可以定量地描述某一现象和某些因素之间的函数关系&#xff0c;将各变量的已知值带…

C3与C2f模块介绍与代码

C3与C2f模块介绍与代码 微信公众号&#xff1a;幼儿园的学霸 目录 文章目录 C3与C2f模块介绍与代码目录简介CSP/C3模块概述C2f模块概述C3与C2f结构对比参考资料 简介 顺序:CSPNet->C3->C2f C2 module refers to the CSP (Cross Stage Partial) Bottleneck with 2 convol…

【LabVIEW学习篇 - 18】:人机界面交互设计02

文章目录 错误处理函数简单错误处理器通用错误处理器清楚错误合并错误错误代码至错误簇转换查找第一个错误 鼠标指针 错误处理函数 在LabVIEW中&#xff0c;是通过错误输入簇和错误输出簇来传递错误信息&#xff0c;可以将底层错误信息传递到上层VI。设计人员需要对不同程度的…

Air780E低功耗4G模组硬件设计手册01

本文主要介绍了Air780E的硬件设计中的的应用接口部分。 一、主要性能 Air780E模块功能框图&#xff1a; 模块型号列表&#xff1a; 模块主要性能&#xff1a; *注: 模组工作在-40C&#xff5e;-35C或75C&#xff5e;85C温度范围时&#xff0c;模组可以正常工作&#xff0c;但…

基于51单片机的车距离警示灯proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1tBIqTY4cCK38Z_xRKrq83g 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

pyqt fromlayout 布局中间空隙问

问题&#xff1a;当采用 form layout 布局时候&#xff0c;在qt designer 设计界面&#xff0c;如果把中间移除会在布局中间占用位置&#xff08;图1、图2&#xff09;&#xff0c;需要把后续空间向前移动后保存&#xff08;图3&#xff09;&#xff0c;在将界面文件打开即显示…

基于STM32景区环境监测系统的设计与实现(论文+源码)

1系统方案设计 根据系统功能的设计要求&#xff0c;展开基于STM32景区环境监测系统设计。如图2.1所示为系统总体设计框图。系统以STM32单片机作为系统主控模块&#xff0c;通过DHT11传感器、MQ传感器、声音传感器实时监测景区环境中的温湿度、空气质量以及噪音数据。系统监测环…

中国各省会、地级市到杭州球面距离的数据

环境规制是一系列政策措施&#xff0c;旨在解决环境问题、保护生态环境&#xff0c;并推动低碳可持续发展。这些措施包括法律法规、行政命令和经济激励等&#xff0c;目的是减少企业和个人对环境的负面影响。环境规制强度是衡量这些政策措施严格程度的指标&#xff0c;通常通过…