搜档网
当前位置:搜档网 › unity常用知识

unity常用知识

unity常用知识
unity常用知识

关于延迟:Unity 延迟执行一段代码的较为优雅的方式

在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍。

一般会用到Invoke和InvokeRepeating方法。顾名思义,第一个是执行一次,第二个是重复执行。

看下定义:

void Invoke(string methodName, float time);

第一个参数是方法名(注意是字符串形式),并不是更方便的委托。第二个是延时多少秒。只执行一次。voidInvokeRepeating(string methodName, float time, float repeatRate);

InvokeRepeating第二个参数是延时多少秒后开始,第三个参数是每次执行间隔的秒数。

你有没有发现这两个方法有个弊端,就是必须输入方法名!也就是我说,如果我想延时执行某段代码,必须把代码放在某个方法里,然后使用这Invoke或者InvokeRepeating方法来执行。

这样对于上下文变量、属性的引用就会尤为不便,而且不能传参数!!!尼玛,要他还有何用?

我猜你一定用过这样的方法。没错,“协同”,听起来还挺高大上的名字啊。

用StartCoroutine来执行一个以IEnumerator为返回值的方法,通常用于异步下载啊,等比较耗时又不能让游戏卡死的情况。

还有一个好的类WaitForSeconds,对,它就一个构造函数,用来延时的(延时………………比万艾可好用?比希爱力好用?)。

好了不废话了,以下是我自用的延时方法,放在一个类里以静态方法存在。可以在任何时候任何地方延时指定秒数的代码。

usingUnityEngine;

usingSystem.Collections;

using System;

public class DelayToInvoke : MonoBehaviour

{

public static IEnumeratorDelayToInvokeDo(Action action, float delaySeconds)

{

yield return new WaitForSeconds(delaySeconds);

action();

}

}

如何使用呢?

比如我点击NGUI的一个Button,则

voidOnClick()

{

StartCoroutine(DelayToInvoke.DelayToInvokeDo(() =>

{

Application.LoadLevel(“Option”);

}, 0.1f));

}

看到了吧

Application.LoadLevel(“Option”);就是想要延时执行的代码段。

你可以写很长很长。Action,随便搞。

iTween的使用

移动模型时候用到的几个核心方法如下:

iTween.MoveTo():让模型移动到一个位置,它的底层函数是通过动态的修改模型每一帧的transform.position完成的,所以它会百分之百到达目标点,不会出现误差。

iTween.MoveFrom():它和上面的一样,iTween.MoveTo()是将模型移动到目标位置,而iTween.MoveFrom()是将模型从目标位置移动到原始位置。

iTween.MoveAdd() 和iTween.MoveBy()底层实现一样,大家可以去

看源码。处理移动时采用的是transform.Translate也就是API的平移,

这样在处理移动的时候可能会出现一些误差,但是效果好点。

iTween.MoveUpdate():和iTween.MoveTo()差不多,只是它需要放在循环或者Update()中。

有了核心的移动方法后,我们就来了解iTween强大的核心参数,与事件。移动方法的参数都差不多,所以这里我就以MoveTo来做例子。直接上代码。Move.cs绑定在需要移动的游戏对象身上。

1 2 3 4 5 6 7 8 9

10

11

12 using UnityEngine;

using System.Collections;

public class Move : MonoBehaviour

{

void Start()

{

//键值对儿的形式保存iTween所用到的参数

Hashtableargs = new Hashtable();

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56 //这里是设置类型,iTween的类型又很多种,在源码中的枚举EaseType中//例如移动的特效,先震动在移动、先后退在移动、先加速在变速、等等args.Add("easeType", iTween.EaseType.easeInOutExpo);

//移动的速度,

args.Add("speed",10f);

//移动的整体时间。如果与speed共存那么优先speed

args.Add("time",1f);

//这个是处理颜色的。可以看源码的那个枚举。

args.Add("NamedValueColor","_SpecColor");

//延迟执行时间

args.Add("delay", 0.1f);

//移动的过程中面朝一个点

args.Add("looktarget",Vector3.zero);

//三个循环类型none loop pingPong (一般循环来回)

//args.Add("loopType", "none");

//args.Add("loopType", "loop");

args.Add("loopType", "pingPong");

//处理移动过程中的事件。

//开始发生移动时调用AnimationStart方法,5.0表示它的参数

args.Add("onstart", "AnimationStart");

args.Add("onstartparams", 5.0f);

//设置接受方法的对象,默认是自身接受,这里也可以改成别的对象接受,//那么就得在接收对象的脚本中实现AnimationStart方法。

args.Add("onstarttarget", gameObject);

//移动结束时调用,参数和上面类似

args.Add("oncomplete", "AnimationEnd");

args.Add("oncompleteparams", "end");

args.Add("oncompletetarget", gameObject);

//移动中调用,参数和上面类似

args.Add("onupdate", "AnimationUpdate");

args.Add("onupdatetarget", gameObject);

args.Add("onupdateparams", true);

// x y z 标示移动的位置。

args.Add("x",5);

args.Add("y",5);

args.Add("z",1);

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

//当然也可以写Vector3

//args.Add("position",Vectoe3.zero);

//最终让改对象开始移动

iTween.MoveTo(gameObject,args);

}

//对象移动中调用

void AnimationUpdate(bool f)

{

Debug.Log("update :" + f);

}

//对象开始移动时调用

void AnimationStart(float f)

{

Debug.Log("start :" + f);

}

//对象移动时调用

void AnimationEnd(string f)

{

Debug.Log("end : " + f);

}

}

在看看iTween中的寻路算法,其实非常非常的简单,我们几乎不用做任何事情。如下图所示,我们能清楚的看到编辑了一个简单的寻路,我们通过iTween 来实现小人跑步到终点。

Path.cs 绑在主角身上即可。

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27 using UnityEngine;

using System.Collections;

public class Path : MonoBehaviour {

//路径寻路中的所有点

public Transform [] paths;

void Start ()

{

Hashtableargs = new Hashtable();

//设置路径的点

args.Add("path",paths);

//设置类型为线性,线性效果会好一些。

args.Add("easeType", iTween.EaseType.linear);

//设置寻路的速度

args.Add("speed",10f);

//是否先从原始位置走到路径中第一个点的位置

args.Add("movetopath",true);

//是否让模型始终面朝当面目标的方向,拐弯的地方会自动旋转模型

//如果你发现你的模型在寻路的时候始终都是一个方向那么一定要打开这个

args.Add("orienttopath",true);

//让模型开始寻路

iTween.MoveTo(gameObject,args);

}

28

29

30

31

32

33

34

35

36

37

void OnDrawGizmos()

{

//在scene视图中绘制出路径与线

iTween.DrawLine(paths,Color.yellow);

iTween.DrawPath(paths,Color.red);

}

}

运行后即可看到主角自动寻路的效果。

如果你仔细阅读到这里你可能会想到,iTween做的东西有点

等等这类的方法。假设不使用

