关于背包问题的相关思考
前述这里写一点我对最近写到的背包算法的想法,觉得比较巧妙所有就准备写在博客里
这里推荐几个比较好的博客和视频,学到了很多东西
CSDN
01背包和完全背包算法之动态规划
BiliBili
【动态规划】背包问题
基础0-1背包问题描述对于一堆物体,每个物体就只有一个,每个物体有它的体积与价值,问一个体积有限的背包怎么能够拿到价值最高的物体
问题分析其实本质上还是动态规划问题,我们假设有一个二维数组dp[i][j],其中的i对应在只考虑前i个物体的情况,其中的j可以抽象理解成考虑前j个背包每个单位体积,那么对应的值就是在只考虑前i个物体,考虑前j个背包的体积的最大价值。这么一说,那么这个问题就简单了,只需要每次更新要不要加入这个物体就好了。这么说肯定很抽象,那么我们来举个例子。
假如有一堆物体,将它们放到一个容量为10的背包中,物体的相关属性如下:
物品编号
体积
价值
0
2
3
1
3
4
2
4
4
3
6
6
那么就会有这么一个算法过程:
i\j
0
1
2
3
4
5
6
7
8
9
10
0
0
0
3
3
3
3
3
3
3
3 ...
用Unity实现三维obj文件的体素化
前言使用unity完成了obj的简单体素化,可以自定义体素精度。
效果示例
算法的大体思路就是把模型缩小到自己设置的体素网格坐标系下,然后计算出每个三角网格面的包围盒,把每个包围盒与自己体素网格相比较,根据值来计算是否应该在这个体素格中生成体素,设置三维bool数组来标记生成的位置。
源码示例:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215 ...
Unity关于AB包的学习
前言在Unity中也许大家都听过AB包这种加载资源的方法,但是可能都觉得很难,然后就不去学了,觉得自己写一个小项目怎么都用不到AB包,但是实际上并不是这样,AB包在个人项目中也会有很有趣的应用。
Unity的AB包详解概念解释首先,Unity的AB包全称是AssetBundle,是Unity提供的一个用于储存资源的压缩包。
Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载和卸载AB包,使其有选择地加载内容。
AB包与Resources的对比区别
AB包
Resources
资源分布
可以分布在不同的包中
只能生成一个大包
存储位置
自定义路径
只能存在于Resources文件夹中
压缩方式
压缩方式可选(LZMA,LZ4)
资源全部压缩为二进制
更新方式
可以支持后期更新
打包后变为可读不可后期更新
AB包的特性
不可重复加载,只有卸载之后次啊可以再次加载
不可打包代码,AB包可以存储大部分的Unity资源,但是不可以直接存储C#脚本,脚本的热更新可以用Lua或者 ...
手指跳舞模拟器————一款支持DIY的受苦游戏
作品基本介绍
分享链接: http://pan.dlut.edu.cn/share?id=ffmfkuu9dpz4
视频链接:https://www.bilibili.com/video/BV1NT421Q7EG/?spm_id_from=333.999.0.0&vd_source=21ef5dd001904577c706b7897134152a
这是一款可以支持自定义关卡即DIY的小游戏,由Unity制作,这里我会写一下相对重要的功能实现。
作品拆解DIY部分实现首先是支持DIY的部分,这部分其实非常简单,只需要知道unity的streamingAsset文件夹在构建打包完作品之后里面的内容不会改变即可。实际原理就是在这个文件中做一个按照某项规则创建的文件,可供程序的关卡部分读取实现即可。
123456789101112131415161718192021222324252627public class CSVReading : MonoBehaviour{ private void OnEnable() { string f ...
Unity细节效果实现
前言用来记录一些unity的好看的效果实现哈哈,话不多说,开撸
流动虚线框用四个LineRender来实现流动虚线框的效果,看起来很简单,但是如果没做过确实有点无从下手。
先看效果:
首先准备一个
这样的一节的虚线png文件,然后创建一个这样的材质:
然后把材质设置成:
(注意贴图间的拼接模式)
要注意Shader的选择,然后把png拖进纹理中
然后按以下的图来完成布局:
最后把代码写进脚本
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253using UnityEngine;public class LineCtrler : MonoBehaviour{ [SerializeField] public LineRenderer lineRenderer1; [SerializeField] public LineRenderer lineRenderer2; [SerializeField] public L ...
Spine-Unity的使用
前述这是我第一次在unity中使用spine导入的动画而总结出的各个注意事项吧,哎,我能搜到的资料太少了,只能自己慢慢摸索,希望写的这一篇博客可以帮助有需要的人。(使用的spine为2D)
关于导入unity包和Spine导出文件的问题这是一些前置工作,当时搜教程都没有很详细的介绍,导致搞了好久,甚至反反复复导入了好几次。
导入unity关于Spine的包
Spine关于Unity包的官方地址:https://zh.esotericsoftware.com/spine-unity-download/
在这一步一定要知道自己要使用的Spine软件的版本,根据前两位来选择相应的unity包,就比如3.8.~,在包中就要选择spine-unity 3.8。
之后下载了之后会得到一个unity包,直接拖入unity即可。
Spine导出文件的选择在Json和二进制之间,我更推荐二进制,更轻量,但是都是一个步骤,这里按二进制来教学。
在点击导出按钮之后按照这个选项,注意后缀,其实是unity能够识别的就行。
输出时选中预乘Alpha,在图集中也是注重后缀
之后导出一般就是图集和两个文件,后 ...
Unity实用代码技巧
前述总结的一些Unity使用的小技巧
2D关于物体的转向问题123456789101112131415public void FilpTo(Transform target){ if(target != null) { Vector3 pos = transform.localScale; if (target.position.x < transform.position.x) { transform.localScale=new Vector3(-1,pos.y,pos.z); } else { transform.localScale = new Vector3(1,pos.y,pos.z); } }}
关于人物的碰撞检测相关检测图层的方法:
1234567public static class LayerMaskUtility ...
Unity基本框架
前述总结的一些Unity的常用工具集
UIS这是我根据网上的一些框架自己总结写出的小框架,感觉比较好用。
UIManager123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 ...
算法学习(cpp)
前述最近要准备笔试,所以对之前学过的算法都复习一遍(可恶,手都已经生了),连最基本的链表反转都要想好一会,最近都会在这个博客上更新这些内容,应该会分类每一个题目的范围,也算是对自己的一个鞭策吧。
同时本文的所有的算法均是出自LeetCode且是由C++编写的,所以酌情观看。
链表链表可以说是C++比较独特的算法题目了,当然是先温习这个部分。
链表反转easy
LeetCode题目:https://leetcode.cn/problems/reverse-linked-list/description/
这道题目可以说是非常的经典了,而它的实现方法也有很多种。首先是最常见的用三个指针来进行操作:
12345678910111213141516171819202122232425/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} ...
学习FSM有限状态机有感(二)
这里有我对于FSM的第二种理解的写法,也是我第一次参加GameJam的懵懵懂懂的用法,首先这个FSM的中心是在一个FSM的代码中,而不是用泛型扩散到其他的代码中。也就是说,你每一个物体使用状态机就要重写一遍FSM来具体应用这个FSM。
先创建一个接口,用来给每一个状态限制,同时方便状态机来用字典存放每一个状态的切换
1234567public interface IState{ void OnEnter(); void OnUpdate(); void OnFixedUpdate(); void OnExit();}
创建一个枚举类型用来存放每一个所选对象需要的各种类型
123456public enum StateType{ A, B, C}
然后就要开始写FSM的主体代码
123456789101112131415161718192021222324252627282930313233public class FSM : MonoBehaviour{ private IState ...