『功能项目』宠物的召唤跟随【79】

我们打开上一篇78装备齐全特效的项目,

本章要做的事情是实现宠物跟随功能

首先创建一个宠物召唤界面

重命名按钮组件为CallPetBtn

重命名Image组件为PetExample

宠物资源所在资源文件夹

在主角预制体中的身后位置设置一个宠物跟随点

创建宠物动画控制器

拖拽至Pet01预制体动画控制器框选

创建脚本:PetFollowTarget.cs

实现宠物到达目标点就播放Idle动画,未到目标点就朝着目标点前进

cs 复制代码
using UnityEngine;
public class PetFollowTarget : MonoBehaviour{
    Transform target; 
    float speed = 2f; 
    Animator animator;
    void Start(){
        target = GameObject.Find("PlayerNormal/PetsSmallPos").gameObject.transform;
        animator = GetComponent<Animator>(); 
    }
    void Update(){
        if (target != null){
            Vector3 direction = target.position - transform.position;
            float distance = direction.magnitude;
            if (distance > 0.1f){
                animator.SetBool("IsMoving", true);
                transform.LookAt(target.position);
                transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
            }
            else{
                animator.SetBool("IsMoving", false);
            }
        }
    }
}

修改脚本:CallOrHidePet.cs

cs 复制代码
using UnityEngine;
using UnityEngine.UI;
public class CallOrHidePet : MonoBehaviour{
    Button callBtn;
    GameObject petPrefab;
    GameObject petInstance;
    void Start(){
        petPrefab = Resources.Load<GameObject>("Prefabs/Pets/Pet01Small");
        callBtn = transform.Find("Image/CallPetBtn").GetComponent<Button>(); ;
        callBtn.onClick.AddListener(OnCallButtonClick);
    }
    public void OnCallButtonClick(){

        if (petInstance == null){
            petInstance = Instantiate(petPrefab,
                GameObject.FindWithTag("Player").transform.position + new Vector3(-2f, 0, -1f),
                Quaternion.identity);
            petInstance.AddComponent<PetFollowTarget>();
        }
        else{
            if (GameObject.Find("PlayerNormal") == null)
                return;
            else
                Destroy(petInstance);
        }
    }
    void OnDestroy(){
        Button callBtn = transform.Find("Image/CallPetBtn").GetComponent<Button>();
        if (callBtn != null)
            callBtn.onClick.RemoveListener(OnCallButtonClick);
    }
}

修改脚本:UIManager.cs

实现开关宠物界面及召唤关闭宠物

运行项目

本章做了实现了开关宠物UI界面,召唤取消宠物,宠物跟随主角身后Pos点的功能

接下来的文章内容:

1.宠物随机攻击的巨型化显示

2.窗口可拖拽脚本

3.点击名称寻找地点功能

4.隐藏怪物的生成

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

6.掉落坐骑蛋的获取

7.异步传送转换场景

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

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

water1024的个人空间-water1024个人主页-哔哩哔哩视频 (bilibili.com)https://space.bilibili.com/1050927514?spm_id_from=333.1007.0.0

相关推荐
魔法阵维护师1 小时前
从零开发游戏需要学习的c#模块,第三十五章(打包发布 —— 让别人玩你的游戏)
学习·游戏·c#
iCxhust1 小时前
C# 程序,实现二进制文件十六进制查看器,支持按行定位
开发语言·单片机·嵌入式硬件·c#·微机原理·8086最小系统·8088单板机
Xin_ye100862 小时前
C# 零基础到精通教程 - WPF 专题二:数据绑定与 MVVM
开发语言·c#·wpf
Xin_ye100862 小时前
C# 零基础到精通教程 - WPF 专题一:WPF 入门与 XAML 基础
c#·wpf
兆。2 小时前
LangChain文档处理集成指南:面向知识管理开发者
开发语言·langchain·c#
_oP_i2 小时前
105、word 出现 {TOCO“1-2“HZ}
开发语言·c#·word
影寂ldy3 小时前
C#构造函数 + 析构函数
开发语言·c#
影寂ldy19 小时前
C# 类和对象
开发语言·c#
z落落21 小时前
C# 构造函数(无参/有参/重载/this)+析构函数(终结器)|GC 垃圾回收
java·开发语言·c#
z落落21 小时前
C# 字段与属性(get/set访问器、三种属性写法、只读属性)+属性拦截例子(get动态计算 + set数据校验)
开发语言·c#