- 博客(153)
- 资源 (3)
- 收藏
- 关注
原创 Unity百度地图,支持PC,Android,iOS,支持添加模型,支持卫星图,街道图
目前国内支持Unity的地图只有腾讯地图,但是腾讯地图只有两个月的试用时间,而且相对百度地图,腾讯地图确实有点拉跨,无奈只能自己写地图了**地图原理基于墨卡托坐标,每个经纬度在Unity中都是固定的世界坐标,在地图中添加模型只需要将经纬度转成世界坐标,再把模型设置到位置即可,地图有缓存机制,默认最大容量500MB,可以自行设置,项目刚刚写完出版,有BUG在所难免,发现BUG欢迎留言**github: [https://github.com/achonor/UnityBaiduMap](https://g
2021-01-14 22:03:14 4547 31
原创 计算直线和平面的交点
平面的法向量N和平面上点P1可以确定一个平面直线的方向向量N1和直线上一个点P0确定一条直线已知P0不在平面上,计算直线和平面的交点P2很容易理解,向量P0P1和向量P0P2在平面法线上的投影长度相等,即Dot(P0P1, N)等于Dot(P0P2, N)还有向量N1在向量N上的投影长度Dot(N1, N)/Dot(P0P2, N)等于N1的长度/P0P2的长度上代码: /// <summary> /// 计算直线和平面的交点 /// &
2022-03-08 12:22:37 1212
原创 Unity Behavior Designer(行为树)Abort Type(中断类型)
我的理解:正常情况下组合任务中的子任务运行完之后只有等到Restart之后才会再次运行,但是当组合任务设置了Abort Type(中断类型)后,子任务的OnUpdate仍然会继续运行,当子任务的OnUpdate返回值发生变化时就会产生中断,中断当前运行中的任务,回到发生变化的子任务中重新运行子任务None: 不会产生中断Self: 当前组合任务还没运行完,所有子任务的OnUpdate会继续运行,检测是否发生中断Lower Priority:同层且比自身优先级低的任务还没运行完,所有子任务的OnUpd
2022-03-02 17:12:40 5027
原创 Unity XR Interaction Toolkit 2.0.0使用方法
项目名称:VR保龄球项目地址:https://github.com/achonor/VRBowlingVR Interaction Toolkit 2.0.0的Demo项目:其中包含移动,传送,旋转,抓取,按键回调的用法
2022-02-20 23:43:32 4709
原创 UnityShader 翻书效果
Shader "Achonor/TurnBook"{ Properties { _MainTex ("FrontTex", 2D) = "white" {} _BackTex ("BackTex", 2D) = "white" {} _Speed ("Turn _Speed", Range(0, 1)) = 0.5 _XOffset ("Centor X Offset", float) = 5 _Angle .
2022-02-09 11:53:16 2226
原创 Unity ScreenToWorldPoint精度不够
开发中遇到float精度不够 Vector3 worldPos = mMapCamera.ScreenToWorldPoint(screenPos); Vector3 tempPos = mMapCamera.WorldToScreenPoint(worldPos);上面代码执行后screenPos不等于tempPos ,找了半天发现是float精度不够,最后自己重写ScreenToWorldPoint来解决public Vector3 ScreenToWorldPoint(Vector3 scr
2022-01-07 17:56:16 3093
原创 Unity Canvas下的UI坐标转屏幕坐标
public static Vector2 Local2ScreenPoint(this Transform transform, Camera camera, Vector2 localPos) { Vector2 worldPos = transform.TransformPoint(localPos); return camera.WorldToScreenPoint(worldPos); } /// &...
2021-12-29 11:44:48 2501
原创 基于ESP32-Cam和Unity的远程遥控视频小车
项目链接:Unity: https://gitee.com/achonors/smart-carESP32: https://gitee.com/achonors/esp32_-smart-car提示:ESP32项目使用VSCode安装PlatformIO后打开运行主要技术:1.ESP32上打开CameraWebServer推送摄像头的实时画面2.ESP32开启TCP服务,监听远程发送的指令3.ESP32使用PWM控制小车四个车轮转速,实现小车转向,前进,后退4.Unity上使用UMP插
2021-11-12 19:58:27 6859 5
原创 ESP32的TCP延迟太大
问题:局域网下使用ESP32开启WiFiServer监听TCP延迟有半秒多原因:再循环读取TCP接受的数据时使用了readBytes方法client.readBytes(readBuffer, 20);解决:将readBytes方法替换成read方法就好了readBuffer[0] = client.read();具体原因也没仔细看源码了...
2021-11-12 19:27:35 4470
原创 WPF Binding不生效的问题 BindingExpression
运行输出错误:BindingExpression path error: ‘text’ property not found on ‘object’C# public class Phone { public string text; }XAML<TextBlock Text="{Binding text}" Width="200"/>去官方查了一下发现所以C#中要改成 public class Phone { public
2021-04-23 17:14:58 2540
原创 1316. 不同的循环子字符串
题目链接:https://leetcode-cn.com/problems/distinct-echo-substrings/思路:前缀字符串哈希public class Solution { int[] nextIndex = new int[2005]; long[] hashPre = new long[2005]; long[] hashPow = new long[2005]; HashSet<long> hasHash = new HashSet
2021-04-07 17:17:01 154
原创 C# 双向队列 单调栈
public class Deque<T> { public class DequeNode<T> { public T value; public DequeNode<T> pre; public DequeNode<T> next; } public int Lenght; public DequeNode<T> Front = new DequeNode<
2021-04-07 15:51:37 1111
原创 LeetCode 483. 最小好进制
题目链接:https://leetcode-cn.com/problems/smallest-good-base/思路:1.先遍历[2, 10]进制是不是满足条件,后面再判断[11, n - 1]2.假设n转换成x进制等于y, 其中y = 11111…111(长度等于n的长度)3.二分查找x的值,范围是[11, n - 1]4.找到对应的x则返回,否则y = y / 10,继续第3步的二分查找public class Solution { /// <summary>
2021-04-06 17:01:13 173
原创 LeetCode 1425. 带限制的子序列和
题目链接:https://leetcode-cn.com/problems/constrained-subsequence-sum/思路:动态规划 dp[i] = Max(nums[i], nums[i] + dp[i + j]) 其中0 < j <= k,但是直接遍历dp[i + j]会超时,所以要维护一个能快速查找dp[i + j]中最大值的结构,可以使用单调栈,也可以用平衡二叉树,由于C#中没有双向队列,干脆就直接拷个Splay树过来。 public class So
2021-04-06 11:12:43 222
原创 LeetCode 327. 区间和的个数
题目链接:https://leetcode-cn.com/problems/count-of-range-sum/题意:给定一个数组nums,找出子数组中元素和在[lower, upper]中有多少个,[-2, 5, -1]的子数组有[-2, 5, -1],[-2, 5],[-2],[5, -1],[5],[-1]共6个,满足条件的共3个思路:1.维护一个平衡二叉树,将所有以下标以0为起点的子数组和插入二叉树中([-2, 5, -1] = 2,[-2, 5] = 3,[-2] = -2)满足在
2021-04-02 14:38:55 192
原创 LeetCode 1000. 合并石头的最低成本
题目连接:https://leetcode-cn.com/problems/minimum-cost-to-merge-stones/思路:区间动态规划,详细看注释using System;using System.Collections.Generic;using System.Text;namespace LeetCode { class Program_1000 { int Step; //前缀和 int[] Sum = new i
2021-03-31 15:54:50 200
原创 Unity导入arr文件打包报错
原因:导入打包arr文件的时候项目中导入了classes.jar,Unity中本身就已经有classes.jar了解决方法:用解压软件打开arr文件,删除其中的libs/classes.jar报错内容:CommandInvokationFailure: Gradle build failed. D:/Program Files/Java/jdk1.8.0_271\bin\java.exe -classpath "N:\Unity\2019.4.15f1c1\Editor\Data\PlaybackE
2021-01-08 10:57:26 1295
原创 Unity Texture图集上Sprite的UV导出
public class BaseEditorWindow<T> : EditorWindow where T : EditorWindow{ protected static void GetWindow() { EditorWindow.GetWindow(typeof(T)); } protected static string GetMouseSelectPath(Rect rect, string defaultPath, bool isR.
2020-10-23 10:18:51 1434
原创 Unity 批量提取FBX中的.anim动画文件
private void CopyFBXAnim() { Object[] SelectionAsset = Selection.GetFiltered(typeof(Object), SelectionMode.Unfiltered); foreach (UnityEngine.Object assetFile in SelectionAsset) { AnimationClip newClip = new AnimationClip();...
2020-09-21 14:07:50 1439
原创 C# 优先队列实现
public class HeapQueue<T> where T : IComparable<T> { private List<T> array = new List<T>(); public int Count { get { return array.Count; } } private void...
2020-08-27 14:06:50 682 2
原创 LeetCode 1163. 按字典序排在最后的子串 非投机取巧
**1.先用dp算出所有的下降子序列2.将所有最长的下降子序列放入vector中排序3.先按照所有下降子序列的第一个字符排序,然后舍弃后面的子序列4.再按照第二个字符排序,再舍弃后面的子序列,直到vector中只剩下一个子序列**class Solution {private: string text; int dp[400005]; inline char GetText(int index) { if (index < text.lengt
2020-08-26 13:13:50 243
原创 LeetCode 1147. 段式回文
1147. 段式回文https://leetcode-cn.com/problems/longest-chunked-palindrome-decomposition/ public class Solution { int result; string text; //lastIndex[x][y]表示0-y这段字符串中x字母最后出现的位置 int[][] lastIndex = new int[26][];
2020-08-20 12:06:07 255
原创 LeetCode 4. 寻找两个正序数组的中位数
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/解题思路:使用两层二分查找 public class Solution { //数组中小于target的数字数量 int SearchLeftCount(int target, int[] numbers) { int left = 0; int right = numbers.Length;.
2020-08-14 14:00:03 105
原创 Unity UGUI 横竖屏切换自适应方案
Demo地址:https://github.com/achonor/ScreenAdapt使用方法1.将AdaptManager挂到场景中2.具体使用可以查看DemoEditor扩展使用1.非运行状态下切换分辨率后点击菜单上的Achonor->ApplyAdaptScreen让UI重新适配屏幕2.继承自AdaptBase的类包含两个属性LandscapeConfig, PortraitConfig分别是横屏配置和竖屏配置,UI调整之后可以在Inpsector中右键对应属性然后点击Copy
2020-08-06 14:14:20 3392 2
原创 Unity UI重复Sprite的处理
Unity中同一张UI图片再项目中多个地方使用,但是Sprite的设置又不相同,一般的做法就是拷贝一张一样的图,但是这种方法会使资源被重复打到包里,增加包体大小还有另外一种比较好的处理方式,就是单独创建一个asset文件引用原图,具体做法如下。1.项目Editor目录下创建一个cs文件,将下面代码拷贝进去using UnityEditor;using UnityEngine;public class Menutools{ [MenuItem("Tools/CopySpriteAsse
2020-06-28 11:30:14 795
原创 [HDU 1011] Starship Troopers 树形dp
http://acm.hdu.edu.cn/showproblem.php?pid=1011题意:有一支军队,每个人能消灭 20 个 bug。输入n , m。表示 bug 有 n 个洞(编号1-n )和这支军队有 m 个人。这些洞形成一颗树,必须打了前面才能打到后面。
2020-06-09 15:36:50 540
原创 Unity Android GooglePlay分包obb文件流程
Unity勾选Split Application Binary在Edit->Project Settings->Player->Other Settings->Split Application Binary打包完成之后会出现*.apk和*.obb两个文件安装apk文件重命名obb文件 :main.{versionCode}.{pkgname}.obb 例如 main.1.com.achonor.test.obb复制到:Android/data/obb/{pkaname}.
2020-05-28 16:03:22 1479
原创 UnityShader Reversed-Z的理解
今天遇到一个奇怪的问题,屏幕后处理时使用_CameraDepthTexture还原世界坐标的时候出问题了,多番调试发现_CameraDepthTexture中保存的深度值 depth = 1 - Zn (Zn指NDC的z分量,即透视除法后的坐标z)(假设NDC坐标取[0, 1]),至于为什么要这样可以看看下面的文章Reversed-Z详解-幽玄Nvidia的关于Reverse-Z的文章我的理解:当相机是透视投影模式的时候Zn是非线性的,Zn和相机空间下Z轴的关系如下:从图中可以看出,近裁剪平
2020-05-17 00:00:40 1650 1
原创 UnityShader 总是朝着摄像机的帧动画 Billboard
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'Shader "Achonor/Billboard"{ Properties { _MainTex ("Texture", 2D) = "white" {} _RowAmount ("Row Amount", Float) = 4 _Colu...
2020-04-30 20:58:53 569
原创 批处理图片尺寸修改成4的倍数
Unity中使用ETC2压缩格式要求图片尺寸必须是4的倍数,所以写个脚本修改一下尺寸Python要先安装Pillowpip install Pillowimport osfrom PIL import Imagein_dir = r"F:\UnityProjects\Porject"out_dir = r"E:\VineyardValleyImages"file_list = N...
2020-04-23 17:15:16 2291
原创 切线空间的法线贴图使用
法线纹理TextureType设置为Normal Map(使用Unity内置的Shader必须设置为Normal Map)设置为Normal Map的贴图在不同平台Unity会采用不同的压缩方式法线的z方向始终为正,法线纹理存储的是单位向量,所以只需要保存法线的x, y方向对法线贴图进行纹理采样后需要使用UnpackNormal来获得真正的法线(DXT5nm格式压缩的纹理a对应x,g对应y...
2020-04-19 13:27:04 607
原创 基于pywin32的考勤警报软件
**最近疫情原因在家办公,公司怕我们再加偷懒给电脑安装了考勤抽查软件,“思考问题”的时候考勤软件随时会跳出来,要是没看到就凉凉了。故无奈用下班时间开发了一个软件打开提醒的软件,没有发给同事用,希望老板看到不要找我麻烦。。。。****源码:https://gitee.com/achonors/WindowWarn.git**软件基于使用pywin32,pygame等框架开发,常驻任务栏,ic...
2020-04-18 00:38:53 205
原创 左右边界二分查找
1.查找小于等于int BinarySearch(int value, int left, int right){ while(left < right){ cout<< left << " " << right <<endl; int mid = (left + right) >> 1;...
2020-02-25 10:33:18 329
原创 Unity 防沉迷逻辑
1.AntiAddictedController .csusing System;using System.Collections;using System.Collections.Generic;using UnityEngine;namespace Achonor.AntiAddicted{ public class AntiAddictedController : Mo...
2020-02-24 17:53:51 1919 3
原创 Git项目提交到SVN
1.初始化svngit svn init svnURL2.拉取SVNgit svn fetch3.链接svn和git的提交记录//找到svn最后一次提交git show-ref//找到git的第一次提交git log --pretty=oneline master //链接提交git replace --graft [localfirstcommit] [parentcom...
2020-01-13 15:54:25 2507
原创 TexturePacker图集转Unity Sprite Multiple
用大佬代码优化:https://blog.csdn.net/salvare/article/details/82712466由于JsonUtility不支持C#中的Dictionary,所以导入第三方库LitJson,下载地址:LitJson.dll,下载完放到Assets\Plugins下代码放到Assets\Editor下使用方法:Texture和json放到同目录下,选中Texture...
2019-08-06 10:03:49 921
原创 Unity记住android签名keystore密码
using UnityEditor;[InitializeOnLoad]public class GlobalConfig{ static GlobalConfig() { PlayerSettings.Android.keystorePass = "文件密码"; PlayerSettings.Android.keyaliasName = "...
2019-07-03 10:14:52 1012
原创 AI自动行走逻辑
using System;using System.IO;using System.Text;using UnityEngine;using UnityEngine.UI;using System.Collections.Generic;namespace Letang { public class AutoRunning : MonoBehaviour { ...
2019-06-27 16:57:39 485
原创 红黑树-RBTree
#include <set>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#pragma warning(disable:4996)using namespace std;struct RBNode { int value;...
2019-04-17 16:35:34 392
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人