unity3d

深入Lua:Table的实现

£可爱£侵袭症+ 提交于 2021-02-04 04:04:54
Table的结构 Lua和其他语言最不同的地方在于,它只有一个叫表的数据结构:这是一个数组和哈希表的混合体。神奇的地方在于只通过表,就可以实现模块,元表,环境,甚至面向对象等功能。这让我们很好奇它内部的结构到底是怎么样的。 它的结构定义在 lobject.h 中,是这样的: typedef struct Table { // 这是一个宏,为GCObject共用部分,展开后就是: // GCObject *next; lu_byte tt; lu_byte marked // 所有的GC对象都以这个开始 CommonHeader; // 和快速判断元方法有关,这里可以先略过 lu_byte flags; // 哈希部分的长度对数:1 << lsizenode 才能得到实际的size lu_byte lsizenode; // 数组部分的长度 unsigned int sizearray; // 数组部分,为TValue组成的数组 TValue * array ; // 哈希部分,为Node组成的数组,见下面Node的说明 Node *node; // lastfree指明空闲槽位 Node *lastfree; // 元表:每个Table对象都可以有独立的元表,当然默认为NULL struct Table * metatable ; // GC相关的链表,这里先略过 GCObject

Unity基础教程系列(新)(四)——测量性能(MS and FPS)

被刻印的时光 ゝ 提交于 2021-02-04 04:04:18
目录  1 分析Unity  1.1 游戏窗口 Statistics  1.2 动态合批  1.3 GPU Instancing  1.4 Frame Debugger  1.5 额外的灯光  1.6 Profiler  1.7 分析一次构建  2 展示帧率  2.1 UI面板  2.2 Text  2.3 更新显示  2.4 平均帧率  2.5 最好和最差  2.6 帧持续时间  2.7 内存分配  3 自动进行函数切换  3.1 函数循环  3.2 随机函数  3.3 函数插值  3.4 过渡 本文重点内容: 1、使用 game window stats, frame debugger, 和 profiler 2、比较动态批处理, GPU instancing, and SRP batcher 3、显示帧率 4、循环自动的执行函数 5、不同函数之间平滑过渡 这是关于学习使用Unity的基础知识的系列教程中的第四篇。对测量性能的介绍。我们还将在函数库中添加从一个函数转换为另一个函数的功能。 本教程是CatLikeCoding系列的一部分,原文地址见文章底部。 本教程使用Unity 2019.4.12f1制作。 (介于波浪和球体之间) 1 分析Unity Unity持续渲染新帧。为了使任何运动看起来都流畅,它必须足够快地执行此操作

unity微信开放平台

自闭症网瘾萝莉.ら 提交于 2021-02-03 08:50:55
一、前言 微信开放平台 ,当前(2020-6-24)注册账户必须要填写企业信息,还需要应用审核。请优先解决账户和审核问题,获取到应用 AppID 和 Secret。 二、SDK接入 1. 配置环境 项目 build.gradle 中添加依赖。 dependencies { api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' } 复制代码 2. 设置权限 AndroidManifest.xml 中设置,如果使用到扫码登录,或者 mta( 腾讯移动分析 ) 才需要添加以下权限。 <!-- 扫码登录 需要权限--> <uses-permission android:name="android.permission.INTERNET" /> <!-- mta 需要权限--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 复制代码 3. 初始化

Unity接入第三方Android SDK——之微信支付

一曲冷凌霜 提交于 2021-02-03 08:50:30
Unity接入微信支付之前,首先需要解决接入微信SDK的问题,这部分这篇文章我这就不细说了,具体可以看我之前写这篇文章: Unity接入第三方Android SDK——之微信分享 , 但是先把这篇文章看完再回头去看微信分享那篇文章,这样流程就顺下来了。 Android Library的包名前半部分要和Unity的包名一致, 比如Unity的包名是com.aaa.bbb, 那么Android Library的包名可以设置为 com.aaa.bbb.ccc。 关于支付回调,微信要求必须是在com.aaa.bbb.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数。 创建 com.aaa.bbb.wxapi 路径的流程: Android Stuido中默认是这样的: 先取消勾选Campact Middle Packages 之后就变成这样了 再在 bbb 上新建一个 Package,命名为wxapi即可 记得在Library的 AndroidManifest.xml的中加入以下内容 <activity android:name="com.titianai.hanzi.wxapi.WXPayEntryActivity"

Unity接入第三方iOS SDK——之微信开放平台

泄露秘密 提交于 2021-02-03 08:50:11
废言 这算是Unity接入微信开放平台的第二篇了,第一篇在这: Unity接入第三方Android SDK——之微信开放平台 。 作为一个既没有接触过Android开发、有没有接触过iOS开发的人员 ,完成Android和iOS的微信SDK接入,拢共花费了一周的工作时间,效率有点低。 在完成微信SDK接入的过程中,查看过网络上不少的文章,不过似乎没有哪一篇是能文章能够一气呵成解决问题的,因此自己有了斗胆一试的想法,所以才有了这两篇文章的诞生,希望能够后面接触的小伙伴节约一些时间。 本文的亮点 最后的完成品,不需要在Xcode中修改、添加任何内容,直接Unity编译到Xcode然后安装到真机 一、开始 Universal Links的配置 这部分的内容我就不细讲了,相对比较简单,主要是苹果开发者和微信开发者后台的设置,然后把apple-app-site-association这个文件放到域名根目录即可(域名必须支持HTTPS) apple-app-site-association 这个文件的内容类似下面这样: { "applinks": { "apps": [], "details": [{ "appID": "TeamID.com.yourapp.bundleID", "paths": ["*"] } ] } } 复制代码 二、微信SDK的导入 前往微信开放平台下载SDK:

Wait for coroutine to finish [duplicate]

独自空忆成欢 提交于 2021-02-02 09:58:58
问题 This question already has an answer here : More organized way to call Coroutines? (1 answer) Closed 3 years ago . I have coroutine that after N seconds clear text and returns it to it's original shape. Problem is that coroutine never continues after first return ( wait for seconds ). I had this problem somewhere else and figured it out that is happening because i destroy Gameobject before coroutine finish so i made it return bool but now i am confused and can not use same trick here since i

Wait for coroutine to finish [duplicate]

狂风中的少年 提交于 2021-02-02 09:58:15
问题 This question already has an answer here : More organized way to call Coroutines? (1 answer) Closed 3 years ago . I have coroutine that after N seconds clear text and returns it to it's original shape. Problem is that coroutine never continues after first return ( wait for seconds ). I had this problem somewhere else and figured it out that is happening because i destroy Gameobject before coroutine finish so i made it return bool but now i am confused and can not use same trick here since i

[Rendering] 基于物理的大气渲染

安稳与你 提交于 2021-02-02 05:52:48
# 要解决的问题 以下我们推导 单次散射(single scattering) 的气渲染模型,即光线从太阳发出过、只经过一次散射被改变方向后射入我们的眼睛。 下图显示了我们观察大气时的观察路径 AB ,我们想知道 B 点的大气颜色: 来源:https://www.alanzucconi.com/2017/10/10/atmospheric-scattering-1/ 这个过程实际上就是对视线路径 AB 上每一点的光照贡献进行一个积分,下面我们把问题一步步拆分。 ## 问题一:P点的光照是什么? 由于我们关心的是单级散射,那么唯一的一次散射发生在路径 AB 上的每一点 P ,那么该点的光照强度 Ip 要怎么求呢?它可以理解成是,从 P 点出发沿着光照方向与大气边缘的交点为 C ,从 C 点的光照(我们认为大气层边缘的光照就是太阳发出的光照)经过路径 CP 衰减后到达 P 点的光照: 来源:https://www.alanzucconi.com/2017/10/10/atmospheric-scattering-1/ 用公式表示就是: 其中, T项 是 衰减系数(Transmittance) ,它表示在某段路径上的对光照的衰减程度。该公式也可以被认为是 零级散射(zero scattering) ,即不考虑任何散射事件、直接考虑经过衰减后光强。 ## 问题二:在P点发生了什么?

You uploaded an APK or Android App Bundle that was signed in debug mode. You need to sign your APK or Android App Bundle in release mode

不羁的心 提交于 2021-01-29 22:23:49
问题 I have developed an app in Unity and it runs fine but now when I tried to upload it, it gives this error You uploaded an APK or Android App Bundle that was signed in debug mode. You need to sign your APK or Android App Bundle in release mode. 回答1: Check the Project settings > Player > Publishing settings > Alias should not be in Debug . 来源: https://stackoverflow.com/questions/57590870/you-uploaded-an-apk-or-android-app-bundle-that-was-signed-in-debug-mode-you-nee

“Load is not allowed to be called from MonoBehaviour constructor” On script that does not inherit from MonoBehaviour

淺唱寂寞╮ 提交于 2021-01-29 22:20:37
问题 I have two classes; BuildableObject and TempObject . For some reason, Unity is treating TempObject like a MonoBehaviour class in which it throws an error if I use Resources.Load() from the constructor. Why is this, and how do I fix it? public abstract class BuildableObject { public abstract Vector2Int Space { get; set; } public abstract GameObject Body { get; set; } public void Init(GridSpace[,] World, Vector2Int pos) { Vector3 Pos = World[pos.x, pos.y].pos; //TODO: Optimize //TODO: Add