【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏2(附项目源码)

news2024/11/17 22:34:01

本节最终效果演示

在这里插入图片描述

文章目录

  • 本节最终效果演示
  • 系列目录
  • 前言
  • 添加小动物
    • 模型
    • 动画
    • 动物AI脚本
    • 效果
  • 添加石头
    • 石头模型
    • 拾取物品
    • 效果
  • 源码
  • 完结

系列目录

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏1(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏2(附项目源码)
待续

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将探索如何制作一个类似于七日杀和森林的生存游戏。

本篇内容会比较多,我会分几篇来实现,感兴趣的可以关注一下,以免错过内容更新。

本节主要实现添加小动物,动画控制,简单的动物AI,添加可拾取物品,并实现简单的拾取功能。

添加小动物

模型

这里我找了个小鸭子,素材可以选择自己喜欢的
https://sketchfab.com/3d-models/duckling-5416523b63be499ba352a2566e652849
在这里插入图片描述
不知道导入的模型如何配置,可以看我这篇文章:
unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置

动画

在这里插入图片描述
Idles为新建的子状态机
在这里插入图片描述

动物AI脚本

public class AI_Movement : MonoBehaviour
{
    Animator animator; // 动画组件
    [Header("移动属性")]
    public float moveSpeed = 0.2f; // 移动速度
    Vector3 stopPosition; // 停止移动时的位置
    float walkTime; // 移动时间
    float walkCounter; // 移动计时器
    int walkDirection; // 移动方向
    bool isWalking; // 是否在移动
    
    [Header("待机属性")]
    public int stateCount;//状态数量
    float waitCounter; // 等待计时器
    float waitTime; // 等待时间
    private int nextState;//下一个状态
    [Header("动画状态属性")]
    private readonly int hashRandomWalk = Animator.StringToHash("isWalking");//行走状态属性
    private readonly int hashRandomIdle = Animator.StringToHash("Idle");//待机状态属性

    void Start()
    {
        animator = GetComponent<Animator>(); // 获取动画组件

        // 随机设置移动和停止的时间
        walkTime = Random.Range(3, 6);
        waitTime = Random.Range(5, 7);

        waitCounter = waitTime;
        walkCounter = walkTime;

        ChooseDirection(); // 随机选择方向
    }

    void Update()
    {
        if (isWalking) // 如果正在移动
        {
            animator.SetBool(hashRandomWalk, true); // 设置动画为奔跑状态
            walkCounter -= Time.deltaTime; // 计时器减少

            switch (walkDirection)
            {
                case 0:
                    transform.localRotation = Quaternion.Euler(0f, 0f, 0f); // 调整角度为正前方
                    transform.position += transform.forward * moveSpeed * Time.deltaTime; // 向前移动
                    break;
                case 1:
                    transform.localRotation = Quaternion.Euler(0f, 90f, 0f); // 调整角度为右方
                    transform.position += transform.forward * moveSpeed * Time.deltaTime; // 向前移动
                    break;
                case 2:
                    transform.localRotation = Quaternion.Euler(0f, -90f, 0f); // 调整角度为左方
                    transform.position += transform.forward * moveSpeed * Time.deltaTime; // 向前移动
                    break;
                case 3:
                    transform.localRotation = Quaternion.Euler(0f, 180f, 0f); // 调整角度为后方
                    transform.position += transform.forward * moveSpeed * Time.deltaTime; // 向前移动
                    break;
            }

            if (walkCounter <= 0) // 如果移动时间到达
            {
                stopPosition = new Vector3(transform.position.x, transform.position.y, transform.position.z); // 记录结束时的位置
                isWalking = false; // 停止移动

                // 停止移动
                transform.position = stopPosition;
                animator.SetBool(hashRandomWalk, false);
                nextState = Random.Range(0, stateCount);
                animator.SetInteger(hashRandomIdle, nextState);
                // 重置等待计时器
                waitCounter = waitTime;
            }
        }
        else // 如果没有在移动
        {
            waitCounter -= Time.deltaTime; // 等待计时器减少

            if (waitCounter <= 0) // 如果等待时间到达
            {
                ChooseDirection(); // 随机选择方向
            }
        }
    }

    public void ChooseDirection() // 随机选择方向
    {
        walkDirection = Random.Range(0, 4);
        isWalking = true;
        walkCounter = walkTime;
    }
}

挂载脚本和配置参数,记得添加刚体和碰撞体
在这里插入图片描述

效果

在这里插入图片描述

添加石头

石头模型

https://assetstore.unity.com/packages/3d/props/exterior/stones-40329
在这里插入图片描述
添加碰撞体和刚体
在这里插入图片描述

拾取物品

修改InteractableObject代码

public bool isPickUp;//是否可拾取

//拾取物品
public void PickUp(){
    Destroy(gameObject);
}

石头挂载脚本,配置参数
在这里插入图片描述
修改SelectionManager调用拾取功能

//拾取物品
void PickUpItem(Transform selectionTransform)
{
    var interactableObject = selectionTransform.GetComponent<InteractableObject>();
    //拾取物品
    if (Input.GetKeyDown(KeyCode.E) && interactableObject.isPickUp)
    {
        interactableObject.PickUp();
    }
}

效果

在这里插入图片描述

源码

源码不出意外的话我会放在最后一节

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1407362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卓振江:我的大数据能力提升之路 | 提升之路系列(二)

导读 为了发挥清华大学多学科优势&#xff0c;搭建跨学科交叉融合平台&#xff0c;创新跨学科交叉培养模式&#xff0c;培养具有大数据思维和应用创新的“π”型人才&#xff0c;由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能&#xff0c;以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统&#xff1a;综合 Perl 档案网络 (CPAN) 提供了超过 25,0…

【江科大】STM32:MPU6050介绍

文章目录 MPU6050介绍结构图MPU6050参数硬件电路模块内部结构框图数据帧格式寄存器地址 MPU6050介绍 MPU6050是一个6轴姿态传感器&#xff0c;可以测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;通过数据融合&#xff0c;可进一步得到姿态角&#xff0c;常应用于平衡…

maven配置阿里镜像源

在用户设置settings.xml文件里找到mirrors配置部分&#xff0c;大概在146行&#xff0c;添加如下配置&#xff1a; <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</u…

防火墙子接口配置

目录 拓扑需求 配置DMZ区域配置IP 总公司IP配置生产区办公区 总公司配置子接口网关生产区网关办公区网关 配置安全策略&#xff08;trust to DMZ&#xff09; 测试 拓扑 需求 配置总公司区域配置DMZ区域配置总公司区域到DMZ区域互通&#xff08;trust to DMZ&#xff09; 配置…

基于springboot+vue的学科竞赛管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

实时渲染 -- 几何(Geometry)

几何表示&#xff08;Geometry Representation&#xff09; 隐式表面&#xff08;Implicit Surface&#xff09; 一个函数定义一个隐式几何 f(x,y,z)0。​ 容易判断一个点是在几何体内部&#xff08;f<0&#xff09;还是外部&#xff08;f>0&#xff09; 显式表面&…

【C++】位图+布隆过滤器

位图布隆过滤器 1.位图2.布隆过滤器 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 1.位图 问: 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 可能你会想到下面这几种方式&#…

分享多种vcruntime140_1.dll丢失修复办法,vcruntime140_1.dll文件下载

vcruntime140_1.dll是Windows操作系统中的一个重要系统文件&#xff0c;它与C运行库相关。当计算机上缺少或损坏了vcruntime140_1.dll文件时&#xff0c;可能会导致一系列问题和错误。出现这文件错误&#xff0c;应该很多小伙伴都会想到重新下载vcruntime140_1.dll&#xff0c;…

uniapp微信小程序图片上传功能实现,页面显示文件列表、删除功能

uniapp小程序图片上传功能效果预览 一、template 页面结构 <view class"upload-box"><view class"upload-list"><view class"upload-item" v-for"(item,index) of fileList" :keyindex><image class"img…

2024年可能会用到的几个地图可视化模板

前言 在数字化的过程中&#xff0c;数据可视化变得越来越重要。用户喜欢通过酷炫的视觉效果和直观的数据展示来理解数据。可视化地图组件是数据可视化的重要组成部分。这些地图组件提供多样化的效果&#xff0c;能够更好地展示数据的关系和地理分布&#xff0c;直观地将数据与…

制图新手首选!6款在线软件,让制图变得简单易学!

1. 即时设计 即时设计是一种国内在线UI设计工具&#xff0c;专注于UI设计领域&#xff0c;支持多人合作。即时设计是一种年轻的UI设计工具&#xff0c;前景广阔。UI设计工具的即时设计支持各种主流格式文件的引入&#xff0c;可以很容易地从其他软件转移。即时设计作为新一代U…

ubuntu22.04安装filebeat报错解决

1、查看报错 journalctl -u filebeat 或者 filebeat -c /etc/filebeat/filebeat.yml找到报错信息 runtime/cgo: pthread_create failed: Operation not permitted 2、解决报错 在filebeat.yml配置文件添加如下配置&#xff0c;重启filebeat seccomp:default_action: allow…

生命在于折腾——WeChat机器人的研究和探索

一、前言 2022年&#xff0c;我玩过原神&#xff0c;当时看到了云崽的QQ机器人&#xff0c;很是感兴趣&#xff0c;支持各种插件&#xff0c;查询游戏内角色相关信息&#xff0c;当时我也自己写了几个插件&#xff0c;也看到很多大佬编写的好玩的插件&#xff0c;后来因为QQ不…

Java零基础学习19:集合

编写博客目的&#xff1a;本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴&#xff0c;方便后续回忆和查找相关知识点&#xff0c;不足之处恳请各位有缘的朋友指正。 一、集合和数组的对比 数组和集合很相似&#xff0c;但集合只能存储引用数据类…

3W Star 网易云音乐第三方开源 API 仓库因侵权被要求删除

NeteaseCloudMusicApi是一个使用Node.js编写的非官方网易云音乐API&#xff0c;用于获取网易云音乐平台的歌曲信息。该项目是完全开源的&#xff0c;在GitHub上获得了超过3万的star。 根据公开信息&#xff0c;NeteaseCloudMusicApi的主要目的是整理网易云音乐公开的网页接口&a…

SSL证书是什么,有哪些作用

SSL证书是什么&#xff1f; SSL证书 是一种提供SSL协议的证书&#xff0c;通过在客户端浏览器与WEB服务器之间建立一条SSL安全通道&#xff0c;对网络传输数据进行加密&#xff0c;防止数据被截取或窃听。一份SSL证书包括一个公共密钥和一个私用密钥&#xff1a;公共密钥主要用…

红队视角下的公有云基础组件安全(二)

前言 我们已经发过一篇红队视角下的公有云基础组件安全的文章&#xff0c;这篇是对上一篇内容的补充&#xff0c;主要为国外公有云如AWS、Google Cloud、Azure。 本文主要从红队视角讲述公有云基本服务中一些因配置问题产生的安全风险。 目录 ● 云存储 ● 云计算 ● 云网…

【C++记忆站】类和对象(三)

文章目录 再谈构造函数构造函数赋值并非初始化初始化列表explicit关键字 static成员概念特性一、静态成员为所有类对象所共享&#xff0c;不属于某个具体的对象二、静态成员变量必须在类外定义&#xff0c;定义时不添加static关键字三、静态成员函数没有隐藏的this指针&#xf…

19.云原生CICD之ArgoCD入门CD过程实战

云原生专栏大纲 文章目录 ArgoCDArgoCD 简介GitOps介绍Argo CD 的工作流程argocd和jinkens对比kustomize介绍ArgoCD和kustomize关系 安装argocdargocd控制台介绍首页应用创建表单SYNC OPTIONS&#xff08;同步选项&#xff09;SYNC POLICY&#xff08;同步策略&#xff09; 应…