『功能项目』骑乘坐骑【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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下