iTween这个类就用源生的API其实也可以实现上述的所有效果。只有iTween帮我们封装的更好一些,平滑过渡的效果更好一些,而且还能增加一些特效。只是这些特效与动画全都是iTween通过数学的方法计算出来。因为底层它们使用的也是简单的移动旋转API中的方法。我觉得寻路的话可以使用Unity自带的方法(因为是官方提供的),处理一些简单的动画使用iTween 还是挺不错的,因为更加形象。

截图

Unity3d之截图方法

分类:Unity3D2013-11-28 17:13 1014人阅读评论(2) 收藏举报AnYuanLzhunityunity3d截屏

下面是我总结的、在u3d中的,三种截屏方法:

1、使用Application类下的CaptureScreenshot方法。

[csharp] view plaincopy

1.void CaptureScreen()

2.{

3. Application.CaptureScreenshot("Screenshot.png", 0);

4.}

这个方法,截取的是某一帧时整个游戏的画面,或者说是全屏截图吧。

a、不能针对某一个相机(camera)的画面,进行截图。

b、对局部画面截图,实现起来不方便,效率也低,不建议在项目中使用:

虽然CaptureScreenshot这个方法呢,本身是不要做到这一点的。但是我们可以走曲线救国的路线来实现它。思路是这样的:你可以先用这个方法截图一个全屏,然后通过路径获取到这个截图;接下来就通过相关的图形类来,取得这个截图的局部区域并保存下来,这样就能得到一个局部截图了。在这里我就不实现它了,不过有兴趣的可以试试,肯定是可以实现的。

2、这第二个截图的方法是,使用Texture2d类下的相关方法,也可实现截图功能。[csharp] view plaincopy

1.///

2./// Captures the screenshot2.

3.///

4./// The screenshot2.

5./// Rect.截图的区域,左下角为o点

6.Texture2D CaptureScreenshot2(Rect rect)

7.{

8.// 先创建一个的空纹理,大小可根据实现需要来设置

9. Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height,

TextureFormat.RGB24,false);

10.

11.// 读取屏幕像素信息并存储为纹理数据,

12. screenShot.ReadPixels(rect, 0, 0);

13. screenShot.Apply();

14.

15.// 然后将这些纹理数据,成一个png图片文件

16.byte[] bytes = screenShot.EncodeToPNG();

17.string filename = Application.dataPath + "/Screenshot.png";

18. System.IO.File.WriteAllBytes(filename, bytes);

19. Debug.Log(string.Format("截屏了一张图片: {0}", filename));

20.

21.// 最后,我返回这个Texture2d对象,这样我们直接,所这个截图图示在游戏中,当然这

个根据自己的需求的。

22.return screenShot;

23.}

截全屏(如下图, 注:有ui):

CaptureScreenshot2( new Rect( Screen.width*0f, Screen.height*0f, Screen.width*1f, Screen.height*1f));

截中间4分之(如下图):

CaptureScreenshot2( new Rect( Screen.width*0.25f, Screen.height*0.25f,

Screen.width*0.5f, Screen.height*0.5f));

这里使用了几个Texture2d类的方法,使用上也有一些要注意的地方,自己看吧。

当然,这个方法也不要到实现针对某个相机的截图的功能。不过关键接口已经出现了,它就是Texture2d.ReadPixels(),这段就不说了,接着往下看吧!

3、这第三个方法,最牛了,可以针对某个相机进行截图。

这样的话,我就可截下,我的Avatar在游戏中场景中所看的画面了,UI界面(用一个专门的camera显示)什么的是不应该有的。要做到这一点,我们应该将分出一个camera来专门显示ui界面,用另一个camera相机来场景显示场景画面。然后,我们只对场景相机进行截屏就是了。所以这关键点就是:如何实现对某个相机进行截屏了。这里用到一个新的类是RenderTexture。

代码如下:

[csharp] view plaincopy

1.///

2./// 对相机截图。

3.///

4./// The screenshot2.

5./// Camera.要被截屏的相机

6./// Rect.截屏的区域

7.Texture2D CaptureCamera(Camera camera, Rect rect)

8.{

9.// 创建一个RenderTexture对象

10. RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height,

0);

11.// 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机

12. camera.targetTexture = rt;

13. camera.Render();

14.//ps: --- 如果这样加上第二个相机,可以实现只截图某几个指定的相机一起看到的

图像。

15.//ps: camera2.targetTexture = rt;

16.//ps: camera2.Render();

17.//ps: --------------------------------------------------------------

-----

18.

19.// 激活这个rt, 并从中中读取像素。

20. RenderTexture.active = rt;

21. Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height,

TextureFormat.RGB24,false);

22. screenShot.ReadPixels(rect, 0, 0);// 注:这个时候,它是从

RenderTexture.active中读取像素

23. screenShot.Apply();

24.

25.// 重置相关参数,以使用camera继续在屏幕上显示

26. camera.targetTexture = null;

27.//ps: camera2.targetTexture = null;

28. RenderTexture.active = null; // JC: added to avoid errors

29. GameObject.Destroy(rt);

30.// 最后将这些纹理数据,成一个png图片文件

31.byte[] bytes = screenShot.EncodeToPNG();

32.string filename = Application.dataPath + "/Screenshot.png";

33. System.IO.File.WriteAllBytes(filename, bytes);

34. Debug.Log(string.Format("截屏了一张照片: {0}", filename));

35.

36.return screenShot;

37.}

多的我就不说了,相关知识自己去找资料吧,因为我也不懂!

直接上图了。

无ui的全屏图:

只有ui的全屏图:

有ui有场景的全屏图(只指定这两个相机哦,相关提示在代码的“//ps”中):

碰撞检测

相关API:

1、Ray Camera.main.ScreenPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到屏幕指定一个点

2、Ray Camera.main.ViewportPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点

3、Ray 射线类

4、RaycastHit 光线投射碰撞信息

5、

bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMas k)

当光线投射与任何碰撞器交叉时为真,否则为假。

bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distanc e, int layerMask)

在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。

bool Physics.Raycast(Ray ray, float distance, int layerMask)

当光线投射与任何碰撞器交叉时为真,否则为假。

bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float d istance, int layerMask)

当光线投射与任何碰撞器交叉时为真,否则为假。

注意:如果从一个球型体的内部到外部用光线投射,返回为假。

参数理解:

origin : 在世界坐标中射线的起始点

direction: 射线的方向

distance: 射线的长度

hit: 使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。

layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。选择性的碰撞6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)

投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。

列子如下:

using UnityEngine;

using System.Collections;

public class RayTest : MonoBehaviour {

// Use this for initialization

void Start ()

{

mainCrma = Camera.main;

}

private Camera mainCrma;

private RaycastHit objhit;

private Ray _ray;

void Update ()

{

if (Input.GetMouseButtonDown(0))

{

_ray=mainCrma.ScreenPointToRay(Input.mousePosition);//从摄像机发出一条射线,到点击的坐标

Debug.DrawLine(_ray.origin,objhit.point,Color.red,2);//显示一条射线,只有在scene视图中才能看到

if (Physics.Raycast (_ray, out objhit, 100))

{

GameObject gameObj = objhit.collider.gameObject;

Debug.Log("Hit objname:"+https://www.sodocs.net/doc/1c5705893.html,+"Hit objlayer:"+https://www.sodocs.net/doc/1c5705893.html,yer);

}

}

}

}

layerMask参数:

Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers)

