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

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种广泛使用的编程语言,乘坐“保密电梯Java”的说法可以理解为学习和应用Java编程语言的过程。以下是对于这个说法的300字中文回答。 乘坐“保密电梯Java”可以拥有许多好处。首先,Java是一门功能强大、广泛应用的编程语言,具有很多优秀的特性。通过乘坐“保密电梯Java”,我们能够学习和掌握Java语法、面向对象编程等基础知识,以及Java的高级特性如多线程、异常处理、集合框架等。这将使我们能够开发出高质量、高效率的应用程序,并满足各种需求。 其次,乘坐“保密电梯Java”还可以帮助我们了解和应用Java的开发工具和框架。Java拥有众多流行的开发工具和框架,如Eclipse、IntelliJ IDEA、Spring等,通过乘坐“保密电梯Java”,我们可以学习和掌握这些工具和框架的使用方法,提高我们的开发效率和质量。 乘坐“保密电梯Java”还可以为我们提供丰富的经验和机会。Java是一门广泛应用的编程语言,几乎在各个领域都有应用。通过乘坐“保密电梯Java”,我们可以了解到Java在不同领域的应用场景,并有机会参与到实际的项目中。这将为我们积累宝贵的工作经验,并丰富我们的技术能力。 总之,乘坐“保密电梯Java”是一次有益的学习和成长之旅,通过学习和应用Java编程语言,我们能够掌握强大的编程能力,获取宝贵的工作经验,并提高我们的开发效率和质量。无论是作为初学者还是有经验的开发者,乘坐“保密电梯Java”都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值