unity

学习Unity 2019 ECS框架(二)

邮差的信 提交于 2019-12-11 00:14:35
ECS非常适合用于大规模物件的动画交互,比如这个流体模拟 https://connect.unity.com/p/shi-yong-unityde-ecshe-job-systemshi-xian-liu-ti-mo-ni-xiao-guo 他在github里给出了传统SPH实现(MonoBehaviour)的源码,和使用ECS架构后的源码。 先解析下传统单线程实现,也就是MonoBehaviour。 大体思路是在每个粒子的MonoBehaviour里,计算自己和其他粒子在一定密度下受到的力,相互作用力产生的速度与运动方向,再应用到坐标位置上。 private void Start() { InitSPH(); } private void Update() {  // 计算密度压力 ComputeDensityPressure();  // 计算力(含方向) ComputeForces();  // 计算位置 Integrate();  // 计算碰撞 ComputeColliders();   // 应用位置 ApplyPosition(); } 计算粒子间的流体碰撞共使用到下列参数,SPH包括粒子密度渗透。 其中restDensity和smoothingRadius是粒子间超过一定距离上的阈值,则不在计算相互作用力,这也符合力学运动物质趋于稳定的物理学规律。 [System

Unity 的跨平台以及热更

橙三吉。 提交于 2019-12-10 23:00:15
1.Unity的跨平台原理 首先说到Unity的跨平台。Unity的跨平台是基于Mono实现的,在Windows上,.NetFramework提供了VS的编译器,将C#代码编译为CIL的代码指令集(中间码),然后通过CLR将中间码变为机器码执行。CIL是一种可以在任何支持CLI(Common Language Infrastructure 公共语言基础设施)的环境中运行。而Mono则是重写了.NetFramework在Windows上的CLR,构建了基于各个平台的不同的虚拟机,这些虚拟机的工作就是在这些不同的平台上,将CIL Code编译为机器码放在内存中供系统执行。 2.Unity3D为何可以热更新 上面说到Mono提供了各平台的虚拟机来把CIL编译为native Code机器码,其实也就是二进制码。同时它提供了三种编译方式,不同于我们熟知的AOT(ahead of time 编译执行)和JIT(just in time 解释执行),这两种编译方式上一篇C#的编译里有提。第一种是JIT,和我们熟知的一样,就是在运行时将CIL转换为native code。第二种是AOT,但是这个AOT并不是完全的静态编译,该模式在编译了大部分通常在运行时编译的CIL码,而还有一小部分还是通过JIT模式。第三章Full_AOT才是完全的静态编译,把全部CIL字节码都生成native code

Unity 三种截屏方式以及截屏时出现的问题

丶灬走出姿态 提交于 2019-12-10 16:39:19
参考链接: https://blog.csdn.net/qq_33337811/article/details/69421936 参考链接: https://www.jianshu.com/p/460803bbd5a9 第一种:使用ScreenCapture进行截屏,只能截全屏,不针对相机 /// <summary> ///第一种: unity自带的全屏截图 /// </summary> public void OneShot() { var url = path + "OneShot" + Time.realtimeSinceStartup.ToString() + ".png"; ScreenCapture.CaptureScreenshot(url); Application.OpenURL(path); } 第二种:利用Texture2D读取屏幕像素进行截图,可以自定义屏幕范围大小 /// <summary> /// 第二种:利用屏幕像素进行截图 /// </summary> /// <returns>The screenshot2.</returns> /// <param name="rect">Rect.截图的区域,左下角为o点</param> private Texture2D CaptureScreenshot2(Rect rect,string url) { /

Unity和Android通信以及AndroidManifest的合并

馋奶兔 提交于 2019-12-10 13:48:43
前言: Unity和android交互,这个问题,在百度搜一下,解决方案还是蛮多的,起初我也是照着百度出来的帖子一步步实现了.但是!大部分帖子只管功能实现根本不讲缘由,且实现的功能比较死板.看完这样的帖子,对学习完全没有帮助啊喂!想要在项目中使用交互代码相应的也会遇到许多问题(后面会说遇到的问题,以及解决方案). 适用人群: 1.unity开发者,不会使用AndroidStudio,通过本教程,可以了解Android Studio的基本使用. 2.搜索了很多unity,Android交互文章却没找到合适解决方案的同学. 使用jar还是aar进行通信? Jar中包含了原生java代码,如果我们只是测试通信,一个简单的jar包就能够通信,然而实际开发中,一般不可能只用一个jar包,在android工程中一般都会引用很多jar包 aar大概是设计出来用来替代jar来进行通信的,不仅包含了jar 还包含了提供的android资源(图片,布局文件等).这也是aar包比jar大的原因,我们可以通过删除不相关内容来降低aar包的大小. AndroidStudio: 打开AndroidStudio- NewProject: 新建activity之后,要在activity中引用unity的方法就需要引入unity的jar包,根据以下目录找到unity提供的jar: 根据在unity中选择的打包方式

C#开发Unity游戏教程之Unity中方法的参数

核能气质少年 提交于 2019-12-10 13:24:43
C#开发Unity游戏教程之Unity中方法的参数 Unity的 方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“ ( ) ”,有意义吗?看起来最多也就是起个快速识别方法的作用吧。既然 C# 的语法规定方法就应该这么写,肯定是有一定道理的。如果是上升到战略意义的道理,连作者也不是很明白,但是作者知道这对括号里可以添加“参数”。 Unity中 参数的作用 要说明参数的作用,就必须从方法说起。方法可以处理变量中的数据,进而影响游戏对象的行为逻辑,这是本章前面一直在强调的。但是就前面脚本中一直在使用的,方法的括号里没有参数的情况而言,方法总是在处理特定变量里的数据。例如,下面是前面一个示例中定义的方法: int AddTwoNumber() { return number1 + number2; } 这个方法的括号里没有参数,它处理的数据总是变量 number1 和 number2 里的数据。既然这只是一个用于求和的方法,没有必要指定它只计算变量 number1 和 number2 里的数据和。如果有其它变量的数据也要求和的话,就只能再定义一个方法了。为方法引入参数就可以很好的解决这类的问题。 Unity中的方法 对于游戏的实际意义 开发者定义了一个方法,可以控制一个游戏对象的逻辑行为。如果其它对象也需要做出与之类似的行为