其实很简单:1 << 10 打开第10的层。

~(1 << 10) 打开除了第10之外的层。

~(1 << 0) 打开所有的层。

(1 << 10) | (1 << 8) 打开第10和第8的层。

列子如下:

using UnityEngine;

using System.Collections;

public class LayerMaskTest : MonoBehaviour {

// Use this for initialization

void Start ()

{

mainCrma = Camera.main;

mask = 1<<( https://www.sodocs.net/doc/1c5705893.html,ToLayer("cube"));//实例化mask到cube这个自定义的层级之上。

}

//private LayerMask mask 1<<10;

private LayerMask mask;

private Camera mainCrma;

private RaycastHit objhit;

private Ray _ray;

void Update ()

{

if (Input.GetMouseButtonDown(0))

{

_ray=mainCrma.ScreenPointToRay(Input.mousePosition);//从摄像机发出一条射线,到点击的坐标Debug.DrawLine(_ray.origin,objhit.point,Color.red,2);//划出射线,只有在scene视图中才能看到

if (Physics.Raycast (_ray,out objhit, 100, mask.value))

{

GameObject gameObj = objhit.collider.gameObject;

Debug.Log("Hit objname:"+https://www.sodocs.net/doc/1c5705893.html,+"--Hit objlayerName:"+https://www.sodocs.net/doc/1c5705893.html,yerToName (10));

}

}

}

}

异步加载

异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务。在同步加载游戏场景的时候通常会使用方法Application.LoadLevel(“yourScene”); 这句代码执行完毕后程序会干什么呢??如下图所示,这是我随便找了一个游戏场景,在Hierarchy视图中我们可以看到该场景中“天生”的所有游戏对象。天生的意思就是运行程序前该场景中就已经存在的所有游戏对象。然后这些对象就会在执行完Application.LoadLevel(“yourScene”);方法后加载至内存当中。如果该场景中的游戏对象过多那么瞬间将会出现卡一下的情况,因为LoadLevel()方法是同步进行的。MOMO把这种加载起个名字叫A形式加载。

下面我说说“后天“加载的游戏对象。意思是这些游戏对象是通过脚本动态的创建出来的。比如常用方法:

1 GameObjectObj = (GameObject)Instantiate(prefab);

这句代码执行完毕后同样会在Hierarchy视图中添加对应的游戏对象。MOMO把这种加载起个名字叫B形式加载。

下面我们学习异步加载游戏场景,异步异步顾名思义就是不影响当前游戏场景的前提下加载新场景。通常异步加载的方式分为两种:第一种是异步加载新游戏场景,当新场景加载完成后进入新场景并且销毁之前的场景。第二种:同样异步加载新场景,新场景加载完毕后,保留旧场景的游戏对象并且进入新场景。这里加载的内容就是上面提到的A形式加载。然后B形式加载不会记入这里的加载。

第一种异步加载游戏场景对应的方法是:

1 Application.LoadLevelAsync("yourScene");

第二种异步家在游戏场景对应的方法是:

1 Application.LoadLevelAdditiveAsync ("yourScene");

这两种方法加载的方式完全一样。异步加载其实重要还是应用于游戏LOADING界面,毕竟LOADING如果采用同步的机制会影响用户体验,说到这里MOMO告诉大家如何在Unity中制作游戏进度条。我们应当在Unity 中创建一个专门用于读取进度的场景,假设A场景到C场景,我们应当让A场景先到读取进度的场景B场景,当异步任务完成后在进入C场景。A –》B -》C ,在B场景中绘制游戏进度条或读取动画。因为B场景仅仅是个显示LOADING动画的场景,所以读取该场景是瞬间就完成的。

程序在切换场景时应当有一个全全局的静态变量来记录简要读取的场景名称。这里简单的写一下。

1 2 3 4 5 6 7 8 using UnityEngine;

using System.Collections;

public class Globe

{

//在这里记录当前切换场景的名称

public static string loadName;

}

在A场景中通过某些触发条件调用LoadLevel进入B场景。

1 2 3 4 //记录LOADING场景中需要读取的C场景名称Globe.loadName = "C";

//先进入B场景

Application.LoadLevel ("B");

OK我们在B场景中异步读取C场景与播放读取动画,Loading.cs绑定在B 场景的摄像机对象身上。当C场景异步读取完毕后即可直接进入C场景。

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30 using UnityEngine;

using System.Collections;

public class Loading : MonoBehaviour {

private float fps = 10.0f;

private float time;

//一组动画的贴图,在编辑器中赋值。

public Texture2D[] animations;

private intnowFram;

//异步对象

AsyncOperationasync;

//读取场景的进度,它的取值范围在0 - 1 之间。

int progress = 0;

void Start()

{

//在这里开启一个异步任务,

//进入loadScene方法。

StartCoroutine(loadScene());

}

//注意这里返回值一定是IEnumerator

IEnumeratorloadScene()

{

//异步读取场景。

//Globe.loadName就是A场景中需要读取的C场景名称。

async = Application.LoadLevelAsync(Globe.loadName);

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

//读取完毕后返回,系统会自动进入C场景

yield return async;

}

void OnGUI()

{

//因为在异步读取场景,

//所以这里我们可以刷新UI

DrawAnimation(animations);

}

void Update()

{

//在这里计算读取的进度,

//progress 的取值范围在0.1 - 1之间,但是它不会等于1

//也就是说progress可能是0.9的时候就直接进入新场景了

//所以在写进度条的时候需要注意一下。

//为了计算百分比所以直接乘以100即可

progress = (int)(async.progress *100);

//有了读取进度的数值,大家可以自行制作进度条啦。

Debug.Log("xuanyusong" +progress);

}

//这是一个简单绘制2D动画的方法,没什么好说的。

void DrawAnimation(Texture2D[] tex)

{

time += Time.deltaTime;

if(time >= 1.0 / fps){

nowFram++;

time = 0;

if(nowFram>= tex.Length)

{

nowFram = 0;

}

}

75 76 77 78 79 80 81 82

GUI.DrawTexture(new Rect( 100,100,40,60) ,tex[nowFram] );

//在这里显示读取的进度。

https://www.sodocs.net/doc/1c5705893.html,bel(new Rect( 100,180,300,60), "lOADING!!!!!" + progress);

}

}

OK 下面我们继续学习在游戏场景中加载对象,文章的开始MOMO 已经告诉大家,游戏场景中Hierarchy 视图中的所有的对象在切换场景的时候都会加载。其实有一种方法可以让某些游戏对象不会被加载,如下图所示,首先在

Hierarchy 视图中选择一个游戏对象,在右侧监测面板视图中我们可以看到一个 “小对勾”默认情况下是勾选状态,说明该游戏对象处于激活状态,如果点掉的话该对象将被隐藏。这个小功能在开发中其实用处非常大,请大家务必记住哈。

此时此刻大家相像一个游戏场景,默认进入的时候是没有任何游戏对象的,然后运行游戏时开启一个异步任务将它们一个一个的加载显示出来,这种方式适合异步的加载一个比较大的游戏场景。

Test.cs 把它挂在摄像机对象中。

1

using UnityEngine;

2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39 using System.Collections;

public class Test : MonoBehaviour {

//这里是需要加载激活的游戏对象

public GameObject [] Objects;

//当前加载的进度

intload_index =0;

void Start ()

{

//开启一个异步任务,加载模型。

StartCoroutine(loadObject());

}

IEnumeratorloadObject()

{

//便利所有游戏对象

foreach(GameObjectobj in Objects)

{

//激活游戏对象

obj.active = true;

//记录当前加载的对象

load_index ++;

//这里可以理解为通知主线程刷新UI

yield return 0;

}

//全部便利完毕返回

yield return 0;

}

void OnGUI ()

{

//显示加载的进度

GUILayout.Box("当前加载的对象ID是:" + load_index);

}

}

如下图所示,我们把需要加载的游戏对象以数组的形式放在Objects数组中,因为这些对象属于未激活状态,所以不能通过Find 等方法在脚步那种中找到

史上最全的Unity面试题(三)

二十一:物理更新一般放在哪个系统函数里? FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。 二十二:在场景中放置多个Camera并同时处于活动状态会发生什么?游戏界面可以看到很多摄像机的混合。 二十三:如何销毁一个UnityEngine.Object及其子类? 使用Destroy()方法; 二十四:请描述为什么Unity3d中会发生在组件上出现数据丢失的情况一般是组件上绑定的物体对象被删除了 二十五:LOD是什么,优缺点是什么? LOD(Level of detail)多层次细节,是最常用的游戏优化技术。它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。缺点是增加了内存。 二十六:MipMap是什么,作用? MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。 二十七:请描述Interface与抽象类之间的不同 抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面,不能具体的实现代码在成员方法中。类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。

U3d面试题(全)

换点 什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。 主要步骤有: 本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。 一.如何优化内存? 有很多种方式,例如 1.压缩自带类库; 2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉; 3.释放AssetBundle占用的资源; 4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小; 5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。 三、动态加载资源的方式?(有时候也问区别,具体请百度) 1.Resources.Load(); 2.AssetBundle 四、什么是协同程序?

在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。 五、你用过哪些插件? (最好多熟悉几个插件,问的时候好回答) ======================================= ============= 1.使用Unity3d实现2d游戏,有几种方式? 1.使用本身的GUI; 2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴; 3.使用2d插件,如:2DToolKit; 2.Unity3d中的碰撞器和触发器的区别? 碰撞器有碰撞的效果,IsTrigger=false,可以调用OnCollisionEnter/Stay/Exit函数; 触发器没有碰撞效果,IsTrigger=true,可以调用OnTriggerEnter/Stay/Exit函数。 3.物体发生碰撞的必要条件 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。

四年级数学下册知识点大全

四年级下册知识整理 第一单元平移、旋转和轴对称 1、平移和旋转不改变图形的形状和大小,只是改变图形的位置。 2、与时针旋转方向相同的是顺时针旋转,与时针旋转方向相反的是逆时针旋转。 3、把一个图形沿一条直线对折后,折痕两边完全重合的图形叫做轴对称图形,折痕所在的直线叫做对称轴。 4、所学图形中是轴对称图形:有1条对称轴有等腰三角形和等腰梯形;有2条对称轴是长方形;有3条对称轴是等边三角形;有4条对称轴是正方形;有无数条对称轴是圆。 第二单元认识多位数 2、1个千亿=10个百亿1个百亿=10个十亿1个十亿=10个亿 1个千万=10个百万1个百万=10个十万1个十万=10个万 1个千=10个百1个百=10个十1个十=10个一 3、每相邻两个计数单位间的进率都是10,这样的计数法叫做十进制计数法。 4、多位数的读法:先分级,从右到左每四位一级,从高位读起,一级一级往下读,每级的读法和个级一样,读好“亿级”加“亿”,读好“万级”加“万”。 例如:3605 5200 6000读作三千零五亿五千二百万六千 5、多位数的写法:从高位写起,一级一级往下写,每级的写法与个级一样,除最高级可以不满四位,其余每级都要写满四位。例如:三十亿四千五百二十万三千四百写作:30 4520 3400 6、把一个数改写成亿或者万为单元的数:“改写”不改变数的大小所以用“=”号连接。方法是一找二去三添。 例如:把1230000改为万为单元的数。 一找,找到万位“123 0000”,二去,去掉3后面的四个0得到123,三添,在123后面添上“万”。所以1230000=123万。 例如:把12300000000改写成亿为单位的数。 一找,找到亿位“123 0000 0000”,二去,去掉3后面的8个0得到123,三添,在123后面添上亿。 所以12300000000=123亿 7、省略万或亿位后面的尾数:省略万位或亿位后面的尾数用四舍五入法,得到的数可能比原数大(五入时),也可能比原数小(四舍时)。 例如:省略2368520万位后面的尾数。

游戏公司unity面试题

Unity3d 程序员面试题 1.什么是渲染管道?渲染管道有哪些步骤? 答:渲染管道是指程序为了在显示器上输出图像而经过的一系列必要操作. 渲染管道的步骤有: 本地空间->世界空间->视图空间->背面剔除->光照计算->相机裁剪->投影计算->视口变换->光栅化 2.Unity3d有几种加载Prefab的方式? 答: 1.静态引用,建一个public变量,在Inspector里把prefab拉上去,在场景运行时会自动加载,用的时候instantiate 2.Resource.Load, 在调用该函数后加载, Load以后instantiate 3.AssetBundle.Load 在调用该函数后加载, Load以后instantiate 3.什么是协同程序? 答:在主线程序运行时同时开启另一段逻辑处理,来协助当前程序的执行.换名话说. 开启协程就象开启一个线程. 4.你例举几个你用过的Unity3d插件,并说明它们的用途和特点. 5.Unity3d中的碰撞器Collision和触发器Trigger的区别? 答:碰撞器有碰撞效果, IsTrigger = false 在碰撞发生时会调用 OnCollisionEnter,OnCollisionStay,OnCollisionExit函数. 触发器没有碰撞效果, IsTrigger = true, 可被触发时会调用 OnTriggerEnter,OnTriggerStay,OnTriggerExit函数 6.物体发生碰撞的必要条件 答:两件物体都必须有碰撞组件(Collider),其中一物体还必须带有Rigidbody刚体组件 7.在物体发生碰撞的整个过程中,有几个阶段,不同阶段分别调用哪些函数 答:1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit 8.在unity3D中有Update还有FixedUpdate,物理引擎的更新一般放在哪个系统函数里,为什 么? 答:物理引擎的更新一般放在FixedUpdate里面,和Update不同,FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降.因为FixedUpdate是每固定帧绘制时执行一次,所以更适合做物理控制. 9.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中? 答:移动摄像机的动作应该放在LateUpdate函数中.在每帧执行完毕调用,它是在所有Update结束后才调用,比较适合用于命令脚本的执行.如果不是在所有Update执行完后就移动摄像机可能会出现摄像机移动了,视口里的内容还没有更新的空帧现象.

Unity3d面试题总结

Unity3d面试题总结

本人总结的一些Unity3d高频面试题目,希望能够帮助到大家。限于个人水平有限,只附上一些参考答案。 ====================================== = 数据结构和算法很重要,图形学也很重要! 大的游戏公司很看重个人基础、综合能力; 小公司看你实际工作能力,看你的Demo。 高频问答的问题: 一.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。 主要步骤有: 本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。 二.如何优化内存? 有很多种方式,例如 1.压缩自带类库; 2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;

3.释放AssetBundle占用的资源; 4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小; 5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。 三、动态加载资源的方式?(有时候也问区别,具体请百度) 1.Resources.Load(); 2.AssetBundle 四、什么是协同程序? 在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。能够用来控制运动、序列以及对象的行为。 五、你用过哪些插件? (最好多熟悉几个插件,问的时候好回答) ====================================== ============== 1.使用Unity3d实现2d游戏,有几种方式? 1.使用本身的GUI; 2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴; 3.使用2d插件,如:2DToolKit; 2.Unity3d中的碰撞器和触发器的区别?

小学四年级语文基础知识要点汇总

小学四年级语文基础知识要点汇总 考试将近,同学们都准备好了吗?为了让大家更有规律有目标地复习,小编在此为大家整理了小学四年级语文基础知识要点汇总,希望能够帮助到大家。 一、生字篇 宽阔笼罩薄雾沸腾奔腾依旧恢复灿烂竹竿规律缝隙 照耀树梢 静寂均匀重叠空隙叶柄触角痕迹逐渐休想 住宅隐蔽选择住址 洞穴柔弱搜索隐藏倾斜平坦扒土 宽阔洋溢允许围墙隆冬孤独训斥覆盖凝视冷酷愉快 拆除融化剩下伐木高傲郑重京剧滋味倘若侍候脾气 责备邻近性格任凭贪玩尽职稿纸梅花跌倒开辟盘旋 城砖城墙屯兵堡垒打仗呼应肩膀智慧凝结长廊柱子 建筑宫殿葱郁掩映朱红堤岸雕刻狮子间隔懒惰俗语

平衡联结 跨越海峡桂树苍白红润移植幸运台湾袭击 期待空旷暂停伯父模范巡警吵嚷惩处抱负胸怀喝彩 推荐眼帘删掉规范燥热融洽黄昏客厅改观程度依赖 寄托幻想洞察联系恐龙凶猛鸽子描绘轻盈敏捷白茫茫告示牌火辣辣 二、课本四字成语篇 昂首东望若隐若现风平浪静水天相接横贯江面齐头并进漫天卷地 引人注意毫不可惜随遇而安鲜花盛开绿树成阴鲜果飘香狂风大作 雪花飞舞草翠花开局促不安毫不相让一日三餐从容不迫扬长而去 空空如也供养不周不胜其烦架子十足屏息凝视变化多端枝折花落 气魄雄伟神清气爽金碧辉煌隐隐约约姿态不一山洪暴发清波漾漾 理所当然谈何容易平安无事突如其来骨肉同胞血脉亲情帝国主义 灯红酒绿热闹非凡风和日丽耀武扬威得意扬扬振兴中华呼风唤雨

出乎意料农耕社会腾云驾雾程控电话归根到底欣喜若狂形态各异人声鼎沸山崩地裂不容置疑神秘莫测神来之笔千姿百态人迹罕至尺有所短寸有所长用武之地美味佳肴应接不暇坐卧不安消磨时光不可思议精神大振枉费心机引吭大叫慢条斯理趁其不备神态自若电话号码浩如烟海枯枝败叶久经沙场南征北战所向披靡若有所思殊死拼搏号啕大哭恍然大悟协调有序形单影只和睦相处远洋船舶患难与共受益匪浅年少气盛年逾古稀筋疲力尽铿锵有力心! 三、词语解释篇 岭——山峰,山脉。 峰——高而尖的山头。 缘——因为 题——书写 豚——猪 疑——以为,怀疑

小学四年级数学知识点汇总

★数学考试应注意:(四年级数学知识点汇总) 1、用手指着认真读题至少两遍; 2、遇到不会的题不要停留太长时间,可在题目的前面做记号。(如:“?”) 3、画图、连线时必须用尺子; 4、检查时,要注意是否有漏写、少写的情况; 1、加、减的意义和各部分间的关系 (1)把两个数合并成一个数的运算,叫做加法。 (2)相加的两个数叫做加数。加得的数叫做和。 (3)已知两个数的积与其中的一个加数,求另一个加数的运算,叫做减法。 (4)在减法中,已知的和叫做被就减数……。减法是加法的逆运算。 (5)加法各部分间的关系: 和=加数+加数 加数=和-另一个加数 (6)减法各部分间的关系: 差=被减数-减数 减数=被减数-差 被减数=减数+差

2、乘、除法的意义和各部分间的关系 (1)求几个相同加数的和和的简便运算,叫做乘法。(2)相乘的两个数叫做因数。乘得的数叫做积。 (3)已知两个因数的积与其中一个因数,求另一个因数的运算,叫做除法。 (4)在除法中,已知的积叫做被除数……。除法是乘法的逆运算。 (5)乘法各部分间的关系: 积=因数×因数 因数=积÷另一个因数 (6)除法各部分间的关系: 商=被除数÷除数 除数=被除数×商 被除数=商×除数 (7)有余数的除法, 被除数=商×除数+余数 2、加法、减法、乘法、除法统称为四则运算 3、四则混和运算的顺序 (1)在没有括号的算式里,如果只有加、减法,或者只有乘、除法,都要按(从左往右)的顺序计算;

(2)在没有括号的算式里,如果既有乘、除法,又有加、减法,要先算(乘、除法),后算(加、减法);(先乘除,后加减) (3)在有括号的算式里,要先算括号里面的,后算括号外面的。 4、有关0的计算 ①一个数和0相加,结果还得原数: a + 0 =a 0 + a = a ②一个数减去0,结果还得这个数: a -0 = a ③一个数减去它自己,结果得零: a -a = 0 ④一个数和0相乘,结果得0: a ×0 = 0 ; 0 ×a = 0 ⑤0除以一个非0的数,结果得0: 0 ÷a = 0 ; ⑥0不能做除数: a÷0 = (无意义) 5、租船问题。 解答租船问题的方法:先假设、再调整。

unity3d笔试题

Unity 1. u3d用u3d实现2d游戏,有几种方式 1.利用引擎自带的GUI 2.把摄像机设为Orthographic,用面片作为2d元素 3.利用第三方插件:NGUI、2dToolkit 2. u3d物体发生碰撞时,有几个阶段,分别对应的函数 三个阶段,OnCollisionEnter/Stay/Exit()函数 提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数 (string, int) 与(string) 从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法(按执行顺序书写至少五个)。 Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> OnDisable –> OnDestroy 下如何安全的在不同工程迁移asset数据 方法1,可以把assets目录和Library目录一起迁移, 方法2,导出包Export Package 方法3,用unity带的assets server功能或meta功能 Ngui 1 NGUI:有两张图集Altas1和Altas2,Altas1中有一张图Background,Altas2中有一张图叫Element,分别作出三个Sprite B1、E、B2,如何让这三个Sprite在镜头前显示顺序为B2盖住E且E盖住B1(如下图所示) 将B1和E放在在同一个Panel P1下,调整E的depth高于B1;将B2放在另一个Panel P2下,将P2所在的z轴调整为-1(或更小的数) 2 NGUI:图集里有图A,使用哪种控件可以实现在场景中显示为图B: 图A 图B SlicedSprite,设置这张图在图集中的Border的上下左右边框范围,再拉伸UISprite 3 NGUI: Sprite有哪几种分别有什么用途 Sprite(一张普通的图片)

四年级知识点大全

大数 一、亿以内数的认识 1、计数单位:一(个)、十、百、千、万??亿都是计数单位。 2、数位:在用数字表示数的时候,这些计数单位要按照一定的顺序排列起来,它们所占的位置叫做数位。 3、数级:按照我国的计数习惯,从右边起,每四个数位是一个数级。包括 个级、万级、亿级等。 4、十进制计数法:每相邻两个计数单位之间的进率都是十的计数方法叫十进制计数法。 二、含有两级的数的读法 1、先读万级,再读个级。 2、万级的数按照个级的数的读法来读,再在后面加上一个“万”字。 3、每级末尾不管有几个0,都不读;其他数位上有一个0 或连续几个0,都只读一个0。 三、亿以内数的写法 1)先写万级,再写个级。 2)哪个数位上一个单位也没有,就在那个数位上写0

