自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 使用cannon.js开发具有物理特性的汽车

cannon.jscannon.js是一个Web端的轻量级物理引擎,其官方网站提供了大量的例子供我们学习。使用cannon.js搭配three.js或Babylon.js,可以开发出具有物理效果的3D Web应用程序。RaycastVehicleRaycastVehicle是cannon.js提供了一个车辆对象。并且官方给我们提供了demo。何为Raycast为何称为RaycastVehicle呢?这与该对象的物理模拟原理有关系。该对象使用刚体(CANNON.Body)作为车身,从刚体的四个角处向

2022-05-13 16:20:56 2622 1

原创 车辆动力学及在Unity、UE4中的实现

受力分析直线行驶时的车轮受力如下:水平方向上,所受合力为:F=Ft+Fw+FfF=F_t+F_w+F_fF=Ft​+Fw​+Ff​其中,FtF_tFt​为牵引力,FwF_wFw​为空气阻力,FfF_fFf​为滚动阻力,下面我们将逐个介绍。驱动力先来说扭矩,扭矩是使物体发生旋转的一个特殊力矩,等于力和力臂的乘积,单位为N∙mN∙mN∙m:设驱动轴的扭矩为TtT_tTt​,车轮半径为rrr,那么牵引力:Ft=Tt⁄rF_t=T_t⁄rFt​=Tt​⁄r如何求得驱动轴扭矩TtT_tTt​呢?

2021-07-30 09:12:21 4160 8

原创 Unity 文本转贴图

