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

相关推荐
向宇it4 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
向宇it5 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
坐井观老天10 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
pchmi12 小时前
C# OpenCV机器视觉:模板匹配
opencv·c#·机器视觉
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭14 小时前
C#都可以找哪些工作?
开发语言·c#
boligongzhu16 小时前
Dalsa线阵CCD相机使用开发手册
c#
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
sukalot1 天前
windows C#-命名实参和可选实参(下)
windows·c#
小码编匠1 天前
.NET 下 RabbitMQ 队列、死信队列、延时队列及小应用
后端·c#·.net