四、比较两个数的大小 1、位数不同的两个数,位数高的数大。 2、位数相同的两个数,从最高位比起,最高位上的数大的那个数就大,如 果最高位上的数相同,就比较下一个数位上的数。 五、亿以上数的认识 1、亿以上的数的读法 1)先分级,再从最高位读起。 2)读完亿级或万级的数,要加“亿”字或“万”字。 3)还要注意什么位置上的0 不读,什么位置上的0 要读,读几个0。 2、亿以上的数的写法 1)先看这个数有几级,再从最高位写起。 2)哪个数位上一个单位也没有,就在那个数位上写0。 3、1 亿有多大 要知道1 亿张纸摞起来有多高,可以测量100张纸的厚度,计算得到1亿张纸摞起来有1 万多米高,比珠穆朗玛峰还高。 小数 一、小数的意义和性质 1、分母是10、100、1000??的分数可以用小数来表示。 2、小数是十进制分数的另一种表现形式。 3、小数的计数单位是十分之一、百分之一、千分之一??分别写作0.1 、0.01 、0.001 ?? 4、每相邻两个计数单位间的进率是10。 5、小数的读写法:读法:整数部分按照整数读法来读,小数部分要顺次读出每一个数。写法:整数部分按照整数的写法来写,整数部分是0就写0,小数部分依次写出每一个数。 6、小数的性质:小数的末尾添上“ 0”或去掉“ 0”,小数的大小不变。注意:小数中间的“ 0”不能去掉,取近似数时有一些末尾的“ 0”不能去掉。作用可以化简小数等。 7、小数大小比较:先比较整数部分,整数部分相同比较十分位,十分位相同比较百分位,?? 8、小数点位置移动引起小数大小变化规律:小数点向右:移动一位,小数就扩大到原数的10 倍;移动两位,小数就扩大到原数的100 倍;移动三位,小数就扩大到原数的1000 倍; 小数点向左:移动一位,小数就缩小10 倍,(小数就缩小为原数的);移动两

