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

2024-09-05 11:04
文章标签 项目 功能 22 骑乘 坐骑

本文主要是介绍『功能项目』骑乘坐骑【22】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们打开上一篇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

这篇关于『功能项目』骑乘坐骑【22】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138777

相关文章

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll