像之前接触UE的时候那样,撸主决定先实现一个发射小球的例子来熟悉这里面的脚本操作以及组件的使用。
里面的代码都用的是撸主比较熟悉的js。基本上只要注意一下变量的定义方式就好,方法调用没有太大区别。
1.实例的最终效果
如图所示,利用自带的Rigidbody组件以及自己编写的简单脚本来实现简单的移动、灯光操作以及发射子弹的效果。
2.游戏的基本框架
Init()//程序初始化
Start()//启动线程
Run()//运行线程
Paint()//绘图程序
Update()//程序更新
Stop()//程序停止
其中update操作是这次实例测试的重点。
3.分步实现
0)场景搭建
1个作为角色的Cube以及20个作为墙体的Cube,为其加上Rigidbody物理组件,其中墙体用的Cube可以打组成一个空物体的子物体方便编辑。
同时一个直射灯光加上一个聚光灯,调整主摄像机的位置。
1)移动
由于U3D自带了各个轴向的操作,所以这里简单用Translate函数来变换位置即可。
其中定义speed变量用来控制移动速度。
代码如下
var speed = 5.0;
function Update () {
var x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
var z = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.Translate(x,0,z);
}
2)灯光操作
角色身上应该有灯光跟随,按下空格键之后聚光灯的焦点将会改变为角色中心。
代码如下:
var switchToTarget: Transform;
function Update () {
if(Input.GetButtonDown("Jump"))
GetComponent(MyFollow).target = switchToTarget;
}
3)发射子弹
FirePoint代表发射子弹生成的位置,这里为Cube指定了一个空的子物体,将其位置调整到Cube前端某处,并将FirePoint的值改为它,确保发射子弹不会“击中角色”
Bullet为创建的子弹,在这个例子里将这个值制定为一个prefab的sphere
Bullet和CurrBulletCnt为两个计数器,其中后者为private不可暴露修改
代码如下:
var FirePoint:Transform;
var Bullet: Rigidbody;
var BulletCnt:int;
private var CurrBulletCnt:int;
function Update () {
if(FirePoint == null|| Bullet == null){
return;
}
if (Input.GetButtonDown("Fire1")) {
var clone: Rigidbody;
clone = Instantiate(Bullet, FirePoint.position, FirePoint.rotation) as Rigidbody;
clone.velocity =FirePoint.TransformDirection(Vector3.forward * 10);
}
}