判断移动设备网络状态及电量

拟墨画扇 提交于 2019-12-10 12:27:21
话不多说,代码如下: using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System; using UnityEngine.iOS; public enum NetworkWorkSituation { NotReachable, ReachableViaCarrierDataNetwork, ReachableViaLoaclAreaNetwork, } /// <summary> /// 移动设备 /// </summary> public class MobilePhone : MonoBehaviour { /// <summary> /// 网络状态 /// </summary> public static NetworkWorkSituation type; /// <summary> /// 网路状态判断 /// </summary> /// <returns></returns> public static NetworkWorkSituation GetNetworkState() { //断网的情况下 if (Application

unity3d脚本生命周期

落花浮王杯 提交于 2019-12-10 09:56:24
脚本的生命周期 代码 using System . Collections ; using System . Collections . Generic ; using UnityEngine ; public class NewBehaviourScript : MonoBehaviour { // 只会执行一次 无论脚本是否激活,都会被执行。前提是脚本所在对象必须是激活状态 private void Awake ( ) { Debug . Log ( "Awake" ) ; } // 脚本激活或者脚本所依附的对象被激活时执行 private void OnEnable ( ) { Debug . Log ( "OnEnable" ) ; } // 只会执行一次 且只能 在脚本处于激活状态或者脚本第一次被激活时执行 // Start is called before the first frame update void Start ( ) { Debug . Log ( "Start" ) ; } // 固定帧率刷新 不受游戏帧率影响,默认帧间隔为0.02s,可以在projectseting-Time-fixed timestep中设置 private void FixedUpdate ( ) { Debug . Log ( "FixedUpdate" ) ; } //

Unity 2D游戏开发教程之摄像头追踪功能

冷暖自知 提交于 2019-12-10 07:27:45
Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的 2D 游戏。此游戏中的精灵有 3 个状态: idle 、 left 和 right 。这看起来确实很酷!但是仅有的 3 个状态却限制了精灵的能力,以及游戏逻辑的想象空间。看来有必要让精灵拥有更多的状态,而这就是本章要讲解的主要内容。 摄像头追踪功能 游戏里的精灵可以在游戏场景中任意移动,这没什么问题,可是这就导致了一个问题,就是精灵可能移动到我们的视野之外,或者说游戏视图之外。为了解决这个问题,很多游戏都采用了“摄像头追踪”的方法,使得摄像头的位置会随着精灵的移动而移动。例如,《超级玛丽》中,精灵始终处于视图中心的位置,如图 2-1 所示。 图 2-1 《超级玛丽》中,精灵始终位于游戏视图的中心 要为我们开发的游戏添加“摄像头追踪”的功能,就需要使用脚本编写这样一种逻辑。在 Project 视图的 Scripts 文件夹里,新建一个 C# 脚本,命名为 CameraController ,为此脚本添加下面的代码: 01 using UnityEngine; 02 using System.Collections; 03 04 public class CameraController : MonoBehaviour 05 { 06 // 公有属性 07 // 表示精灵当前的动画状态 08 public

Unity 2D游戏开发教程之游戏中精灵的跳跃状态

我们两清 提交于 2019-12-10 07:16:19
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图 2-14 所示。但是却无法从低的地面移动到高的地面,因为当前的游戏精灵只能左右移动,即 left 和 right 。为了解决这个问题,本节就来为精灵添加跳跃状态。 图 2-14 精灵从一个地面移动到另一个地面 ( 1 ) 如果要为精灵添加跳跃状态,即 jump ,就不得不再引入其它状态: q landing :用于表示精灵接触到地面的这种状态。为了阻止精灵在跳跃到空中的时候再次跳跃,就需要在精灵做跳跃动作之前,确认其接触到了地面。 提示: 有些游戏允许精灵在空中的时候再跳跃一次,也就是所谓的二级跳。例如,《天天酷跑》中,精灵就需要有二级跳的能力,因为有些场景光是跳跃一次无法跳过悬崖,或者吃到金币,如图 2-15 所示。 图 2-15 《天天酷跑》中,需要连续跳跃来越过断崖的精灵 q falling :用于表示精灵在空中的状态,处于此种状态下的精灵只可能过渡到 landing 和 kill 状态,也就是说精灵在空中的时候,无法产生其它动作行为,如 left 和 right 。 ( 2 ) 为脚本 PlayerStateController 中定义的动画状态枚举类型添加 3 种新的状态: jump 、

Unity3D gradle编译出错:Program type already present:com.xx.xx.BuildConfig 依赖冲突

醉酒当歌 提交于 2019-12-10 05:43:37
这可能是unity新版本的bug,如果是自己手写了安卓插件包名与项目报名一样的话,这个BuildConfig会多出来一份,因为AS编译插件的时候已经生成了这个类,Unity这边打包也会生成这个BuildConfig,然后俩包名一样就冲突了, 解决办法:在AS中更改这个arr的包名,确保和应用的包名不一样。 来源: CSDN 作者: 冥想的大象 链接: https://blog.csdn.net/sinat_34141245/article/details/103455513