虚拟机中打开游戏提示 unityhelper.dll错误 提示2报错,在线等,求解答

关注培训通
unity培训 选对插件很重要
责任编辑: 发布时间: 16:16:17浏览0次
  现如今,游戏越来越成为人们生活必不可少的一部分,作为休闲娱乐消遣的游戏有着高清的动感与质感,情节设计新颖,吸粉无数,这样的游戏,是依赖着unity3D技术进行的,unity3D作为游戏开发的工具,受到越来越广泛的关注,随着游戏行业的兴盛,unity行业也得到高速的发展。  1. 介绍  Unity有两类插件: Managed plugins和Native plugin。  Managed plugins是托管式.NET代码,因为只有.NET代码,也就是说不能使用.NET库不支持的功能。  Native plugins是平台专门的原生代码库,可以用来访问操作系统调用或者第三方的库。  在Unity5之前,通过插件存放的目录来区分支持的目标平台;然而Unity5可以把插件放在任何目录,通过Plugin
Inspector设置相关属性就可以了,但为了兼容以前的版本,Unity5也会支持插件存放的目录,进行默认的插件设置。  规则如下:  文件夹默认插件设置  Assets/**/Editor只兼容Editor  Assets/**/Editor/(x86 or x86_64 or x64)只兼容Editor,如果子文件夹存在,用于匹配目标CPU  Assets/Plugins/x86_64(or x64)x64兼容  Assets/Plugins/x86x86兼容  Assets/Plugins/Android/(x86 or armeabi or
armeabi-v7a)只跟Android兼容,如果子文件夹存在,用于匹配目标CPU  Assets/Plugins/iOS只跟iOS兼容  2. 托管式插件  通常情况下,我们直接使用脚本实现相关功能,然后由Unity编译成目标可执行文件。但有时我们不能不在外部把脚本编译成DLL,然后放在Unity中使用。这个DLL就是这里所说的托管式插件,兼容.NET二进制。  2.1 创建一个DLL  如果制作的DLL依赖Unity本身的DLL(UnityEngine.dll和UnityEditor.dll),还需要使编译器能访问它们。
Mac系统,它们存放在/Applications/Unity/Unity.app/Contents/Frameworks/Managed/,
Windows下,存放在C:\Program Files\Unity\Editor\Data\Managed  如果使用Mono C#编译器mcs编译,命令大体如下:  mcs
-r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
-target:library ClassesForDLL.cs  2.2 使用DLL  如同其它资源一样,直接拖放到Unity项目里。继承于MonoBehaviour的类可以直接拖到GameObject上,像普通脚本一样;非MonoBehaviour类可以在其它脚本中被直接使用。  2.3 为DLL设置调试功能  在MonoDevelop, 把生成的/bin/Debug/DLLTst.dll.mdb拷贝到Assets/Plugins文件夹下。在Visual
Studio, 执行Program
Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe,按照提示传入\bin\Debug\DLLTest.pdb,然后把生成的mdb文件放到Assets/Plugins文件夹下。  接下来,确保Mono软调试器开启,Mac下是在MonoDevelop的MonoDevelop-Unity & Add-in Manager
& Installed tab & Unity & select Mono Soft Debugger Support for Unity
& Enable  然后就可以单步跟进DLL脚本里。  3. 原生插件  原生插件一般采用C,C++,Objective-C等等编写,Unity允许游戏代码来访问这些原生插件中的函数,允许Unity和一些中间件库或者已有的C/C++进行整合和。  3.1 实例  一个简单函数:  float FooPluginFunction () { return 5.0F; }  为了能再Unity中可以访问这简单函数,需要这么用:  using UnityE  using System.Runtime.InteropS  class SomeScript : MonoBehaviour {  #if UNITY_IPHONE || UNITY_XBOX360  // On iOS and Xbox 360 plugins are statically linked into  // the executable, so we have to use __Internal as the  // library name.  [DllImport (&__Internal&)]  #else  // Other platforms load plugins dynamically, so pass the name  // of the plugin's dynamic library.  [DllImport (&PluginName&)]  #endif  private static extern float FooPluginFunction ();  void Awake () {  // Calls the FooPluginFunction inside the plugin  // And prints 5 to the console  print (FooPluginFunction ());  }  }  需要主要原生函数的name mangling问题,如果FooPluginFunction是用C++的代码,那么需要这样声明:  extern &C& {  float FooPluginFunction ();  }  4. Android平台  4.1 C/C++插件  做法跟上面的3.1类似,只是在编译库的时候需要依赖Android NDK  4.2 Java插件  可以把预编译的Android库项目扔到Assets/Plugins/Android文件夹。预编译的意思是所有.java文件必须已被编译成java存放在bin/或者libs文件夹下,当项目编译的时候这些文件夹下的AndroidManifest.xml会被自动合并到主manifest文件。  Unity期望Java插件使用JDK v1.6编译。如果使用v1.7,需要在命令参数中包含-source 1.6 -target 1.6  4.3 原生代码访问Java插件  一旦你生成了.jar文件,你需要把它拷贝到Assets/Plugins/Android文件夹下。然后通过JNI访问。  为了能再原生端访问java代码,你需要先访问Java虚拟机,代码如下:  jint JNI_OnLoad(JavaVM* vm, void* reserved) {  JNIEnv* jni_env = 0;  vm-&AttachCurrentThread(&jni_env, 0);  return JNI_VERSION_1_6;  }  然后可以创建新的对象实例:  jobject createJavaObject(JNIEnv* jni_env) {  jclass cls_JavaClass = jni_env-&FindClass(&com/your/java/Class&); //
find class definition  jmethodID mid_JavaClass = jni_env-&GetMethodID (cls_JavaClass, &&,
&()V&); // find constructor method  jobject obj_JavaClass = jni_env-&NewObject(cls_JavaClass,
mid_JavaClass); // create object instance  return jni_env-&NewGlobalRef(obj_JavaClass); // return object with a
global reference  }  4.4 C#访问Java插件  Unity提供了API类AndroidJNIHelper和AndroidJNI简化JNI的访问,也提供了AndroidJavaObject、AndroidJavaClass和java.lang.Object、java.lang.class对应。  可以方便地:  调用方法  访问类成员变量  设置类成员变量  Call分成两类:  调用没有返回值(即返回void)的方法  调用有返回值的  例子如下:  //The comments describe what you would need to do if you were using raw
JNI  AndroidJavaObject jo = new AndroidJavaObject(&java.lang.String&,
&some_string&);  // jni.FindClass(&java.lang.String&);  // jni.GetMethodID(classID, &&, &(Ljava/lang/S)V&);  // jni.NewStringUTF(&some_string&);  // jni.NewObject(classID, methodID, javaString);  int hash = jo.Call(&hashCode&);  // jni.GetMethodID(classID, &hashCode&, &()I&);  // jni.CallIntMethod(objectID, methodID);  不用额外插件,通过UnityPlayer获得当前应用的cache目录:  AndroidJavaClass jc = new
AndroidJavaClass(&com.unity3d.player.UnityPlayer&);  // jni.FindClass(&com.unity3d.player.UnityPlayer&);  AndroidJavaObject jo = jc.GetStatic(&currentActivity&);  // jni.GetStaticFieldID(classID, &Ljava/lang/O&);  // jni.GetStaticObjectField(classID, fieldID);  // jni.FindClass(&java.lang.Object&);  Debug.Log(jo.Call(&getCacheDir&).Call(&getCanonicalPath&));  // jni.GetMethodID(classID, &getCacheDir&, &()Ljava/io/F&); // or any
baseclass thereof!  // jni.CallObjectMethod(objectID, methodID);  // jni.FindClass(&java.io.File&);  // jni.GetMethodID(classID, &getCanonicalPath&,
&()Ljava/lang/S&);  // jni.CallObjectMethod(objectID, methodID);  // jni.GetStringUTFChars(javaString);  上面代码只是举例说明,现在可以直接通过Application.temporaryCachePath和Application.persistentDataPath获得cache目录。  下面的例子演示使用UnitySendMessage从Java层把数据传递到C#:  using UnityE  public class NewBehaviourScript : MonoBehaviour {  void Start () {  AndroidJNIHelper.debug =  using (AndroidJavaClass jc = new
AndroidJavaClass(&com.unity3d.player.UnityPlayer&)) {  jc.CallStatic(&UnitySendMessage&, &Main Camera&, &JavaMessage&,
&whoowhoo&);  }  }  void JavaMessage(string message) {  Debug.Log(&message from java: & + message);  }  }  4.5 扩展UnityPlayerActivity  可以创建一个新的Activity继承于UnityPlayerActivity(UnityPlayerActivity.java放在Mac的/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/com/unity3d/player或者Windows的C:\Program
Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\src\com\unity3d\player)。  首先,把classes.jar(Mac的/Applications/Unity/PlaybackEngines/AndroidPlayer/bin或者Windows下的C:\Program
Files\Unity\Editor\Data)添加到classpath,用于编译新的Activity。生成.class打包成.jar文件,放到Assets/Plugins/Android文件夹;创建新的AndroidManifest.xml,指定启动的Activity,并把它放到Assets/Plugins/Android。  新的Acitivy,如下:  pany.  import com.unity3d.player.UnityPlayerA  import android.os.B  import android.util.L  public class OverrideExample extends UnityPlayerActivity {  protected void onCreate(Bundle savedInstanceState) {  // call UnityPlayerActivity.onCreate()  super.onCreate(savedInstanceState);  // print debug message to logcat  Log.d(&OverrideActivity&, &onCreate called!&);  }  public void onBackPressed()  {  // instead of calling UnityPlayerActivity.onBackPressed() we just ignore
the back button event  // super.onBackPressed();  }  }  关联的AndroidManifest.xml如下:  android:label=&@string/app_name&  android:configChanges=&fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen&&  Gingerbread之后引入了UnityPlayerNativeActivity,相比于UnityPlayerActivity,它的输入延迟效果好。UnityPlayerNativeActivity的touch/motion事件都在原生代码中处理的,一般情况下Java视图不会接收到此类事件。Unity的重定向机制允许事件发往DalvikVM,如果使用这种机制,需要修改manifest:  android:label=&@string/app_name&  android:configChanges=&fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen&&  这些种类不一的插件对你是否有用呢?
相关新闻:
多 - 门类齐全
课程多,机构多,老师多
快 - 方便快捷
先试听,后支付,方便快捷
好 - 实名认证
真实评价,实名认证好保障
省 - 学费优惠
在线订课更优惠,巨划算
copyright & 2004-.cn, All Rights Reserved.
, 备案编号:京公网安备 ,安装完unity-tweak-tool后,打开运行弹出出错窗口,忘了截图了,提示内容:
scheme missing!
Error: schema com.canonical.indicator.bluetooth not installed
后边还有一句大意是需要安装相应组件才可运行。
解决办法:
首先根据该提示只能得知缺少相应组件,但是不知道缺少那个组件导致unity-tweak-tool无法运行,所以问题无从解决。
后来尝试命令:sudo apt-get install indicator-bluetooth
系统给出提示要安装ibus相关组件,因此得知缺少的是ibus的相关系列组件(因为ubuntu14.04初始输入法不太好使,所以系统安装成功之后第一件事就把ibus相关组件全部卸载了,结果出问题了o(╯□╰)o。。。就连基本的系统设置都打不开了o(╯□╰)o)。
知道问题在哪儿就好解决了,
按ctrl+alt+T打开终端命令行,
输入:sudo apt-get install indicator-bluetooth
按照提示安装所有ibus组件就OK了,过程如下:
left@left-pad:~$ sudo apt-get install indicator-bluetooth
正在读取软件包列表... 完成
正在分析软件包的依赖关系树&&&&&&
正在读取状态信息...
完成&&&&&&
将会安装下列额外的软件包:
& ibus unity-control-center
建议安装的软件包:
& ibus-clutter ibus-doc ibus-qt4
下列【新】软件包将被安装:
& ibus indicator-bluetooth
unity-control-center
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 957 kB 的软件包。
解压缩后会消耗掉 5,767 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 /ubuntu/ trusty/main ibus amd64
1.5.5-1ubuntu3 [185 kB]
获取:2 /ubuntu/ trusty/main indicator-bluetooth
amd64 0.0.6+14.04.ubuntu2 [45.6 kB]
获取:3 /ubuntu/ trusty-updates/main
unity-control-center amd64 14.04.3+14.04.ubuntu1 [726
下载 957 kB,耗时 2秒 (381
kB/s)&&&&&&&&&&&&&&&
Selecting previously unselected package ibus.
(正在读取数据库 ... 系统当前共安装有 195508 个文件和目录。)
Preparing to unpack .../ibus_1.5.5-1ubuntu3_amd64.deb ...
Unpacking ibus (1.5.5-1ubuntu3) ...
Selecting previously unselected package indicator-bluetooth.
Preparing to unpack
.../indicator-bluetooth_0.0.6+14.04.ubuntu2_amd64.deb
Unpacking indicator-bluetooth (0.0.6+14.04.ubuntu2)
Selecting previously unselected package unity-control-center.
Preparing to unpack
.../unity-control-center_14.04.3+14.04.ubuntu1_amd64.deb
Unpacking unity-control-center (14.04.3+14.04.ubuntu1)
Processing triggers for gconf2 (3.2.6-0ubuntu2) ...
Processing triggers for man-db (2.6.7.1-1) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for gnome-menus (3.10.1-0ubuntu2) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu1)
Processing triggers for bamfdaemon (0.5.1+14.04.ubuntu1)
Rebuilding /usr/share/applications/bamf-2.index...
Processing triggers for mime-support (3.54ubuntu1) ...
Processing triggers for libglib2.0-0:amd64 (2.40.0-2) ...
正在设置 ibus (1.5.5-1ubuntu3) ...
正在设置 indicator-bluetooth (0.0.6+14.04.ubuntu2) ...
正在设置 unity-control-center (14.04.3+14.04.ubuntu1)
到此就OK了,在命令行输入:unity-tweak-tool
就能运行该工具了,开始美化你的系统吧!&&&&&
阅读(...) 评论()Unity3D面试题整合 - 推酷
Unity3D面试题整合
最近unity3d找工作有些受挫,自己也开始补课了。
下面把这段时间看到的些面试题供出来让大家也学习下,题目只是面试官选拔人才的一部分,在研究面试题目的过程中,多检测下自己的不足,及时温习或补习下,最终学到真本事才是最重要的。
祝自己也祝大家好运哈!
题目中有些答案有网上搜的,也有个人整理的,有错误或不足的地方,望指正,谢谢!
文章最后会有参考的一些网址或资料的链接,有想看原址的朋友可以直接跳到最后哦。
题目归类区(看题目字体颜色识第几部分)
ps :下面题目可能稍有点多,翻页会较麻烦,根据题目的颜色辨别是第几部分吧(超链接功能不会,也懒得做了)
1. 请简述值类型与引用类型的区别
2.C# 中所有引用类型的基类是什么
3. 请简述 ArrayList 和 List&Int& 的主要区别
4. 请简述 GC (垃圾回收)产生的原因,并描述如何避免?
5. 请描述 Interface 与抽象类之间的不同
6. 下列代码在运行中会产生几个临时对象?
下列代码在运行中会发生什么问题?如何避免?
8. 请简述关键字 Sealed 用在类声明和函数声明时的作用
9. 请简述 private , public , protected , internal 的区别
10. 反射的实现原理?
11. .Net 与 Mono 的关系?
12. 简述 Unity3D 支持的作为脚本的语言的名称
13.Unity3D 是否支持写成多线程程序?如果支持的话需要注意什么?
14.Unity3D 的协程和 C# 线程之间的区别是什么?
中用于记录节点空间几何信息的组件名称,及其父类名称
16. 简述四元数的作用,四元数对欧拉角的优点?
17. 向量的点乘、叉乘以及归一化的意义?
18. 矩阵相乘的意义及注意点
19. 为何大家都在移动设备上寻求 U3D 原生 GUI 的替代方案
20. 请简述如何在不同分辨率下保持 UI 的一致性
21. 为什么 dynamic font 在 unicode 环境下优于
static font
22.Render 的作用?描述 MeshRender 和 SkinnedMeshRender 的关系与不同
23. 简述 SkinnedMesh 的实现原理
24. 在场景中放置多个 Camera 并同时处于活动状态会发生什么?
25.Prefab 的作用?如何在移动环境的设备下恰当地使用它?
26. 如何销毁一个 UnityEngine.Object 及其子类
27. 为什么 Unity3D 中会发生在组件上出现数据丢失的情况?
28. 如何安全的在不同工程间安全地迁移 asset 数据?三种方法
29.MeshCollider 和其他 Collider 的一个主要不同点?
30. 当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
31.OnEnable 、 Awake 、 Start 运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?
32. 请简述 OnBecameVisible 及 OnBecameInvisible 的发生时机,以及这一对回调函数的意义?
33.Unity3D 如何获知场景中需要加载的数据?
34.MeshRender 中 material 和 sharedmaterial 的区别?
1. 请描述游戏动画有哪几种,以及其原理。
2.alpha blend 工作原理
3. 写光照计算中的 diffuse 的计算公式
4.lod 是什么,优缺点是什么
5. 两种阴影判断的方法工作原理
6.MipMap 是什么?作用?
7. 用 u3d 实现 2d 游戏,有几种方式?
8.u3d 中碰撞器和触发器的区别?
9. 物体发生碰撞的必要条件
10.CharacterController 和 Rigidbody 的区别
11. 物体发生碰撞时,有几个阶段,分别对应的函数
12.u3d 中,几种施加力的方式,描述出来。
13. 什么叫做链条关节
14. 物体自旋转使用的函数叫什么
15. 物体绕某点旋转使用函数叫什么
16.u3d 提供了一个用于保存读取数据的类,( playerPrefs ),请列出保存读取整形数据的函数
17.unity3d 提供了几种光源,分别是什么
18.unity3d 从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。
19. 物理更新一般在哪个系统函数里?
20. 移动相机动作在哪个函数里,为什么在这个函数里。
21. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。
22. 一个场景放置多个 camera 并同时处于活动状态,会发生什么
23. 简述 prefab 的用处和环境
24. 如何销毁一个 UnityEngine.Object 以及其子类
25. 为什么 u3d 会出现组件上数据丢失的情况
26.u3d 下如何安全的在不同工程迁移 asset 数据
1 .什么是渲染管道?
2 .如何优化内存?
3 、动态加载资源的方式?
4 、什么是协同程序?
5 、你用过哪些插件?
1. 反向旋转动画的方法是什么?
2. 碰撞检测需要物体具备什么属性?
3. 用代码实现第三角色控制器
4. 实现吊机吊物体的功能
5. 获取、增加、删除组件的命令分别是什么?
6.Animation.CrossFade 命令作用是
7.Application.loadLevel 命令为
8. 调试记录到控制台的命令是什么?
9. 编辑器类存放路径是什么?
10. 使用原生 GUI 创建一个可以拖动的窗口命令是什么?
11.localPosition 与 Position 的使用区别?
12. 意义连线
13. 写一个计时器工具,从整点开始计时,格式为:
14. 写出 Animation 的五个方法
15. 怎么拿到一个对象上脚本的方法
16. 上机题
17. 请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?
1 ,在类的构造函数前加上 static 会报什么错 ? 为什么
, C# String 类型比 stringBuilder 类型的优势是什么
, C# 函数 Func(string a, string b) 用 Lambda 表达式怎么写
,数列 1,1,2,3,5,8,13... 第 n 位数是多少 ? 用 C# 递归算法实现 5
, UML 图示 .
请简述值类型与引用类型的区别
答:区别:
值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址。
值类型存取快,引用类型存取慢。
值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。
栈的内存是自动释放的,堆内存是 .NET 中会由 GC 来自动释放。
值类型继承自 System.ValueType, 引用类型继承自 System.Object 。
可参考 /JimmyZhang/archive//1059383.html
中所有引用类型的基类是什么
答:引用类型的基类是 System.Object 值类型的基类是
System.ValueType
同时,值类型也隐式继承自 System.Object
的主要区别
答: ArrayList 存在不安全类型 ‘ ( ArrayList 会把所有插入其中的数据都当做 Object 来处理)
装箱拆箱的操作(费时) List
是接口, ArrayList 是一个实现了该接口的类,可以被实例化。
(垃圾回收)产生的原因,并描述如何避免?
答: GC 回收堆上的内存
避免: 1 )减少 new 产生对象的次数 2
)使用公用的对象(静态成员) 3
)将 String 换为 StringBuilder
与抽象类之间的不同
答:抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面 ,不能具体的实现代码在成员方法中。
类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。
实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。
下列代码在运行中会产生几个临时对象?
答:其实在 C# 中第一行是会出错的( Java 中倒是可行)。应该这样初始化:
string b = new string(new char[]{'a','b','c'});
下列代码在运行中会发生什么问题?如何避免?
答:会产生运行时错误,因为 foreach 是只读的。不能一边遍历一边修改。
请简述关键字
用在类声明和函数声明时的作用
答:类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。
答: public
:对任何类和成员都公开,无限制访问 private
:仅对该类公开 protected
:对该类和其派生类公开 internal
:只能在包含该类的程序集中访问该类 protected internal
: protected + internal
反射的实现原理?
答:审查元数据并收集关于它的类型信息的能力。
/xuanmingzhiyou@yeah/blog/static/8/
反射个人认为,就是得到程序集中的属性和方法。
实现步骤: 1,
using System.R 2
, Assembly.Load(& 程序集 &) 加载程序集 , 返回类型是一个
Assembly 3
foreach (Type type in assembly.GetTypes()) { string t = type.N }
得到程序集中所有类的名称 4,Type type = assembly.GetType(&
程序集 . 类名 &); 获取当前类的类型 5,Activator.CreateInstance(type);
创建此类型实例 6,MethodInfo mInfo = type.GetMethod(&
方法名 &); 获取当前方法 7,mInfo.Invoke(null,
答: Mono 官网主页
Mono is a software platform designed to allow developers to easily create& cross platform applications. Sponsored by Xamarin, Mono is an open source& implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime. mono
是 .net 的一个开源跨平台工具,就类似 java 虚拟机, java 本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。 .net 只能在 windows 下运行, mono 可以实现跨平台跑,
可以运行于 linux , Unix , Mac OS 等。
支持的作为脚本的语言的名称
答: Unity 的脚本语言基于 Mono 的 .Net 平台上运行,可以使用 .NET 库,这也为 XML 、数据库、正则表达式等问题提供了很好的解决方案。
里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。 JavaScript
:和网页中常用的 JavaScript 不一样,它编译后的运行速度很快,语法方面也会有不少区别。
:可以看做是 Python 语言的变种,又糅合了 Ruby 和 C# 的特性,它是静态类型语言
13.Unity3D
是否支持写成多线程程序?如果支持的话需要注意什么?
/3821.html
仅能从主线程中访问 Unity3D 的组件,对象和 Unity3D 系统调用
支持:如果同时你要处理很多事情或者与 Unity 的对象互动小可以用 thread, 否则使用 coroutine 。
注意: C# 中有 lock 这个关键字 , 以确保只有一个线程可以在特定时间内访问特定的对象
14.Unity3D
线程之间的区别是什么?
http://blog.csdn.net/kongbu0622/article/details/8775037
多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问 Unity3D 的对象、组件、方法。 Unity3d
没有多线程的概念,不过 unity 也给我们提供了 StartCoroutine (协同程序)和 LoadLevelAsync (异步加载关卡)后台加载场景的方法。 StartCoroutine 为什么叫协同程序呢,所谓协同,就是当你在 StartCoroutine 的函数体里处理一段代码时,利用 yield 语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而 LoadLevelAsync 则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用 loading 条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜 asynchronous[e ?' s ?? kr ? n ? s] .synchronous 同步。 &
中用于记录节点空间几何信息的组件名称,及其父类名称
答: Transform 父类是 Component
简述四元数的作用,四元数对欧拉角的优点?
答:四元数用于表示旋转
相对欧拉角的优点: 1
)能进行增量旋转 2
)避免万向锁 3
)给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)
向量的点乘、叉乘以及归一化的意义?
)点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影 2
)叉乘得到的向量垂直于原来的两个向量 3
)标准化向量:用在只关系方向,不关心大小的时候
矩阵相乘的意义及注意点
用于表示线性变换:旋转、缩放、投影、平移、仿射
注意矩阵的蠕变:误差的积累
为何大家都在移动设备上寻求
的替代方案
不美观, OnGUI 很耗费时间,使用不方便 & , DrawCall
请简述如何在不同分辨率下保持
很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的 size 。
GUI /?p=2587 NGUI http://blog.csdn.net/mfc11/article/details/
dynamic font
环境下优于
static font
是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
使用动态字体时, Unity 将不会预先生成一个与所有字体的字符纹理。当需要支持亚洲语言或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。
的作用?描述
MeshRender
SkinnedMeshRender
的关系与不同
A renderer is what makes an object appear on the screen
就是指模型的网格(同名组件是用于调整网格属性的), MeshFilter 一般是用于获得模型网格的组件,而 MeshRender 是用于把网格渲染出来的组件,
SkinnedMesh
的实现原理
http://blog.csdn.net/n5/article/details/3105872
在场景中放置多个
并同时处于活动状态会发生什么?
答:游戏界面可以看到很多摄像机的混合
的作用?如何在移动环境的设备下恰当地使用它?
答: Prefab 在实例化的时候用到,主要用于经常会用到的物体,属性方便修改 //archive//2961663.html
如何销毁一个
UnityEngine.Object
答: Destory
中会发生在组件上出现数据丢失的情况?
答:组件上绑定的对象被删除了
如何安全的在不同工程间安全地迁移
数据?三种方法
将 Assets 目录和 Library 目录一起迁移
用 unity 自带的 assets Server 功能
29.MeshCollider
的一个主要不同点?
答: Meshcollider 再快也是基于 V3 顶点 ~~ 建议还是用 boxcollider , boxcollider 本身是基于算法,没有面的概念。
当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
穿透(碰撞检测失败)
/threads/3353-collision-detection-at-high-speed (
碰撞体变大, FixedUpdate, 代码限制 )
31.OnEnable
运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?
答: Awake - 》 OnEnable- 》
Start OnEnable
在同一周期中可以反复地发生 /questions/217941/onenable-awake-start-order.html
OnBecameVisible
OnBecameInvisible
的发生时机,以及这一对回调函数的意义?
答:当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。
33.Unity3D
如何获知场景中需要加载的数据?
答:题目是获取的意思?
Resource.Load AssetBundle
34.MeshRender
sharedmaterial
修改 sharedMaterial 将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。
不推荐修改由 sharedMaterial 返回的材质。如果你想修改渲染器的材质,使用 material 替代。
1.请描述游戏动画有哪几种,以及其原理。
主要有关节动画、单一网格模型动画 ( 关键帧动画 ) 、骨骼动画。
关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活 Quake2 中使用了这种动画。
单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。
骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画发展而来的,如今基本都使用骨骼动画来实现角色动画)
2.alpha blend 工作原理
实际显示颜色 = 前景颜色 *Alpha/255 + 背景颜色
*(255-Alpha)/255
3.写光照计算中的diffuse的计算公式
实际光照强度 I= 环境光 (Iambient) + 漫反射光 (Idiffuse) + 镜面高光
(Ispecular);
环境光: Iambient= Aintensity* A (Aintensity 表示环境光强度, Acolor 表示环境光颜色
漫反射光:
Idiffuse = Dintensity*Dcolor*N.L;
(Dintensity
表示漫反射强度, Dcolor 表示漫反射光颜色, N 为该点的法向量, L 为光源向量
镜面反射光:
Ispecular = Sintensity*Scolor*(R.V)^n;
(Sintensity
表示镜面光照强度, Scolor 表示镜面光颜色, R 为光的反射向量, V 为观察者向量, n 称为镜面光指数
4.lod是什么,优缺点是什么
技术即 Levels of Detail 的简称,意为多细节层次。 LOD 技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
优点:可根据距离动态地选择渲染不同细节的模型
缺点:加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。
5.两种阴影判断的方法工作原理
阴影由两部分组成:本影与半影
本影:景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)
半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)
求阴影区域的方法:做两次消隐过程
一次对每个光源进行消隐,求出对于光源而言不可见的区域 L ;
一次对视点的位置进行消隐,求出对于视点而言可见的面 S ;
shadow area= L
阴影分为两种:自身阴影和投射阴影
自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面
工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。
投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域受不到光照照射而形成的阴影
工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)
若是动态光源此方法就无效了。
5.Vertex Shader是什么?怎么计算?
顶点着色器是一段执行在 GPU 上的程序,用来取代 fixed pipeline 中的 transformation 和 lighting , Vertex Shader 主要操作顶点。
Vertex Shader
对输入顶点完成了从 local space 到 homogeneous space (齐次空间)的变换过程, homogeneous space 即 projection space 的下一个 space 。在这其间共有 world transformation, view transformation 和 projection transformation 及 lighting 几个过程。
6.MipMap是什么?作用?
在三维计算机图形的贴图渲染中有一个常用的技术被称为 Mipmapping 。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件 , 这样的贴图被称为 MIP map 或者 mipmap 。
7.用u3d实现2d游戏,有几种方式?
利用引擎自带的
把摄像机设为 Orthographic ,用面片作为 2d 元素
利用第三方插件: NGUI 、
8.u3d中碰撞器和触发器的区别?
碰撞器会有碰撞的效果, IsTrigger = false, 可以调用 OnCollisionEnter/Stay/Exit 函数
触发器没有碰撞效果, isTrigger = true, 可以调用 OnTriggerEnter/stay/exit 函数
9.物体发生碰撞的必要条件
物体 A 必须带有( collider+rigidbody )或者 CharacterController ,另一个物体也必须至少带有
10.CharacterController和Rigidbody的区别
具有完全真实物理的特性,而 CharacterController 可以说是受限的 Rigidbody ,具有一定的物理效果但不是完全真实的。
11.物体发生碰撞时,有几个阶段,分别对应的函数
三个阶段, OnCollisionEnter/Stay/Exit 函数
12.u3d中,几种施加力的方式,描述出来
rigidbody.AddForce/AddForceAtPosition
,都是 rigidbody 的成员函数
13.什么叫做链条关节
Hinge Joint
,他可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。(简单说就是弹簧)
14.物体自旋转使用的函数叫什么
& transform.Rotate
15.物体绕某点旋转使用函数叫什么
& transform.RotateAround
16.u3d提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数
&&&& PlayerPrefs.SetInt
PlayerPrefs.GetInt
17.unity3d提供了几种光源,分别是什么
Directional Light
Spot Light
Point Light
区域光源: Area Light (只用于烘培)
18.unity3d从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。
Awake –&OnEnable –& Start
–& Update –& FixedUpdate –& LateUpdate –& OnGUI –& Reset –& OnDisable –& OnDestroy
19.物理更新一般在哪个系统函数里?
FixedUpdate
,每固定帧绘制时执行一次,和 update 不同的是 FixedUpdate 是渲染帧执行,如果你的渲染效率低下的时候 FixedUpdate 调用次数就会跟着下降。 FixedUpdate 比较适用于物理引擎的计算,因为是跟每帧渲染有关。 Update 就比较适合做控制。
20.移动相机动作在哪个函数里,为什么在这个函数里。
LateUpdate,
,是在所有 update 结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有 update 操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。
21.当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。
做一个 pool ,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回
22.一个场景放置多个camera并同时处于活动状态,会发生什么
实际看到的画面由多个 camera 的画面组成,由 depth 、 Clear Flag 、 Culling Mask 都会影响最终合成效果。
23.简述prefab的用处和环境
在游戏运行时实例化, prefab 相当于一个模版,对你已有的素材、脚本、参数做一个默认配置,以便于以后修改,同时 prefab 打包的内容简化了导出的操作,便于团队的交流。
24.如何销毁一个UnityEngine.Object以及其子类
25.为什么u3d会出现组件上数据丢失的情况
一般是组件上绑定的物体对象被删除了
26.u3d下如何安全的在不同工程迁移asset数据
方法 1 ,可以把 assets 目录和 Library 目录一起迁移,
方法 2 ,导出包
方法 3 ,用 unity 带的 assets server 功能
1.什么是渲染管道?
是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。
主要步骤有:
本地坐标 -& 视图坐标 -& 背面裁剪 -& 光照 -& 裁剪 -& 投影 -& 视图变换 -& 光栅化。
2.如何优化内存?
有很多种方式,例如
压缩自带类库;
将暂时不用的以后还需要使用的物体隐藏起来而不是直接 Destroy 掉;
释放 AssetBundle 占用的资源;
降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
使用光照贴图,使用多层次细节 (LOD) ,使用着色器 (Shader) ,使用预设 (Prefab) 。
3、动态加载资源的方式?(有时候也问区别,具体请百度)
1.Resources.Load();
2.AssetBundle
4、什么是协同程序?
在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。
5、你用过哪些插件?
最好多熟悉几个插件,问的时候好回答
1.反向旋转动画的方法是什么?
2.碰撞检测需要物体具备什么属性?
3.用代码实现第三角色控制器
4.实现吊机吊物体的功能
5.获取、增加、删除组件的命令分别是什么?
GetComponent
AddComponent
6.Animation.CrossFade命令作用是:(C)
动画放大 B. 动画转换 C. 动画的淡入为其他动画
7.Application.loadLevel命令为:(A)
加载关卡 B. 异步加载关卡 C. 加载动作
8.调试记录到控制台的命令是什么?
Debug.Log();
9.编辑器类存放路径是什么?
工程目录下的 Assets/Editor 文件夹下。
使用原生 GUI 创建一个可以拖动的窗口命令是什么?
GUI.DragWindow();
11.localPosition
与 Position 的使用区别?
localPosition
:自身位置,相对于父级的变换的位置。 Position :在世界坐标 transform 的位置
Mathf.Round &
Mathf.Clamp &
Mathf.Lerp & &
写一个计时器工具,从整点开始计时,格式为:
写出 Animation 的五个方法
怎么拿到一个对象上脚本的方法
GameObject.GetComponent&&();
用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放 ( 用一个 Cube 即可 ) 。
请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?
点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;
叉乘的几何意义是:创建垂直于平面,三角形,或者多边形的向量;参考:
.cn/s/blog_017hfw.html
1,在类的构造函数前加上static会报什么错?为什么?
构造函数格式为 public+ 类名如果加上 static 会报错(静态构造函数不能有访问修饰符)
原因:静态构造函数不允许访问修饰符,也不接受任何参数;
无论创建多少类型的对象,静态构造函数只执行一次; &
运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数; &
静态构造函数执行先于任何实例级别的构造函数; &
显然也就无法使用 this 和 base 来调用构造函数。
, C# String 类型比 stringBuilder 类型的优势是什么 ?
如果是处理字符串的话,用 string 中的方法每次都需要创建一个新的字符串对象并且分配新的内存地址,而 stringBuilder 是在原来的内存里对字符串进行修改,所以在字符串处理方面还是建议用 stringBuilder 这样比较节约内存。但是 string 类的方法和功能仍然还是比 stringBuilder 类要强。
类由于具有不可变性(即对一个 string 对象进行任何更改时,其实都是创建另外一个 string 类的对象),所以当需要频繁的对一个 string 类对象进行更改的时候,建议使用 StringBuilder 类, StringBuilder 类的原理是首先在内存中开辟一定大小的内存空间,当对此 StringBuilder 类对象进行更改时,如果内存空间大小不够,会对此内存空间进行扩充,而不是重新创建一个对象,这样如果对一个字符串对象进行频繁操作的时候,不会造成过多的内存浪费,其实本质上并没有很大区别,都是用来存储和操作字符串的,唯一的区别就在于性能上。
主要用于公共 API ,通用性好、用途广泛、读取性能高、占用内存小。
StringBuilder
主要用于拼接 String ,修改性能好。
不过现在的编译器已经把 String 的 + 操作优化成 StringBuilder 了,所以一般用 String 就可以了
是不可变的,所以天然线程同步。
StringBuilder
可变,非线程同步。
/question/.html?qbl=relate_question_0&word=String%C0%E0%D0%CD%B1%C8stringBuilder%C0%E0%D0%CD%B5%C4%D3%C5%CA%C6
, C# 函数 Func(string a, string b) 用 Lambda 表达式怎么写 ?
答: /zh-cn/library/bb397687.aspx
数列 1,1,2,3,5,8,13... 第 n 位数是多少 ? 用 C# 递归算法实现
通项公式应该是
an = a(n-1) + a(n-2)
a4=3=1+1+1
a5=1+1+1+2
a6=1+1+1+2+3
an=1+1+1+2+3+...+(n-2)+(n-3)
=2+(n-2)(n-3)/2 (n&=3)
这是通项公式,至于递归?
5,一个简单的游戏,怪物会走动\攻击\死亡,游戏角色会走动,跳跃\攻击\格挡\死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以互相通信.请画出以上三种角色的UML图示.
, NGUI Button 怎样接受用户点击并调用函数 , 具体方法名称是什么
主要是在 UICamera 脚本中用射线判断点击的物体并通过 SendMessage 调用 OnClick() OnPress() 等函数,可以说 NGUI 的按钮是通过发消息这个方式调用的。
,怎么判断两个平面是否相交 ? 不能用碰撞体 , 说出计算方法
怎么判断两个平面是否相交
&rsv_spt=1&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_pq=abcac&rsv_t=ecdctoXQNURcfX%2FVm8MQdPtiBLttYO4HqJrZ1yNsNcxUqDe6DM4ovlQT4HdHZJMh6guT&inputT=2590&oq=C%23%20lamb&rsv_n=2&bs=c%23%20lambda
8, &愤怒的小鸟&给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法.
& Vector3 v
代表初速度 v' 代表现在的速度,假设小鸟是沿的 z 轴也就是 transform.forward 方向运动的质量为 1 ,那么 v‘=v-new Vector3(0,g*t,f*t) , transform.Translate(v') 做的就是抛物线运动( g 为重力加速度不要用现实中的需要自己调试, f 为阻力也要自己调试设置, t 为时间)
建议:本文以问题题目和知识点为重,至于答案的对与错和答案的完整性,自己斟酌哦,当然你有好的答案可以告我哦,谢谢!
文章整合中参考的网址链接:
/content/13/357.shtml
/forum/read.php?tid=11171&fid=2&page=1
/thread-.html
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 unityhelper错误 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信