- 博客(36)
- 问答 (9)
- 收藏
- 关注
原创 UE4网络部分(2)——Replication
本节内容参考视频彻底掌握UE4网络-03 Actor Replication文章目录Replication简介Actor Replication开启Actor Replication方法情况模拟Property Replication开启Property Replication方法情况模拟Rep_NotifyRep_Notify开启方法Replication简介前一篇博文说过,在这个通信方式下,信息只能从服务端到客户端,如果客户端需要发送信息给服务端,那么就得用RPC框架。还有一个很重要的点,Act
2022-03-31 15:01:54
3216
原创 UE4网络部分(1)——网络构架
文章目录前言网络构架不能信任客户端,所有重要信息通过服务端验证Listen Server与Dedicate Server作为客户端的我们,操控的是什么角色框架图本节内容参考视频彻底掌握UE4网络-02网络构架前言最近在跟着一个教程做类csgo的游戏。做到shift静步的时候,可以发现,当player在服务端运行的时候,动画是非常流程地,而在客户端运行的时候,会明显卡顿。了解到,这个问题的出现是和网络同步有关的,为了解决这个问题,特此来学习UE4网络部分的内容。内容参考自b站up主的彻底掌握UE4
2022-03-31 13:50:29
6392
原创 FPS游戏(2)
文章目录1.创建新角色FPSCharacter.hFPSCharacter.cpp补充:轴映射与动作(操作)映射2.设置轴映射3.实现角色移动函数FPSCharacter.hFPSCharacter.cpp4.实现鼠标摄像机控制FPSCharacter.cppPitch Yaw Roll5.实现角色跳跃FPSCharacter.hFPSCharacter.cpp6.将网格体添加到角色7.更改摄像机视角FPSCharacter.hFPSCharacter.cpp与本章内容关系不大的话参数解读本文所有内容皆参
2022-03-27 17:58:21
4496
原创 FPS游戏(1)
先创建一个新项目第一人称射击游戏教程官网内容非常详细,参照即可。FPSProjectGameMode.h我们在此头文件中进行StartPlay()函数重写的声明,之后我们便可以编写自己设定的游戏模式。// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.#pragma once#include "CoreMinimal.h"#include "GameFramework/GameModeBase.h"#include "
2022-03-24 14:45:28
2152
原创 UE4中组件概念和四大继承关系
文章目录1.组件的概念TestActor.hTestActor.cpp继承关系小作业1.组件的概念以A开头的,都是可以放置到场景中的,以U开头的,都是组件,可以依附于Actor,但是不能单独放置到场景中。例如,我们在自动控制摄像机那一节,给一个Actor添加一个摄像机,这就是组件,同样的,也可以用类似方法添加光源、声源这些组件。当然,有的东西可以既是Actor,也是组件组件是用来丰富Actor的。下面我们可以从代码里面看看Actor与组件的关系。同时有很多常用组件。TestActor.h//
2022-03-24 13:35:03
2874
原创 UPROPERTY的作用
先引用官方说法而VisiableAnyWhere、EditAnyWhere等,都是属性说明符,以控制属性与引擎和编辑器诸多方面的相处方式。属性说明符作为UPROPERTY()从左往右第一个参数。例如:而第二维设置说明符,光看单词没法理解是什么意思,我直接对之前的CameraDirector.h添加一些东西。那么我们就可以看到,在Detail里面就可以让我们去设置这个属性的值,也就是Edit操作了。同时这一栏的名称也就是我之前所设置的Begin:...
2022-03-24 11:35:35
1012
原创 官方示例代码CameraDirector
文章目录参考链接CameraDirctor.hCameraDirctor.cpp代码逻辑参考链接游戏控制的摄像机CameraDirctor.h#define CameraDirctor.h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#incl
2022-03-24 11:15:43
172
原创 官方示例代码FloatingActor
#define FloatingActor.h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"//一些核心的东西,比如一些数据类型#include "GameFramework/Actor.h"//Actor父类#include "FloatingActor.generated.h"//与ue4反射机制有关,必须放在
2022-03-24 09:28:00
162
原创 虚幻四默认生成代码
文章目录1.CoreMinial头文件2."GameFramework/Actor.h"3."generated.h"4.UCLASS()5.类的命名规则6.GENERATED_BODY()7.Super的作用在8.UE4反射机制1.CoreMinial头文件CoreMinimal头文件包含一套来自UE4核心编程环境的普遍存在类型(包括 FString、FName、TArray 等。)CoreMinimal头文件(位于UE4根目录\Engine\Source\Runtime\Core\Public\C
2022-03-24 08:57:20
3755
原创 条件变量基础
通常,条件变量和互斥锁搭配使用。条件变量是用来弥补互斥锁的不足的。在我们使用互斥锁的时候,往往是为了等待某个线程修改完数据之类的条件满足后,释放互斥锁。这个过程中,其他线程会尝试竞争锁,竞争失败后才会进入阻塞队列,这个过程还是会消耗CPU的资源。而使用条件变量以后,当条件满足的时候,会发送信号去唤醒等待这个条件的线程,去加锁,再判断条件是否满足。至于为什么要再判断条件,这个一会再提。总之,使用条件变量以后,线程就不需要主动去竞争锁,而是等待着被唤醒,这样可以提高CPU是利用率。1.初始化条件变量
2022-03-08 18:05:06
239
原创 网络编程模型
在使用多进程/多线程服务端框架的时候,如果每次有一个新的客户端连接,都重新去创建一个进程/线程来处理的话,对CPU和内存的开销是比较大的。于是乎,就有了I/O复用。1.I/O复用简介多进程/多线程并发模型:为每个socket分配一个线程/进程。I/O复用:采用单个进程/线程来管理多个socket。这就是他们区别所在。I/O复用有三种方案:select、poll、epoll,各有优缺点,适应不同场景,但是相对来说,epoll会更常用。在网络设备(交换机、路由器),网游后台、nginx、redis
2022-02-20 19:18:18
1133
1
原创 服务端开发的实习总结
两个月的实习期过得好快,不知不觉就快结束了。昨天和宁哥(我的leader兼mentor)聊了一会,再回想一下这段时间的实习经历,虽然并没有做出什么项目,但还是感觉受益良多(至少比放假天天摸鱼好多了)。感觉有必要也忍不住写一篇实习总结,来记录一下这两个月的历程。1.时间线以一个比较流水账的形式先来串一下时间线。2021.12.25——2021.12.26坐飞机来到北京,到早已订好的酒店安顿下,唯一做的正事就是提前了解了一下去公司的路线、计算了一下时间,其余时间就像放假。不过要特别提一下,平时上课
2022-02-17 18:25:06
827
原创 互斥锁基础
互斥锁并不难,只要了解它的函数就可以去简单使用了。1.初始化锁1.1动态初始化对于每把互斥锁,都有一个互斥变量,它是一个特殊的数据类型pthread_mutex_t。int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr);我们可以自己建立一个pthread_mutex_t类型变量,再用如上函数初始化,第一个参数就不用说了,传入互斥变量的地址。第二个变量用于指定锁的属性,一共有四种属
2022-02-09 14:49:29
5217
原创 线程同步入门
1.什么是线程同步线程同步是协调的意思。线程之间本身存在异步性,以不可预知的速度去推进程序的执行,这就需要我们采用加锁等方式,使得线程按照我们想要的顺序去完成执行。假如线程A去完成事情A,之后线程B使用线程A的完成事情A的结果去完成事情B,否则就会程序出错。由于异步性,如果没有外加干涉,程序是很有可能出错的。那么当线程A开始进行事情A之前,我们就加一个锁,到线程B的时候,线程B发现锁并没有解开,就会阻塞直到线程A完成,这样就避免了程序出错。2.什么时候需要线程同步通常,多线程访问公共资源的时候就需要
2022-02-09 12:03:12
2756
原创 多进程框架(Linux)
1.fork()函数关于多进程,我们就需要了解一个fork()函数,它在头文件unistd.h中。当我们在一个程序中调用fork()函数的时候,这个进程就会创建出一个新的进程(我们称为子进程),当前这个程序就被称为父进程。并且,父进程使用fork(),还会返回子进程的进程号,而子进程中,返回值是0。例如这么一个程序,我们来分析一下#include<bits/stdc++.h>#include<unistd.h>using namespace std;int main()
2022-01-27 13:35:19
1907
原创 多进程有关程序(持续更新...)
本文是我在学习socket通信中自己写的一些程序和代码,之后还会持续更新。yzz_client.cpp#include"yzz_client.h"TcpClient::TcpClient(std::string ip,int port){ if((connect_fd = socket(AF_INET,SOCK_STREAM,0)) == 0) return; memset(&server_addr,0,sizeof(server_addr));
2022-01-26 13:07:19
456
转载 TCP三次握手与四次挥手
面试官,不要再问我三次握手和四次挥手这个连接讲解了TCP协议的三次握手和四次挥手,以及和socket编程的关系,讲的很详细也很好。仅用作自学。
2022-01-17 11:49:47
91
原创 网络编程库函数与结构体
这里会介绍网络编程相关的函数基本函数。1.socket函数int socket(int domain, int type, int protocol);向系统申请一个socket,得到一个文件描述符,用于通信。参数说明:1.domain:协议族,常用的有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域Socket)、AF_ROUTE等,决定socket地址类型。我们常用的是AF_INET,决定了要用ipv4地址(32位)与端口号(16位)的组合。2.typ
2022-01-17 11:44:45
1964
3
原创 网络编程基本概念
1.socket1.socket可以理解成插座,两个不同计算机中运行的程序,通过socket建立通道,在通道中进行数据传输来通信。2.socket隐藏了TCP/IP协议族的细节,我们只需要调用socket的函数就可以完成网络通信。3.socket提供基于TCP协议的流服务(stream)和基于UDP协议的数据报服务(datagram),流服务当下使用得最多,之后也只会学习这个。2.简单的socket通信流程PS:1.socket通信采用的是客户/服务端的通信模式。2.监听模式可以理解为是一种
2022-01-13 10:58:06
1309
2
原创 Makefile学习笔记
1.可执行文件生成过程1.有多个.c或者.cpp的源文件,先编译成.s后缀汇编文件,再汇编生成.o后缀目标文件,每一个源文件都需要进行这样的过程,十个源文件就要经历十个这样的过程。2.将所有源文件编译出的.o目标文件,经过一次链接,即可生成最终.exe可执行文件2.makefile基本格式第一行是依赖关系,生成main.o需要依赖什么源文件、头文件;第二行开头必须按一下tab,使用gcc -c这样的规则来处理上面的依赖关系。最简单的格式就是这样,一行依赖关系,一行规则一个简单且完整的make
2022-01-11 13:38:12
1022
原创 C++连接redis数据库(自学笔记)
一、本文仅做自学笔记用本文内容参考redis使用c++ API 的hiredis连接详解C++连接redis数据库需要用到hiredis头文件,最近因为写程序需要用到这方面的知识。上面博文内容较多,难以记忆,打算以这篇文章作为自学笔记,帮助自己理解记忆。本文对一些函数、结构体等说明,只会挑比较基础、常用或者比较重要的部分,如果想全面了解记得去上面的链接翻看。二、正文1.简介(1)使用redisConnect等函数与redis数据库建立连接,连接信息存储在redisContext结构体中(2)使
2022-01-06 18:07:35
6623
1
转载 伪代码的基本语法
参考视频https://www.bilibili.com/video/BV1QE41157sj?from=search&seid=15483562392011790614&spm_id_from=333.337.0.0
2022-01-05 13:57:58
568
原创 Linux的vim
1.简介vim有两种模式,command命令模式和edit编辑模式。2.基本指令1.初始时,默认是command命令模式,按i进入编辑模式;在编辑模式下按esc退出至命令模式2.在命令模式下,输入:wq是保存内容并且退出3.在命令模式下,输入:q!是不保存这次的编辑并且退出4.在命令模式下,输入:wq <文件名>,是将当前文件以你定义的文件名保存出一个文件,通常在新创建一个文件的时候才使用。5.syntax on是保持语法高亮的命令,set number是保持每一行前面显示行数的命
2022-01-04 16:33:16
787
原创 Redis有序集合(Zset/Sort-set)
内容来源于B站【尚硅谷】Redis 6 入门到精通 超详细 教程,在此仅作为个人的笔记、手册使用1.简介1.Sort-set和set非常相似,都是自动去重的字符串集合2.不同之处在于Sort-set里每个成员关联一个评分Score,由评分从低到高排序,评分是可以重复的,但是元素一定是不重复的3.元素是有序的,你可以根据评分或者位置(即下标)来快速获取某个范围的元素4.访问Sort-set的中间元素也是非常快的,这一点比list优秀...
2021-12-30 15:21:35
1555
原创 Redis哈希(Hash)
内容来源于B站【尚硅谷】Redis 6 入门到精通 超详细 教程,在此仅作为个人的笔记、手册使用1.简介1.Redis hash是一个键值对集合2.Redis hash是一个string类型的field和value的映射表,适合于存储对象例如,在key名为user的情况下:实际上记录的是这样一个映射表。假设key是用户ID,value是用户的年龄、姓名、生日等信息,如果采用普通的key-value也如下两种方式:(1)序列化可以理解成转化为字符串。(2)而用key-field+va
2021-12-30 00:47:28
1392
原创 Redis去重集合(Set)
1.简介1.set对外与list类似,都是提供列表功能,即单键多值,唯独多了一个自动去重功能。2.它底层其实是一个value为null的hash表,增删查都是O(1),这里和list不同,不是链表3.它是字符串的无序集合,与C++STL中set不一样2.常见命令这里就体现了自动去重功能!记住,这是无序的,所以输出key的value时不一定是按输入顺序。这里文案有误,其实可以删除不止一个元素,多个也是可以的当一个key中没有值了,那么这个key也
2021-12-29 17:50:53
3901
原创 Redis列表(List)
1.简介1.List列表是单键多值,一个key对应多个value2.List是一个简单的字符串列表,按插入顺序排序来排序(也只能按这个),可以在列表的头部插入也可以在尾部插入3.底层是一个双向链表,对两端操作时候性能好,通过下标对中间节点直接操作时性能比较差2.常见命令从左边插入相当于头插法,右边插入相当于尾插法。如果把一个键所有值都弹光,这个键也就不存在了。当start=0,stop=-1时,就是显示列表中所有元素从下标0开始一直到下标index
2021-12-29 17:24:05
331
原创 Redis字符串(String)
1.简介1.String是Redis中最基本的类型,一个key对应一个value,是二进制安全的,可以包含任何数据,比如jpg图片、序列化对象(只要能转换成二进制符号那就都行)2.只是key需要是字符串String类型,而value可以是字符串也可以是其他类型,list、set什么的都是可以的。2.常见命令1.设置相同的key时,新设置的key-value会覆盖之前同名key的key-value2.3.4.5.与1有区别,防止覆盖6.7.也是只能对数字操作8.与incr/de
2021-12-29 16:21:21
917
原创 Redis相关知识
1.基础知识1。使用6379端口2.默认16个数据库,从0号库开始记3.单线程+多路IO复用技术(效率高)1、2、3cpu发送请求给中介以后,就继续干其他的事情,而这些请求就由中介单线程完成,这样就能提高cpu效率。4.支持多种数据类型5.支持持久化...
2021-12-29 12:14:51
327
原创 Redis概述
1.概述1.开源的key-value存储系统。2.支持value类型多,string、list、hash、set、sort-set(有序集合)3.数据操作具有原子性4.支持各种不同方式的排序5.数据缓存在内存中,但是可以周期性写入磁盘里6.支持主从同步...
2021-12-29 11:58:22
144
原创 NoSQL数据库简介
1.目的\qquadNoSQL是为了解决软件性能问题而出现的技术,Redis是实现这个技术的一种工具2.特点1.Redis是缓存数据库,对数据的读取都是在内存中实现,减少了CPU的压力和I/O操作的时间。2.NoSQL=No only SQL,Redis是非关系型数据库,不依靠业务逻辑存储数据,只依赖key-value值,灵活性能好,适用于高并发、海量数据的场景。(MySQL是关系型数据库,存储数据都是用固定的二维表结构,由二维表和表之间联系来组织数据,效率较差,查询方便)对关系型再展开说说。比
2021-12-29 11:52:37
202
空空如也
Linux下编译文件时,变量出现多重定义问题
2022-04-22
关于网络编程的bind
2022-02-14
为什么类里的vector调用clear会导致段错误
2022-02-08
redis的zrange和zscan
2022-01-30
redis多次查询提速
2022-01-29
使用rapidjson格式化输出
2022-01-21
关于unordered_map和map
2022-01-19
关于Linux下编译的小问题
2022-01-17
Linux编译的问题
2022-01-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人