导入字体导入ttf字体,修改Character为Custom set,并填入Custom Chars:可以看到,Unity为我们生成了对应的材质和贴图:从上图可以看出:1、Unity中Texture2D的坐标原点为左下角,和OpenGL相同,V坐标与DX相反。2、某些字符被上下翻转,某些字符被顺时针旋转了90度这两点需要特别注意。原理分析本文中使用的方法是创建一个Texture,然后利用Texture2D的public Color[] GetPixels(int x, int y,

2021-05-12 18:20:49 1602 4

原创 Unity ECS 进阶——在System中创建/销毁实体

EntityCommandBufferSystem能使我们在System中创建/销毁Entity。利用EntityCommandBufferSystem创建Entity其实是利用EntityCommandBufferSystem将命令队列压入主线程执行。1、首先设计Component:using Unity.Entities;public struct SpawnData : IComponentData{ public int Count; public Entity Tem

2021-04-19 16:09:31 1125 1

原创 Unity ECS 进阶——使用Chunk批量操作实体

什么是Chunk?Chunk:拥有相同Component的Entity的集合Archetype:Chunk容量有限,一系列同样大小的Chunk组成Archetype因为拥有相同Component的Entity都存储在Chunk中,所以ECS规定:创建/销毁实体、添加/删除组件,都不能在在Job中处理。否则其他Job不知道,会引起错误。第一个例子中的System,是在主线程中使用ForEach逐个Entity更新数据;而使用Chunk可以结合Job批量处理,速度更快:using Unity.Enti

2021-04-19 16:06:06 722

原创 Unity ECS 4——System篇

继承关系ComponentSystemBase└SystemBase└JobComponentSystem:在子线程中运行,仅当筛选出的Entity数量大于0时才会被调用生命周期按照组织架构来划分Group└System生命周期如下:在System类上添加Attribute,可以修改其所在的组:...

2021-04-19 16:02:09 284

原创 Unity ECS 3——Component篇

Component类型IComponentData└LocalToWorld└Translation└Rotation└RenderBoundsISharedComponentData└RenderMesh

2021-04-19 15:59:08 192

原创 Unity ECS 2——Entity篇

Entity生成1 通过CES系统创建生成Entity需要经过以下步骤:1、获取EntityManager,EntityManager可以创建/销毁Entity;2、创建EntityArchetype,相当于设计一个Entity类,用户可以定义Entity含有哪些Component;3、创建Entity对象;4、设置Component中的数据。using Unity.Entities;using Unity.Mathematics;using Unity.Rendering;using

2021-04-19 15:56:45 1740 1

原创 Unity ECS 1——简介

概念ECS即Entity Component System,实体组件系统。其中:Entity:用于标识那些数据属于一个实体;Component:存储数据(仅含数据,不含方法);System:管理组件数据的更新(不同于传统的通过对象修改数据,这里通过System统一直接修改数据)Unity版本:2019.3.3f1CES依赖包:“com.unity.collections”: “0.8.0-preview.5”,“com.unity.entities”: “0.10.0-preview.6”,

2021-04-19 15:49:55 305

原创 Unity Job System 4——作业之间的依赖

使用Handle处理作业之间的依赖:using Unity.Collections;using Unity.Jobs;using UnityEngine;public struct MyJob : IJob{ public float a; public float b; public NativeArray<float> result; public void Execute() { result[0] = a + b;

2021-04-19 15:44:29 225

原创 Unity Job System 3——特殊的Transform

对于处理Transform的Job,要继承IJobParallelForTransform:using Unity.Collections;using Unity.Entities;using Unity.Jobs;using UnityEngine;using UnityEngine.Jobs;// 继承IJobParallelForTransformstruct TransformJob : IJobParallelForTransform{ public NativeArra

2021-04-19 15:42:54 647

原创 Unity Job System 2——并行处理数据

并行处理数据的Job需要继承IJobParallelFor接口,Execute方法也有所变化:using Unity.Collections;using Unity.Jobs;using UnityEngine;struct MyParallelJob : IJobParallelFor{ [ReadOnly] public NativeArray<float> a;// 如果不需要写入,建议加[ReadOnly]提升性能 [ReadOnly] public Nati

2021-04-19 15:39:03 615

原创 Unity Job System 1——简单示例

作业系统和多线程有些类似,多线程是创建Thread对象并执行Start方法,而作业系统是先实现IJob接口并重写Execute,然后调用Schedule方法将作业放入作业队列。简单示例如下:using Unity.Collections;using Unity.Jobs;using UnityEngine;// 实现IJob接口public struct MyJob : IJob{ public float a; public float b; // 为保证线程安全

2021-04-19 15:35:34 798

原创 UE4接入Android第三方库2——通过JIN与GameActivity通信

在C++中编写Native方法需要包含如下头文件:#include "Android/AndroidApplication.h"#include "Android/AndroidJNI.h"方法格式如下:extern "C"JNIEXPORT void JNICALLJava_com_epicgames_ue4_GameActivity_onNativeTreadStart(JNI...

2020-03-01 18:53:46 2468 1

原创 Unreal Plugin Language参考

添加XML添加空的XML:<?xml version="1.0" encoding="utf-8"?><root xmlns:android="http://schemas.android.com/apk/res/android"><trace enable="true"/><!--是否启用调试 --><!--初始化时需要执行的操...

2020-03-01 14:05:03 1920

原创 UE4接入Android第三方库1——框架配置

新建插件新建一个Runtime类型的插件:{ 。。。其余省略 "Modules": [ { "Name": "LiSan", "Type": "Runtime", "LoadingPhase": "Default" } ]}添加APL文件APL文件,即Android Program Language(一说Unreal Plugin Language)文件...

2020-03-01 11:17:10 2515

原创 UE4编辑器Python编程8——给Sequencer添加动画

# coding: utf-8import unrealdef getOrAddPossessableInSequenceAsset(sequence_path='', actor=None): ''' 在sequence中为Actor添加unreal.SequencerBindingProxy ''' sequence_asset = unreal.LevelSequen...

2020-02-29 22:47:16 1561

原创 UE4编辑器Python编程7——操纵视口

操纵视口,即设置视口的位置和选择,也需要使用C++实现,然后使用Python调用C++函数。C++头文件:#pragma once#include "CoreMinimal.h"#include "Kismet/BlueprintFunctionLibrary.h"#include "ZFunctions.generated.h"UCLASS()class TEMP_SCRIPT...

2020-02-29 22:43:51 870

原创 UE4编辑器Python编程6——Actor操作

生成Actor# coding: utf-8import unrealdef spawnActor(): actor_class = unreal.EditorAssetLibrary.load_blueprint_class( '/Game/Blueprints/Cube_Blueprint') actor_location = unreal.Vecto...

2020-02-29 22:36:45 2317

原创 UE4编辑器Python编程5——获取对象的可编辑属性

获取对象可在编辑器中编辑的属性,也需要用C++实现,然后使用Python调用C++:C++:#pragma once#include "CoreMinimal.h"#include "Kismet/BlueprintFunctionLibrary.h"#include "ZFunctions.generated.h"UCLASS()class TEMP_SCRIPT_API UZ...

2020-02-29 22:27:05 1207

原创 UE4编辑器Python编程4——创建任务进度条

# coding: utf-8import unrealimport timedef executeSlowTask(): quantity_steps_in_slow_task = 1000 # 步数 with unreal.ScopedSlowTask(quantity_steps_in_slow_task, 'My Slow Task Text ...') as...

2020-02-29 22:20:01 1261

原创 UE4编辑器Python编程3——内容浏览器操作

平时在内容浏览器中执行的资产操作,也可以通过Python脚本执行保存资产和目录# coding: utf-8import unrealdef saveAsset(): unreal.EditorAssetLibrary.save_asset(# 保存资源 '/Game/Textures/TX_LightSpotMove', only_if_is_dirty=Fa...

2020-02-29 22:10:48 2762 1

原创 UE4编辑器Python编程2——导入资产

导入贴图、音频# coding: utf-8import unrealtexture_tag = 'D:/LiJIngsong_File/FBX/Colours.TGA'sound_wav = 'D:/LiJIngsong_File/FBX/kof.wav'def buildImportTask(file_name='C:/xx.xx', destinataion_path='/G...

2020-02-29 14:18:34 1710 1

原创 UE4编辑器Python编程1——C++与Python的互调

说明这项技术的必要性有如下两点:1、某些功能官方并未暴露给Python,所以需要使用C++实现,然后通过Python调用C++函数;2、某些情况下需要使用C++执行Python脚本。对于如何执行Python脚本,以及其他注意事项,请参照官方文档。此外,本教程中使用VSCode编辑Python脚本,关于如何配置VSCode,请参照博主的另一篇博文:《使用VS Code编写UE4 Pytho...

2020-02-29 11:45:22 5198 5

原创 UE4 检测按键长按

可以使用计时器检测按键长按,蓝图节点如下:

2020-02-25 14:01:37 5844

原创 UE4 关闭FilmPostProcess

有时候我们希望使用一张烘焙好的Texture作为颜色材质,却发现由于大量的后期处理,最后得到的并不是我们想要的颜色。本文将介绍一种还原方法。

2019-10-17 09:15:03 970 1

原创 UE4 Slate教程5——Slate独立程序

可以将Slate作为MFC、QT一类的工作开发独立程序的方法。

2019-09-28 15:57:58 4406 1

原创 UE4 Slate教程4——自定义控件

本文将介绍自定义Slate控件的方法、向控件传递参数的方法,以及SButton事件响应背后的原理。

2019-09-28 15:39:17 3845 3

原创 UE4 Slate教程3——Slate类型介绍

介绍Slate的三种类型:SCompoundWidget、SPanel、SLeafWidget

2019-09-28 14:01:44 3943 1

原创 UE4 Slate教程2——构建Slate控件的方式

使用SNew宏和SAssignNew宏构建Slate控件

2019-09-28 10:07:59 2095

原创 UE4 Slate教程1——快速入门

Slate快速入门

2019-09-27 17:44:30 3676 2

原创 error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”

解决UE4编译错误:error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”

2019-08-12 09:50:14 7635 4

原创 将HTML项目打包成exe应用

使用electron将网页项目打包成桌面应用

2019-07-03 15:24:14 4077

原创 使用VS Code编写UE4 Python脚本

使用VS Code作为UE4 Python脚本的编辑器,进行一系列设置使之能够高亮提示与智能补全

2019-04-24 17:42:34 4942

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除