Unity实现动态更换程序待机图片

Unity实现动态更换程序待机图片

前言

在之前的公司做过一些项目,项目有过这样的需求:软件的待机界面需要可以动态更换,这样既可以方便调试人员的工作,又可以节省开发人员的工作时间,可谓是一举两得。在之前的公司做项目一直对这个功能未做整理,所以在这里整理一下。

步骤

1.在项目下建立StreamingAssets文件夹,并在此文件夹下建立Pictures文件夹,如下图所示:
在这里插入图片描述
2.在项目中搭建一个Image组件,用来显示加载出来的图片,如下图所示:
在这里插入图片描述
3.编写LoadImage.cs脚本,用来加载图片,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;

namespace IoadImages
{
   
    public class LoadImage : MonoBehaviour
    {
   
        public List<string> filePaths = new List<string>();
        private string LAN;
        void Start()
        {
   
            LAN = Application.streamingAssetsPath + "/Pictures";
            LoadThis();
        }
        /// <summary>
        /// 加载图片逻辑
        /// </summary>
        void LoadThis()
        {
   
            string imgType = "*.BMP|*.GIF|*.JPG|*.PNG";
            string[] ImageType = imgType.Split('|');
            for (int i = 0; i < ImageType.Length; i++
### 如何在Unity实现和使用行为树 #### 行为树简介 行为树是一种用于描述智能体决策过程的数据结构,在游戏中常用来管理角色的行为逻辑。通过组合不同的节点,可以创建复杂而灵活的行为模式。 #### 使用C#编程语言构建基础框架 为了在Unity里搭建一个简单的行为树模型,需先导入必要的命名空间并初始化`BehaviorTree`对象[^3]: ```csharp using BehaviorDesigner.Runtime.Tasks; using BehaviorDecorator.Runtime; public class SimpleBT : MonoBehaviour { private BehaviorTree behaviorTree; void Awake() { behaviorTree = GetComponent<BehaviorTree>(); } } ``` 此段代码设置了基本环境以便后续添加更多功能模块。 #### 设计具体任务节点 接下来定义一些具体的动作作为叶子结点,比如移动、攻击等,并将其连接成完整的路径。这里给出两个例子:“Idle”表示待机状态;“Patrol”代表巡逻活动[^1]: ```csharp // 定义idle行为类 public class Idle : Action { public override TaskStatus OnUpdate(){ Debug.Log("Character is idling..."); return TaskStatus.Success; // 或者TaskStatus.Running取决于设计意图 } } // 定义patrol行为类 public class Patrol : Action { public Transform[] waypoints; int currentWaypointIndex = 0; public override TaskStatus OnUpdate(){ if (Vector3.Distance(transform.position, waypoints[currentWaypointIndex].position) < .5f){ currentWaypointIndex++; if(currentWaypointIndex >= waypoints.Length) currentWaypointIndex = 0; } transform.LookAt(waypoints[currentWaypointIndex]); transform.Translate(Vector3.forward * Time.deltaTime); return TaskStatus.Running; } } ``` 上述实现了两种不同性质的动作,可以根据实际需求调整细节部分。 #### 组合高级复合节点 除了单一的任务外,还可以加入选择器(`Selector`)、序列化器(`Sequence`)这样的控制器来增强灵活性。例如当敌人处于视野范围内时切换至追击模式,否则继续执行默认行为链表[^2]。 ```csharp // 创建根节点下的子分支之一:追逐玩家 private Composite CreateChasePlayerComposite(){ Sequence sequence = new Sequence(); sequence.AddChild(new IsEnemyInSight()); sequence.AddChild(new ChaseTarget()); return sequence; } // 构造整个行为树结构 void BuildBehaviorTree(){ Selector root = new Selector(); root.AddChild(CreateDefaultBehaviorChain()); // 默认行为链条 root.AddChild(CreateChasePlayerComposite()); // 追逐玩家条件判断 behaviorTree.SetRoot(root); } ``` 这段程序片段展示了怎样把多个低级组件拼接起来形成更加复杂的整体架构。 #### 测试与优化 最后一步是在编辑器内配置好各个参数之后点击播放按钮观察效果是否符合预期。如果发现任何异常情况,则应该仔细排查问题所在并对相应的地方做出改进措施。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波波斯维奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值