- 博客(143)
- 问答 (1)
- 收藏
- 关注
原创 震惊!25岁普信男又思索出自己的成功学?
写这篇文章一是提醒自己继续更新,二是此时此刻处于一个发现自己半年没有自主学习,并且之前学的东西都忘光的情况,缓解一下焦虑。
2024-10-28 17:11:01 264
原创 基础GamePlay知识-矩形和矩形/矩形和圆形/旋转矩形和圆形的碰撞检测
主要介绍AABB碰撞检测下,矩形该如何和矩形进行碰撞检测/和圆形进行碰撞检测。直接看图,主要是比较两个矩形的边界线的前后关系。
2024-03-09 23:17:06 594
原创 记一件人生大事——从大厂离开
大三的时候学长找到了不错的工作,告诉我应该去试试大厂实习,其实很容易进,我准备了半年,拿到了offer,然后实习转正,之后就到了现在。我把我前面的努力全盘范定,我要的生活,是有自己想追求的东西,我曾经加入社团的梦想是未来能够做一个伟大游戏,在制作人名单上放出来,但我努力的方向是,来这边996,做ui仔换钱。好,我继续加班,两天改出来。让我想要离职的直接原因是上个版本,4个大需求,拆分起来三十几个子需求,只给一个月的时间,我几乎每天都做到晚上十点多,安慰自己熬到了开发截止改bug的时期就熬过去了。
2023-09-19 14:51:36 239 1
原创 Unity shader实现水波效果
先放效果只想要代码可以直接拉到3.0原理把波产生的点作为圆形,往外的半径方向作为变量,通过波的公式来偏移uv取值,从而模拟波。1.0一个从平面中心不断波动的效果ps:不是后处理,直接作为material赋给平面使用,为了防止波变成椭圆,需要在变量中更新平面的长宽比。Shader "MyShader/waterWave"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Strength(
2022-03-29 17:16:50 6397 7
原创 Re:《Unity Shader入门精要》13.3全局雾效--如何从深度纹理重构世界坐标
空间还原游戏特效,后处理是必不可少的,而后处理经常需要我们得到当前画面的像素对应世界空间的所有信息。思路通过深度纹理取得NDC坐标,然后再通过NDC坐标还原成世界空间坐标//csharp脚本部分Matrix4x4 matrix = camera.projectionMatrix * camera * worldToCameraMatrix;Matrix4x4 InverseMatrix = matrix.inverse;//shader部分float d = SAMPLE_DEPTH_
2022-03-17 23:29:47 4485 16
原创 《Unity shader入门精要》复习<第13章 关于NDC坐标和深度/法线纹理>
分为三个地方讲解。NDC(Normalize Device Coordinates)归一化的设备坐标NDC坐标是世界空间坐标通过MVP变换之后再进行归一化得到的坐标。只需要再一步变换就能得到屏幕空间坐标。顺便提一下因为已经归一化了,如果需要从NDC坐标还原成世界坐标,需要注意最后除w分量。何为线性何为非线性正交投影得到的深度是线性的,而透视投影得到深度是非线性的。所谓线性,就是指变化曲线的一阶导数为常量,也就是说变化量是恒定的。既然变换是恒定的,那么即深度z的采样点在[-1,]1之间均匀分布。正
2022-03-08 23:33:07 7330 4
原创 【Socket】shutdown之后需不需要recv再closeSocket
在学习socket文件传输的过程中发现,教程在linux的客户端代码实现中,最后部分的处理如下 shutdown(clientSock, SHUT_WR); fclose(file); close(clientSock); close(sock); return 0;但是windows的客户端却多了一句recv(clntSock, buffer, BUF_SIZE, 0); shutdown(clntSock, SD_SEND); //文件读取完毕,断开输出流,向客户端发送FI
2022-02-16 23:20:04 1406
原创 《shader入门精要》13.2再谈运动模糊中片元着色器的世界坐标的计算
具体在书p275页这里为啥需要除D.w呢。首先我们得到的NDC的坐标是已经归一化的,但是CurrenViewProjectionInverseMatrix的作用,是把世界空间转化为尚未归一化的裁剪空间的矩阵。这里书上有说明。查找Unity的函数我们就能知道变换得到的顶点坐标是没有归一化的Camera.projectionMatrix. static Matrix4x4 PerspectiveOffCenter(float left, float right, float bottom, fl
2022-01-16 00:57:15 2417 1
原创 《Shader入门精要》第11章-11.3.1流动的河流中的offset.x的解释
在我学习入门精要的时候,经常遇到不解释api,甚至是关键代码的实现原理。11.3.1流动的河流中的offset.x的sin函数查了一下好像大家也都是书上原话直接复制,现在好不容易想明白了希望能帮到和我一样一脸懵逼的人。// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 11/Water" { Properties {
2022-01-09 01:14:17 2260 1
转载 Unity修改assetStore存储位置
相信大多数学unity的学生,c盘都是炸的,我也不例外,今天在网上找到了可以修改AssetStore存储路径的办法,必须安利一下。简单粗暴。原文链接:https://blog.csdn.net/sinat_41822552/article/details/112059936正文第一步:需要复制C盘中Asset Store这个地址到一个文本文档记录一下(是包含Asset Store这个文件夹的地址)C:\Users\你自己的用户名\AppData\Roaming\Unity\Asset Store-
2021-10-22 13:14:59 1020
原创 Unity场景创建重复单例类的时候销毁
游戏中有时候GamManager放在开始场景,结果再次加载的时候就出现两个了。之前采取的解决方法是弄一个“工具人”:初始场景,利用状态模式让其加载开始场景,GameManager就只会在它出现的时候创建一次,突然也可以通过判断单例是否已经存在的办法来管理。代码如下 private void Awake() { if (Instance == null) { Instance = this; GameObje
2021-09-08 15:19:47 913
原创 Unity利用Slerp实现弧线跟踪效果
最近在B站乱七八糟看了很多不同的视频,发现弧线的跟踪弹实现的思路基本都是类似的思路固定物体的速度,利用圆形弧线差值来改变物体的方向。Vector3.Slerp(transform.position, transform.position, float smooth);当smooth趋近0返回第一个参数的Vector3,smooth趋近1返回第二个参数的Vector3类型,0到1之间经过复杂的计算得到两个参数对应方向之间,根据 smooth/1.得到两者之间角度的占比,返回该角度对应的方向。演示
2021-07-12 18:12:23 986 2
原创 Unity2d SpriteRenderer修改颜色实现逐渐透明
原理SpriteRenderer.Color(r, g, b, a);前三个参数控制颜色,最后一个控制透明度,取值皆为[0,1];0000为白色透明 1111位黑色不透明实现逐渐透明效果 private SpriterRenderer sp; public float fadeSpeed; void Awake() { sp = GetComponent<SpriteRenderer>(); StartCoroutine(Fade());
2021-07-10 10:39:53 3643 2
原创 Unity3D使物体跟随鼠标旋转
代码using System.Collections;using System.Collections.Generic;using UnityEngine;public class RotateToMouse : MonoBehaviour{ public float speed; private Vector2 direction; private Vector2 direction2; void Update() { FollowMo
2021-07-07 23:58:44 3210 1
原创 Unity基础UI框架
序大学学了那么久的unity,正觉得要进入佳境,学完设计模式以后已经有可能完成大多数需求的能力(自己给自己的需求),结果鹅厂要求的ue竟是和unity的编程方式一点也不一样。而且从unity诞生的时间结点来看-------比虚幻4晚,也就说明其C#编程的思想是C++的升级版,C++必然向后兼容,但是C#肯定没必要向后兼容。现在还没有开始系统学习ue,可能开始之后就会很想念unity了。目的这只是针对大家做一些小游戏的时候可能用到的UI框架,主要目的在于:不需要在Scene面板提前创建好UI,界面看
2021-06-16 15:20:16 5004 7
原创 LeetCode每日一题-6.10-518-零钱兑换II
题目描述思路 动态规划如果比较有经验,应该一开始就会觉得是青蛙跳台阶的改版,也就是给了你能够跳的台阶的数组,并且取消排列算不同方案。首先给定可以跳的数组,只需要修改函数变为dp[i] = dp[i - coin[0]] + dp[i - coin[1]] + . . . . .dp[i - coin[n]]那么可能理所当然会写出这样的代码 for(int i = value; i <= amount; i++) { for(int i =
2021-06-10 22:48:31 183 2
原创 LeetCode每日一题-4.28-633-平方数之和
题目描述解法 逼近法一个数从0,另一个从sqrt(c)开始,0的那个只增不减,sqrt©只减不增。 bool judgeSquareSum(int c) { long long l = 0, r = sqrt(c); if(c == 0) return true; while(l * l + r * r != c && l <= r) { if(l * l + r * r > c) {
2021-06-06 14:53:34 135
原创 LeetCode每日一题-4.17-220-存在重复元素III
题目描述解法 滑动窗口 + 集合保证abs(i - j)只需要使用滑动窗口即可,那么需要的就是在这个固定大小的窗口找到两个数,保证abs(num[i] - num[j] <= t)由于数组的元素是无序的,所以如果我们每次加入一个新的元素都去全部比较一边,是非常耗时的,所以就会想到在插入窗口的时候把它变成有序的。那么理所当然就会使用集合来插入。再结合stl的set内置的api:s.lower_bound(num)//可以找到第一个比num大的元素就能得到代码,详细思路写在注释了。cla
2021-06-06 14:30:31 157
原创 LeetCode每日一题-6.5-203-移除链表元素
题目描述解法 双指针使用pre和cur指针这是第一遍尝试的代码class Solution {public: ListNode* removeElements(ListNode* head, int val) { if(head == nullptr) return nullptr; ListNode* cur = head; ListNode* pre = cur; while(cur && cur -&g
2021-06-05 23:54:53 149 2
原创 Unity二次加载同样场景时出现报错
相信学到一定程度,大家都会使用事件中心来实现各种功能。于是乎这个问题出现的概率就提高了MissingReferenceException: The object of type ‘xxxxx’ has been destory but you are still trying to access it初次遇到这个问题的时候,百思不得其解,而且出现以后bug都奇奇怪怪甚至让人无法理解。博主逐句注释,各种输出,绕着弯子解决。比如等等…唠叨一下而已,不知道各位是不是和我一样崩溃。解决在场景结
2021-05-22 10:36:27 1583 2
原创 Unity实现鼠标放在按钮上面的时候触发方法
如下代码,放到对应按钮就能实现。using UnityEngine;using UnityEngine.UI;using UnityEngine.EventSystems;public class SetButtom : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler{ public Animator ImageAnim; public Button Button;//鼠标进入 public void OnP
2021-05-18 19:18:16 2875
原创 C#属性
启:做了好长一段时间的demo,由于C#中本来就包含了C++的几乎所有特性(面向对象),所以习惯于C++的我还是没什么用到C#中的一些方便的东西,然后也不知道什么时候该用,换而言之(菜)。之前大二的时候就系统学习了C#,只是笔记都没丢上来。所以打算在锻炼游戏开发开发的过程中,逐渐使用一些相关的特性,让自己变强一些(变得不是那么菜)属性的概述属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为
2021-04-30 11:30:44 4213
原创 LeetCode-5-最长回文子串
题目描述解法 暴力遍历遍历所有子字符串,观察其是否是回文串妥妥超时class Solution {//思路:一个函数判断是不是回文串//暴力递归//会超时public: string longestPalindrome(string s) { int slen = s.size(); int ans1 = 0, ans2 = 0; string ans; for(int l = 0; l < s.size();
2021-04-21 20:50:03 88
原创 Unity2D使用Trail Renderer实现拖尾效果
在制作demo的时候,想要给人物添加一个拖尾特效,然后unity刚好有配套的组件,赶紧去尝试了一下。结果就发生了两个问题。使用Trail Render组件使用Trail Render很简答,在你想要产生特效的物体下面新建一个空物体,在Add Component搜索1. 产生的trail会被Sprite遮住,无论Order in Layer的关系如何经过查找得知要把材质换成Sprite/diffuse,但是又产生了第二个问题3. 选择trail的材质如果选择...
2021-04-20 23:59:53 4138 5
原创 LeetCode每日一题-4.14-208-实现Trie(前缀树)
这题似乎就是单纯考察前缀数的知识,也是菜鸡第一次听说前缀树。学点新东西吧。Trie入门操作Trie的数据结构struct TrieNode { bool isEnd; //该结点是否是一个串的结束 TrieNode* next[26]; //字母映射表};三种操作插入实现:这个操作和构建链表很像。首先从根结点的子结点开始与 word 第一个字符进行匹配,一直匹配到前缀链上没有对应的字符,这时开始不断开辟新的结点,直到插入完 word 的最后一个字符,同时还要将最后一个结点
2021-04-14 23:25:47 116
原创 Unity实现异步加载场景+进度条
场景的切换是游戏中不可避免的。一般来说,为了防止同步加载所带来的卡顿感,我们都会选择使用异步加载场景。在加载的过程中,一般是弄一个进度条或者弄个转转转的小圈圈,甚至可以弄个小游戏。这里简单介绍一下如何实现。思路定义异步对象 private AsyncOperation m_Operation;场景加载协程 IEnumerator LoadScence(String loadScenceName) { operation = SceneManager.LoadS
2021-04-08 17:28:43 878
原创 LeetCode每日一题-4.6-80-删除有序数组中的重复项II
前置题目26-删除有序数组中的重复项解法 快慢指针将一个有序数组变成每个数字只能出现一次的数组,由于要求的空间复杂度是O(1)而且是原地修改,所以就很容易联想到用双指针。一个指针负责遍历数组,另一个在指定位置填入数字。初始:由于可以保证至少放入一个元素,所以两个指针都从下标1往后遍历逻辑:slow指向的是待填入元素的位置,所以nums[]...
2021-04-06 22:01:24 134
原创 LeetCode每日一题-4.4-781-森林中的兔子
题目描述找规律思路见注释class Solution {//思路:相同数字说明同一群,不同说明不同群,没群个数为该数字+1public: int numRabbits(vector<int>& answers) { unordered_map<int, int> m; int ans = 0; //统计每个数字出现的次数 for(int num : answers) {
2021-04-04 13:43:26 143
空空如也
Fmod声音引擎的文件夹.event文件用Csharp如何读取和修改
2021-09-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人