接昨天的内容,昨天将碰撞检测实现了
那我们今天研究一下实现落在Cube上的时候使Cube停止运动,如何在游戏运行的时候取消Cube运动的代码呢?
这是需要用到的代码段,将LeftCube移动到Floor前面
public void OnCollisionEnter(Collision other)
{
//定义一个字符串
string CollisionName;
//如果碰撞的GameObject不是Floor
if (!other.gameObject.name.Equals("Floor"))
{
//将碰撞体的名字存在字符串中
CollisionName = other.gameObject.name;
//如果碰撞体的名字是LeftCube
if(CollisionName.Equals("LeftCube"))
{
//获取LeftCube身上的LeftCubeMove脚本,并切取消此代码的执行。
other.gameObject.GetComponent<LeftCubeMove>().enabled = false;
}
}
}
再运行游戏,并使Player与LeftCube发生碰撞.
在碰撞的一瞬间,Cube不移动了,并且右边LeftCubeMove的脚本被取消了
为了不让每次碰撞,都要判断名字,所以我们需要新建一个命为CubeMove的C#脚本
public class CubeMove : MonoBehaviour {
//定义Cube的初始速度
public float Speed = 1f;
void Start () {
}
void Update () {
//如果脚本所在模型的名字为LeftCube(Clone)或LeftCube
if (this.gameObject.name.Equals("LeftCube(Clone)") || this.gameObject.name.Equals("LeftCube"))
{
//执行移动方法
MoveLeft();
}
if (this.gameObject.name.Equals("RightCube(Clone)") || this.gameObject.name.Equals("RightCube"))
{
MoveRight();
}
if (this.gameObject.name.Equals("StaticCube(Clone)") || this.gameObject.name.Equals("StaticCube"))
{
MoveStop();
}
}
//定义移动方法
void MoveLeft()
{
//使Cube的移动速度递增
Speed += 0.1f;
//移动
this.transform.Translate(Vector3.left * Speed * Time.deltaTime);
}
void MoveRight()
{
Speed += 0.1f;
this.transform.Translate(Vector3.right * Speed * Time.deltaTime);
}
void MoveStop()
{
this.transform.Translate(0,0,0);
}
}
这样,我们所有可经过的Cube就都可以公用一个脚本了
---------------------------------------------------------------------------------------------------------------------------------
对了对了,讲一点题外话
就是我渐渐发现,其实unity最重要的不是建模能力,而是c#的编写能力,而c#类似于java,正好下学期我们专业要学Java了,所以我剩下的暑假可能会用于学习Java,这个专栏应该还是会更的,大家一起共勉吧,冲冲冲!!!
|