『功能项目』宠物的召唤跟随【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

相关推荐
code bean20 分钟前
【C#】ForEach vs foreach
开发语言·c#
OpenSeek1 小时前
【设计模式】面向对象的设计模式概述
设计模式·c#·设计原则
码观天工3 小时前
10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
c#·.net·继承·思维·面相对象
FAREWELL0007513 小时前
C#核心学习(一)面向过程与面向对象编程---初识类和对象
学习·c#·面向对象
yngsqq14 小时前
Visual Studio中创建和配置设置文件(Settings.settings) - 详细步骤指南——待调试
c#
DanmF--16 小时前
用C#实现UDP服务器
服务器·网络协议·udp·c#
观无16 小时前
.NET开发基础知识1-10
c#
且听风吟ayan17 小时前
leetcode day33 738+343
leetcode·c#
Tatalaluola18 小时前
【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落
学习·unity·c#·游戏引擎
乌拉_乌拉_乌拉18 小时前
C# string字符串介绍
开发语言·c#