- 博客(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 2817 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 4642 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 1817 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 1278 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 842
原创 Unity ECS 4——System篇
继承关系ComponentSystemBase└SystemBase└JobComponentSystem:在子线程中运行,仅当筛选出的Entity数量大于0时才会被调用生命周期按照组织架构来划分Group└System生命周期如下:在System类上添加Attribute,可以修改其所在的组:...
2021-04-19 16:02:09 321
原创 Unity ECS 3——Component篇
Component类型IComponentData└LocalToWorld└Translation└Rotation└RenderBoundsISharedComponentData└RenderMesh
2021-04-19 15:59:08 224
原创 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 1895 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 349
原创 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 281
原创 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 760
原创 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 702
原创 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 911
原创 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 2632 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 2064
原创 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 2672
原创 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 1691
原创 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 909
原创 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 2510
原创 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 1307
原创 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 1359
原创 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 2976 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 1806 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 5520 5
原创 UE4 关闭FilmPostProcess
有时候我们希望使用一张烘焙好的Texture作为颜色材质,却发现由于大量的后期处理,最后得到的并不是我们想要的颜色。本文将介绍一种还原方法。
2019-10-17 09:15:03 1023 1
原创 UE4 Slate教程3——Slate类型介绍
介绍Slate的三种类型:SCompoundWidget、SPanel、SLeafWidget
2019-09-28 14:01:44 4140 1
原创 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 7960 4
原创 使用VS Code编写UE4 Python脚本
使用VS Code作为UE4 Python脚本的编辑器,进行一系列设置使之能够高亮提示与智能补全
2019-04-24 17:42:34 5102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人