Unity面试题

最近unity3d找工作有些受挫,自己也开始补课了。 下面把这段时间看到的些面试题供出来让大家也学习下,题目只是面试官选拔人才的一部分,在研究面试题目的过程中,多检测下自己的不足,及时温习或补习下,最终学到真本事才是最重要的。 祝自己也祝大家好运哈! 题目中有些答案有网上搜的,也有个人整理的,有错误或不足的地方,望指正,谢谢! 文章最后会有参考的一些网址或资料的链接,有想看原址的朋友可以直接跳到最后哦。 题目归类区(看题目字体颜色识第几部分) ps:下面题目可能稍有点多,翻页会较麻烦,根据题目的颜色辨别是第几部分吧(超链接功能不会,也懒得做了) 第一部分 1.请简述值类型与引用类型的区别 2.C#中所有引用类型的基类是什么 3.请简述ArrayList和List的主要区别 4.请简述GC(垃圾回收)产生的原因,并描述如何避免? 5.请描述Interface与抽象类之间的不同 6.下列代码在运行中会产生几个临时对象? 7.下列代码在运行中会发生什么问题?如何避免? 8.请简述关键字Sealed用在类声明和函数声明时的作用 9.请简述private,public,protected,internal的区别 10.反射的实现原理? 11. .Net与Mono的关系? 12.简述unity3d支持的作为脚本的语言的名称 13.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么? 14.Unity3D的协程和C#线程之间的区别是什么? 15.U3D中用于记录节点空间几何信息的组件名称,及其父类名称 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中,几种施加力的方式,描述出来。

