unity3d面试题与参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unity3d⾯试题与参考答案1、C#程序题
1 2 3 4 5 6 7 8 9 10 11private static void aaa(int x) { x = 10; } private static void bbb(ref int x) { x = 10; } static void Main(string[] args)
{
int x = 0; aaa(x); //现在x的值是:___ bbb(ref x); //现在x的值是:___
}
答案:0,,10。
详细解答:⼀个是复制⼀份值过去,⼀个是把地址传过去
2、英⽂翻译题(把下⾯⽂字翻译成中⽂)
Transform.LocalPosition
var localPosition:Vector3;
Description:
Position of the transform relative to the parent transform.
If the transform has no parent,it is the same as Transform.position.
Note that the parent transform's world rotation and scale are applied to the local position when calculating the world position.This means that while 1 unit in Transform.position is always 1 unit in transform.localPosition will get scaled by the scale of all ancestors.
描述:
相对于⽗级的变换的位置。
如果该变换没有⽗级,那么等同于Transform.position。
注意当计算世界的位置时,⽗级变换的世界旋转和缩放被应⽤到⾃⾝的位置。
意思是说Transform.position的1个单位是1个单
位,Transform.localPosition的1个单位将由所有祖先的缩放获得缩放,简单来所⾃⾝位置的1单位将受它所有上级的缩放影响。
详细解答:⽂章来⾃于《unity圣典》,参考
3、U3D提供了⼀个⽤于保存读取数据的类,(playerprefs),请列出保存读取整形数据的函数。
答案:PlayerPrefs.SetInt();
详细解答:
PlayerPrefs类可保存与读取3种基本的数据类型,它们是浮点型、整形和字符串型,涉及的⽅法如下:
SetFloat();保存浮点类型
SetInt();保存整形
SetString();保存字符串型
GetFloat();获取浮点类型
GetInt();获取整形
GetString();获取字符串
4、请简述向量点乘的含义:
向量u点乘向量v;u的长度与v在u上的投影长度的乘积,它是⼀个标量,⽽且可正可负。
物理意义:叉乘点乘,也叫向量的内积、数量积。
顾名思义,求下来的结果是⼀个数。
向量a·向量b=|a||b|cos<a,b> 在物理学中,已知⼒与位移求功,实际上就是求向量F与向量s的内积,即要⽤点乘。
叉乘,也叫向量的外积、向量积。
顾名思义,求下来的结果是⼀个向量,记这个向量为c。
|向量c|=|向量a×向量b|=|a||b|sin<a,b> 向量c的⽅向与a,b所在的平⾯垂直,且⽅向要⽤“右⼿法则”判断(⽤右⼿的四指先表⽰向量a的⽅向,然后⼿指朝着⼿⼼的⽅向摆动到向量b的⽅向,⼤拇指所指的⽅向就是向量c的⽅向)。
因此向量的外积不遵守乘法交换率,因为向量a×向量b=-向量b×向量a 在物理学中,已知⼒与⼒臂求⼒矩,就是向量的外积,即叉乘。
将向量⽤坐标表⽰(三维向量),若向量a=(a1,b1,c1),向量b=
(a2,b2,c2),则向量a·向量b=a1a2+b1b2+c1c2 向量a×向量b= | i j k| |a1 b1 c1| |a2 b2 c2| =(b1c2-b2c1,c1a2-a1c2,a1b2-a2b1) (i、j、k分别为空间中相互垂直的三条坐标轴的单位向量)。
参考:
/cly84920/item/7bc79fdf97ff4f91260ae733
/link?
url=9Nq1MttA0DqgPgYWYIix7hpqUTDv8ifyq4xK09LtzaWpLNxYpnsjhqU1kWS5Tg4ZiLPTAJsqCB4U3Ka_4L4lL1oKfb1yTXSHck6DX1QRrdO
5、物体发⽣碰撞的必要条件是什么。
答案:两个物体都必须带有碰撞器(Collider),其中⼀个物体还必须带有Rigidbody刚体。
6、程序题:aaa()函数的意义,以及test()执⾏以后在控制台输出什么?
public delegate void DoHurt();
protected DoHurt hurtCall;
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24<br>public void aaa(DoHurt call)
{
this.hurtCall=(DoHurt)bine(this.hurtCall,call); }
public void myHurt001()
{
Debug.log("调⽤1");
}
public void myhurt002(int a,int b)
{
Debug.Log("调⽤2");
}
public void test()
{
this.aaa(myHurt001);
this.aaa(myHurt002);
this.hurtCall();
}
答案:貌似this.aaa(myHurt002)会报错。
详细解答:如果hurtCall为null,call不为null时,hurtCall这个委托变量就指向call指向的⽅法,如果hurtCall不为null,call为null时,hurtCall这个委托变量就指向hurtCall指向的⽅法。
aaa⽅法的参数为⼀个⽆参的委托变量,这⾥⾯指向了myHurt002,⽽myHurt002是⼀个有参数的⽅法。
这道题欢迎探讨。
7、游戏对象B是游戏对象A的⼦物体,游戏对象A经过了旋转,请写出游戏对象B围绕⾃⾝的Y轴进⾏旋转的脚本语句,以及游戏对象B围绕世界坐标的Y轴旋转的脚本语句。
对象B围绕⾃⾝的Y轴进⾏旋转:B.transform.Rotate(Vector.up);
对象B围绕世界坐标的Y轴旋转:B.transform.RotateAround(Vector.up);
详细解答:transform.Rotate();⽤于设置模型⾃⾝旋转;transform.RotateAround();⽤于设置模型围绕某⼀个点旋转。
Vector.right:X轴⽅向;
Vector.up:Y轴⽅向;
Vector.forward:Z轴⽅向。
8、已知三维空间中的A、B两个点的坐标,请写出在X-Z平⾯上,两个之间的距离的计算函数。
其实就是求A、B两个点在XOZ平⾯上的投影的距离。
投影以后,Y坐标等于0,X、Z不变,AB投影的距离就是两个X坐标和两个Z坐标的差的平⽅的和,再开⽅。
9、假设⼀个只能⽕⼒点,它将攻击任何出现在其正前⽅30度内的、距离在10⽶之内的敌⼈,请为其书写开⽕判断AI脚本。
AI不熟悉,在研究中...。