U3d面试题(5)

NGUI Button 怎样接受用户点击并调用函数,具体方法名称是什么
1、主要是在UICamera脚本中用射线判断点击的物体并通过SendMessage调用OnClick() OnPress()等函数,可以说NGUI的按钮是通过发消息这个方式调用的。具体方法名称是OnClick()
2、void Awake () {
//获取需要监听的按钮对象
GameObject button = GameObject.Find(“UI Root/Button3”);
//设置这个按钮的监听,指向本类的ButtonClick方法中。
UIEventListener.Get(button).onClick = OnButton3Click;
}
private void OnButton3Click(GameObject button) {
Debug.Log(“我是按钮3被点击了”);
}

<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法.
Vector3 v 代表初速度 v’代表现在的速度, 假设小鸟是沿的 z 轴也就是 transform.forward方向运动的质量为 1,那么 v’=v-new Vector3(0,gt,ft),transform.Translate(v’)做的就是抛物线运动(g 为重力加速度不要用现实中的需要自己调试,f 为阻力也要自己调试设置,t 为时间)

当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?
1、使用预制物体对象 Prefab
2、使用对象池技术,不使用时关闭,使用时打开

碰撞检测需要物体具备什么属性?
能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器
【Physics.OverlapSphere 相交球检测碰撞,碰撞检测需要包围盒】

Vector3.forward与Vector3(0,0,1)是一样的意思对吗?

下哪个函数在游戏进入新场景后会被马上调用?
MonoBehaviour.OnLevelWasLoaded

itween 插件的作用是什么,itween 作用于世界坐标还是局部坐标,请列举出 3 个其常用方法?
iTween 是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等“方法:
a、MoveTo 物体移动;
b、ColorTo:随着时间改变对象的颜色组;
c、LookTo:随时间旋转物体让其脸部朝向所提供的 Vector3 或 Transform 位置;

U3D 中用于记录节点空间几何信息的组件名称,及其父类名称
Transform 父类是 Component

NGUI:把子控件放在父控件里面,如何上下边距都是10。
给子控件设置上下两个锚点为10

如何使子控件居中,如果使用UGUI怎么实现
设置子控件锚点为中心

去掉敏感字的程序(手写程序)
String s = “你是坏蛋”;
s.Replace(“坏蛋”, “**”);

unity3D从唤醒到销毁有一段生命周期,列出系统自己调用的重要方法。
Awake ()
OnEnable ()
Start()
FixedUpdate()
OnTriggerXXX(Collider other)
OnCollisionXXX (Collision collisionInfo)
Update()
LateUpdate ()
OnGUI()
OnDisable ()
OnDestroy ()

Unity3d中resources目录一般用来放些什么,打包的时候会有什么影响?
resource一般用来放置一些需要动态加载的资源,打包程序的时候会将Resource目录下的全部文件都加密压缩打进包内,这样再想使用assetbundle方式打小包的话就不行了

空间内一物体绕球面固定点(0、1、2)按照固定速度speed环绕运动。
public float Speed = 1;
void Update () {
transform.RotateAround (new Vector3(0,1,2),Vector3.up,Speed);
}

正确排列出下面Unity脚本自带的函数执行顺序Start,Awake,Update,OnUpdate,OnEnable,FixedUpdate,OnGUI,LateUpdate、OnDisable、OnDestory
Awake–>OnEnable–>Start–>Update–>FixedUpdate–>LateUpdate–>OnGUI–>OnDisable -->OnDestory

Unity中销毁GameObject的方式,简述Destroy和DestroyImmediate的区别
Destroy销毁场景中的物体,但是内存中它还是存在的,只有当内存不够时,机制才会将它销毁并释放内存。而DestroyImmediate会立即将对象销毁,并且将内存释放。

Unity中如何派发事件(消息)
在脚本里的Update函数里调用EventDispatcher.Instance().OnTick();就可以了

ScriptObject的作用和使用方式
ScriptObject类型经常使用于存储一些Unity本身不可以打包的一些object,比如字符串,一些类对象,用这个类型的子类型可以用BuildPipeline打包成assetbundle包共后续使用,非常方便。

如何检测物体是否被其他对象遮挡
使用射线进行检测

写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。
public class Player : MonoBehaviour {
public GameObject _prefabBullet;
private float _angleSpeed = 120f;
void Update() {
float eularY = Input.GetAxis(“Mouse X”) * _angleSpeed * Time.deltaTime;
transform.Rotate(new Vector3(0, eularY, 0));
if (Input.GetMouseButtonDown(0)) {
Instantiate(_prefabBullet, transform.position, transform.rotation);
}
}
}

敌人AI,有各种状态,实现各种状态之间的切换。
通过状态机来实现各种状态之间的切换

写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。
2.敌人AI,有各种状态,实现各种状态之间的切换。
3.敌人会和主角对抗,敌人被打到之后,会闪一次红色,然后红色比例提升10%,10次攻击之后,成红色。
4.敌人会自动攻击主角,主角也会有颜色变化。
5.敌人会在范围内巡逻。
6.UI,左边显示8个AI的被攻击次数,右边显示AI的攻击次数排序。
public class Player : MonoBehaviour {
public Camera _camera;
public GameObject _prefabBullet;
private float _angleSpeed = 120f;
//生命值
private int _life = 10;
//玩家的状态
private bool _state = false;
//是否被打到
public void IsState() {
if (_state && _life > 0) {
_life -= 1;
_state = false;
} else {
_state = true;
}
}
public void RoleRotate() {
float eularY = Input.GetAxis(“Mouse X”) * _angleSpeed * Time.deltaTime;
}
//风发射子弹
public void RoleShoot() {
if (Input.GetMouseButtonDown(0)) {
Instantiate(_prefabBullet, transform.position, transform.rotation);
}
}
}
public class Enemy : MonoBehaviour {
//敌人被打到状态
private bool _state = false;
//玩家与敌人距离
private float _distance;
//角色
public GameObject _role;
//生命值
private int _life = 10;
//敌人被攻击次数
private int _timeAccack = 0;
//敌人状态
public void EnemyState() {
if (_distance >= 10f) {
if (_life >= 1 && _state == true) {
_life -= 1;
_timeAccack++;
}
_state = false;
}
else if (_distance >= 0 && _state == false) {
_state = true;
}
}
//敌人与玩家距离
public void Distance() {
_distance = Vector3.Distance(transform.position, _role.transform.position);
}
void OnGUI() {
GUI.TextArea(new Rect(20, 50, 80, 30), _timeAccack.ToString());
GUI.TextArea(new Rect(20, 90, 80, 30), _timeAccack.ToString());
GUI.TextArea(new Rect(20, 130, 80, 30), _timeAccack.ToString());
}
}

3D空间有三个cube当做点,有一条鱼的模型,要求在三点之间游动,要求转向平滑一点,控制鱼的运动朝向(用四元数和欧拉角)
使用transform.localRotation = Quaternion.Slerp(Quaternion a,Quaternion b,float c)实现物体平滑转向

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值