人教版四年级数学上册知识点大全

(人教版)小学数学四年级上册【知识点】 第一单元大数的认识 一?亿以内数的认识 1. 数位:在用数字表示数的时候,这些计数单位要按照一定的顺序排列起来,它们所占的位置叫做数位。 数级:按照我国的计数习惯,每四个数位是一级。个位、十位、百位、千位是个级; 万位、十万位、百万位、千万位是万级;亿位、十亿位、百亿位、千亿位是亿级。 2. 亿以内数的读法: (1) 先读万级,再读个级; (2) 万级的数都要按照个级的数的读法来读,再在后面加上一个万”字; (3) 每级末尾不管有几个0,都不读,其他数位有一个0或连续几个0,都只读一个零” 例:780|6009读作:七百八十万|六千零九 3. 亿以内数的写法: (1) 先写万级,再写个级; (2) 哪个数位上一个单位也没有,就在那个数位上写0。 例:三百零二万|六千写作:302|6000 4. 亿以内数的大小比较: 位数不同时,位数多的数大;位数相同时,从最高位比起,最高位的数大的那个数就大,如果最高位上的数相同,就比较下一个数位上的数,直到比较出大小为 止。例:50|6012 >5|0601 50|6012 V50|6022 5. 整万的数改写成用万”作单位的数: 去掉末尾的4个0,再加上一个万”字;

例:32|0000=32万(目的是为了读写方便) 6. 不是整万的数改写成万”作单位的近似数: 要将千位”上的数四舍五人,然后再加上万”字。例:5|3850?5|0000=5 万5|7220 ?6|0000=6 万 7. 四舍五入法: 求一个数的近似数,要先看省略的尾数部分的最高位是小于5,还是等于或大于5; 如果小于5就把它和后面的尾数全部舍去,改写成0;如果等于或大于5就先向前一位进1,再把它和后面的尾数全部舍去,改写成0。这种求近似数的方法叫做四舍五入法。 8. 数的产生: 数是应人们生产生活的需要而产生的。最初有实物记数、结绳记数、刻道记数。后出现了记数符号,即数字。阿拉伯数字是现今世界通用的数字,它是印度人发明的。 9. 自然数: (1)自然数:表示物体个数 的0,1,2,3,4,5,6,7,8,9,10,11 …都是自然数。 (2)最小的自然数是0,没有最大的自然数,自然数的个数是无限的。 10. 十进制计数法 (1)计数单位:个(一)、十、百、千、万 ...... 亿、十亿、百亿、千亿都是计数单位。 每相邻两个计数单位间的进率都是10 (2)十进制计数法:每相邻两个计数单位之间的进率都是十的计数方法叫做十进制计数法。 二.亿以上数的认识 11. 亿以上数的读法:

