物体有:点光源一个,小方块一只。
效果如下:
然后将js文件拖到Hierarchy面板的立方体上实现绑定。我们现在要实现的就是让场景中的立方体延X轴移动。
在Project中右击新建一个JS脚本Creat->Javascript
键入代码:
[javascript] view plain copy
1. function Update ()
2. {
3. transform.Translate(Vector3(1,0,0));
4. }
运行一下,我们可以看到,立方体嗖的一声不见了。
甚至快的我都没看到它是怎么消失的!这样可不行。
需要修改代码让它慢一点。
[javascript] view plain copy
1. function Update ()
2. {
3. transform.Translate(Vector3(1,0,0)*Time.deltaTime);
4. }
运行一下,这会它老实了,慢慢的移动了。
这是怎么回事呢。接下来我们一步一步的将代码分解。
transform:场景中的每一个对象都有一个transform,用来储存和控制物体的位置,旋转和缩放。
Translate:是transform的函数,用来移动物体。它接受一个三维向量(Vector3)参数来移动。其实它还有第二个参数,就是按照自身坐标轴移动还是按照世界坐标轴移动。这里暂且不表。
Vector3:表示3D的向量和点。3个参数分别代表了向量x,y,z。
transform.Translate(Vector3(1,0,0));这句代码的意思就是,让被绑定的物体,也就是场景中的立方体,向x轴的方向移动1个单位.
Time.deltaTime:是一个时间增量,我想应该是这一帧的时间。像flash中的一秒30帧,每帧多少秒之类的。在这个程序中它的值是0.016左右。原本移动一个单位,现在乘以0.016,那肯定慢了。也就是说,它的作用其实就是减慢移动的速度。
但是仅仅这样简单的移动很难满足我们的需求,下面简单的学习一下如何给这个方块一个外力的作用。
说白了就是,一脚把他踹出去!
我们新建一个Scene,然后添加方块和地板形成如下场景:
然后我们新建一个JS脚本命名为GiveForce。
在脚本的
start方法中添加以下代码:
[javascript] view plain copy
1. function Start()
2. {
3. rigidbody.AddForce(Vector3(0,0,500));
4. }
然后可以运行一下看看效果,哇哦~没有反应 - -
原来是忘了把这个脚本拖到Cube对象上。。
拖上去之后便会看到小方块被一脚踹出去啦。
至此,我们的简单移动和外力移动便实现了。
下面我们来模拟一个发射炮弹的事件。
我们先创建好子弹和坦克,然后创建一个Prefab放置在Project中,并将炮弹拖到Prefab上面。
接下来新建一个c#文件,命名为Fire,代码如下:
using UnityEngine;
using System.Collections;
public class clone : MonoBehaviour {
public GameObject prefab;
public GameObject other;
void Awake() {
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(Input.GetKey(KeyCode.Space)){
Instantiate(prefab, transform.position, transform.rotation);
transform.Translate(new Vector3(3,5,6)*Time.deltaTime);
}
}
}