Unity一些面试题整理

60、关于光照贴图 A:使用光照贴图比使用实时光源渲染要快B:可以降低游戏内存消耗C、多个物体可以使用同一张光照贴图 61、关于Vector3的API,以下说法正确的是? Vector3.forward与Vector3(0,0,1)是一样的意思; 62、以下哪个函数在游戏进入新场景后会被马上调用? MonoBehaviour.OnLevelWasLoaded 63、什么是导航网格(NavMesh)? 一种用于实现自动寻路的网格 64、什么是局部坐标,什么是世界坐标? 世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。 65、itween插件的作用是什么,itween【狗刨学习网】作用于世界坐标还是局部坐标,请列举出3个其常用方法? iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等“

方法:a、MoveTo 物体移动;b、ColorTo:随着时间改变对象的颜色组;c、LookTo:随时间旋转物体让其脸部朝向所提供的Vector3或Transform位置 66、请简述NGUI中Panel和Anchor的作用? Anchor包含UIAnchor脚本。UIAnchor的功能是把对象锚定在屏幕的边缘(左上,左中,左下,上,中,下,右上,右中,右下),或缩放物体使其匹配屏幕的尺寸Panel对象有UIPanel脚【狗刨学习网】本,UIPanel是一个容器,它将包含所有UI 小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用。 68、https://www.sodocs.net/doc/1c5705893.html,ToLayer()这个方法有什么作用? LayerMask的使用是按位操作的,https://www.sodocs.net/doc/1c5705893.html,ToLayer("Players") 返回该Layer的编号。 69、请描述MeshRender中material和shader的区别? Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)

小学四年级语文知识点归纳总结

小学四年级语文上册知识点归纳总结一、多音字组词 乘shènɡ(千乘)chénɡ(乘法)降jiànɡ(下降)xiánɡ(投降) 卷juàn(卷子)juǎn(卷发)间jiān(时间)jiàn(间隔) 涨zhǎnɡ(涨潮)zhànɡ(涨大)恶ě(恶心)è(凶恶)wù(可恶) 屏pínɡ(屏幕)bǐnɡ(屏息)的de(我的)dí(的确)dì(目的) 调tiáo(调整)diào(调动)供ɡōnɡ(供养)ɡònɡ(供品) 缝fènɡ(缝隙)fénɡ(裁缝)给jǐ(给予)ɡěi(送给) 冠ɡuàn(冠军)ɡuān(鸡冠花)禁jīn(情不自禁)jìn(禁止) 似shì(似的)sì(似乎)兴xìnɡ(高兴)xīnɡ(兴奋) 闷mēn(闷热)mèn(闷雷滚动)喝hē(喝水)hè(喝彩) 铺pū(铺路)pù(店铺)应(yīnɡ)

应该(yìnɡ)答应 难nán(困难)nàn(灾难)转zhuàn(转圈)zhuǎn(转弯) 号hào(号子)háo(风号浪吼)薄bó(单薄)b áo(薄雾) 称chēnɡ(号称)chèn(匀称)数shǔ(不可计数)shù(数学) 模mú(模样)mó(模型)空kònɡ(空隙)kōnɡ(空间) 重chónɡ(重叠)zhònɡ(重要) 折shé(枝折花落)zhē(折腾)zhé(打折) 差chā(差别)chà(差不多)chāi(出差)cī(参差不齐) 强qiánɡ(强大)jiànɡ(倔强)qiǎnɡ(勉强) 蒙měnɡ(蒙古)mēnɡ(蒙人)ménɡ(蒙眬) 二、词语搭配 (的、地、得) (壮丽)的景观(奔腾)的江水(美丽)的画面(沸腾)的温泉(皑皑)的雪山(关注)的热点(漫长)的严冬(欢乐)的笑声(刺骨)的寒风(暖和)的地方(轻微)的响动(古怪)的性格(美丽)的公园(有名)的长廊(金碧辉煌)的

史上最全的Unity面试题(一)

一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。 二:Unity3d中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器 三:物体发生碰撞的必要条件? 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。 四:请简述ArrayList和List的主要区别? ####ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)?装箱拆箱的操作(费时)?List是接口,ArrayList是一个实现了该接口的类,可以被实例化 五:如何安全的在不同工程间安全地迁移asset数据?三种方法 1.将Assets目录和Library目录一起迁移 2.导出包,export Package 3.用unity自带的assets Server功能 六:OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生 Awake –>OnEnable->Start,OnEnable在同一周期中可以反复地发生。 七:MeshRender中material和sharedmaterial的区别?

四年级下册知识点汇总

四年级下册Unit 1 ~Unit 3知识点汇总 1. What time is it ? = What’s the time? 现在几点了? 2. o’clock 一般用来表示整点。例:nine o’clock 9点整 课本P20页出现了a.m.与p.m. 的用法,a.m.指上午,p.m.指下午。 3. It’s time for +某一门课程,例:It’s time for English class/ Chinese class/music class.… 4. It’s time to+动词短语,例:It’s time to go to school/ go home /go to bed.…… 5. This……这个……These……这些…… This is +单数短语,译为:这是……。 例:This is my T-shirt. 这是我的T恤衫。 These are+复数短语,译为:这些是……。 例:These are my shoes. 这些是我的鞋子。 6. That……那个……Those……那些…… That is +单数短语,译为:那是……。 例:That is my dress. 那是我的连衣裙。 Those are+复数短语,译为:那些是……。 例:Those are my jeans. 那些是我的牛仔裤。 7. socks, shoes, pants, jeans, shorts 这五个单词,一般情况下均以复数形式出现(即后面要加 S),切记。 四年级下册4——6单元复习资料 Unit 4It’s warm today. 今天天气暖和。 一、单词(会写): warm 暖和的cold 寒冷的cool 凉爽的today 今天snowy 下雪的sunny 晴朗的jeans 牛仔裤(复数)pants 长裤(复数)socks 袜子(复数)shoes 鞋子(复数)let’s = let us 让我们play 玩,踢football 足球 (会读,会认,考连线题): hot 炎热的weather 天气rainy 下雨的windy 有风的cloudy 多云的 二、句子: 1. It’s cool in Beijing. 北京天气凉爽。 2. Can I wear my new shirt. 我能穿我的新衬衫吗? Yes, you can. / No, you can’t. 3. It’s cold today. 今天天气寒冷。 4. Let’s play football. 让我们一起踢足球吧。 5. It’s sunny and warm. 天气晴朗,暖和。 6. It’s cold and snowy. 天气寒冷,下雪。 7. Is it cold? 天气冷吗? Yes, it is. / N o, it isn’t. 8. What are you doing? 你正在做什么?Not much. 没什么。

史上最全的Unity面试题(一)

一:什么是协同程序 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。 二:Unity3d中的碰撞器和触发器的区别 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。当Is Trigger=false 时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用 OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器 三:物体发生碰撞的必要条件 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。 四:请简述ArrayList和List的主要区别 ####ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)?装箱拆箱的操作(费时)?L ist是接口,ArrayList是一个实现了该接口的类,可以被实例化 五:如何安全的在不同工程间安全地迁移asset数据三种方法 1.将Assets目录和Library目录一起迁移 2.导出包,export Package 3.用unity自带的assets Server功能 六:OnEnable、Awake、Start运行时的发生顺序哪些可能在同一个对象周期中反复的发生 Awake –>OnEnable->Start,OnEnable在同一周期中可以反复地发生。

最新四年级数学知识点总结

四年级数学知识点总结 四年级上册 知识点概括总结 1.大数的认识: (1)亿以内的数的认识: 十万:10个一万; 一百万:10个十万; 一千万:10个一百万; 一亿:10个一千万; 2.数级:四年级数学知识点总结数四年级数学知识点总结分级的原则,把数读,写出来.通常在阿拉伯数的书写上,以小数点或者空格作为各个数级的标识,从右向左把数分开. 3.数级分类 (1)四位分级法 即以四位数为一个数级的分级方法.我国读数的习惯,就是按这种方法读的. 如:万(数字后面4个0)、亿(数字后面8个0)、兆(数字后面12个0,这是中法计数)…….这些级分别叫做个级,万级,亿级……. (2)三位分级法 即以三位数为一个数级的分级方法.这西方的分级方法,这种分级方法也是国际通行的分级方法.如:千,数字后面3个0、百万,数字后面6个0、十亿,数字后面9个0…….

4.数位:数位是指写数时,把数字并列排成横列,一个数字占有一个位置,这些位置,都叫做数位.从右端算起,第一位是“个位”,第二位是“十位”,第三位是“百位”,第四位是“千位”,第五位是“万位”,等等.这就说明计数单位和数位的概念是不同的. 5.数的产生:阿拉伯数字的由来:古代印度人创造了阿拉伯数字后,大约到了公元7世纪的时候,这些数字传到了阿拉伯地区.到13世纪时,意大利数学家斐波那契写出了《算盘书》,在这本书里,他对阿拉伯数字做了详细的介绍.后来,这些数字又从阿拉伯地区传到了欧洲,欧洲人只知道这些数字是从阿拉伯地区传入的,所以便把这些数字叫做阿拉伯数字.以后,这些数字又从欧洲传到世界各国. 阿拉伯数字传入我国,大约是13到14世纪.由于我国古代有一种数字叫“筹码”,写起来比较方便,所以阿拉伯数字当时在我国没有得到及时的推广运用.本世纪初,随着我国对外国数学成就的吸收和引进,阿拉伯数字在我国才开始慢慢使用,阿拉伯数字在我国推广使用才有100多年的历史.阿拉伯数字现在已成为人们学习、生活和交往中最常用的数字了. 6.自然数:用以计量事物的件数或表示事物次序的数 . 即用数码0,1,2,3,4,……所表示的数 .表示物体个数的数叫自然数,自然数由0开始(包括0),一个接一个,组成一个无穷的集体.

最新人教版小学四年级下册数学知识点大全

第一单元四则运算 1、加、减的意义和各部分间的关系 (1)把两个数合并成一个数的运算,叫做加法。 (2)相加的两个数叫做加数。加得的数叫做和。 (3)已知两个数的积与其中的一个加数,求另一个加数的运算,叫做减法。(4)在减法中,已知的和叫做被就减数……。减法是加法的逆运算。(5)加法各部分间的关系: 和=加数+加数 加数=和-另一个加数 (6)减法各部分间的关系: 差=被减数-减数 减数=被减数-差 被减数=减数+差 2、乘、除法的意义和各部分间的关系 (1)求几个相同加数的和和的简便运算,叫做乘法。 (2)相乘的两个数叫做因数。乘得的数叫做积。 (3)已知两个因数的积与其中一个因数,求另一个因数的运算,叫做除法。(4)在除法中,已知的积叫做被除数……。除法是乘法的逆运算。

(5)乘法各部分间的关系: 积=因数×因数 因数=积÷另一个因数 (6)除法各部分间的关系: 商=被除数÷除数 除数=被除数×商 被除数=商×除数 (7)有余数的除法, 被除数=商×除数+余数 3、加法、减法、乘法、除法统称为四则运算 4、四则混和运算的顺序 (1)在没有括号的算式里,如果只有加、减法,或者只有乘、除法,都要按(从左往右)的顺序计算; (2)在没有括号的算式里,如果既有乘、除法,又有加、减法,要先算(乘、除法),后算(加、减法);(先乘除,后加减) (3)在有括号的算式里,要先算括号里面的,后算括号外面的。 5、有关0的计算

①一个数和0相加,结果还得原数: a + 0 =a 0 + a = a ②一个数减去0,结果还得这个数: a -0 = a ③一个数减去它自己,结果得零: a -a = 0 ④一个数和0相乘,结果得0: a ×0 = 0 ; 0 ×a = 0 ⑤0除以一个非0的数,结果得0: 0 ÷a = 0 ⑥0不能做除数: a÷0 = (无意义) 6、租船问题。 解答租船问题的方法:先假设、再调整。 第二单元观察物体二 1、正确辨认从上面、前面、左面观察到物体的形状。 2、观察物体有诀窍,先数看到几个面,再看它的排列法,画图形时要注意,只分上下画数量。 3、从不同位置观察同一个物体,所看到的图形有可能一样,也有可能不一样。

Unity3d面试题总结

本人总结的一些Unity3d 高频面试题目,希望可以帮助到大家。 限于个人水平有限,只附上一些参考答案。 数据结构和算法很重要,图形学也很重要!大的游戏公司很看重个人基础、综合能力;小公司看你实际工作能力,看你的Demo 。高频问答的问题:一.什么是渲染管道是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到 另一个坐标系中去。 主要步骤有: 本地坐标-> 视图坐标-> 背面裁剪-> 光照-> 裁剪-> 投影-> 视图变换-> 光栅化。 二.如何优化内存 有很多种方式,例如 1. 压缩自带类库; 2. 将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy 掉; 3. 释放AssetBundle 占用的资源; 4. 降低模型的片面数,降低模型的骨骼数量,降低贴图的大小; 5. 使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

三、动态加载资源的方式(有时候也问区别,具体请百度) 四、什么是协同程序 在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。 五、你用过哪些插件 (最好多熟悉几个插件,问的时候好回答) 1. 使用Unity3d 实现2d 游戏,有几种方式 1. 使用本身的GUI ; 2. 把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z 轴; 3. 使用2d 插件,如:2DToolKit ; 2. Unity3d 中的碰撞器和触发器的区别 碰撞器有碰撞的效果,IsTrigger=false ,可以调用OnCollisionEnter/Stay/Exit 函数; 触发器没有碰撞效果,IsTrigger=true ,可以调用 OnTriggerEnter/Stay/Exit 函数。 3. 物体发生碰撞的必要条件 两个物体都必须带有碰撞器(Collider) ,其中一个物体还必须带有

相关主题