自学Unity3D游戏开发(6)

来源:互联网 发布:mac移动硬盘分区 编辑:程序博客网 时间:2024/05/17 05:51

    

(1)发射子弹及相关脚本

    小源之前实现了视角的简单操控,下面来创建一个球体当作子弹,并把这个球体变成预制体。

然后把界面中的球体Delete,等到用到的时候再出现。既然要这个球体作为子弹,那么肯定是要在点击鼠标左键时发射出去

我们可以添加进之前写的漫manyou.cs脚本中。

在这个脚本的类里,函数外添加变量:

public Transform Q;

在这个脚本的update函数末尾继续添加代码:

if (Input.GetButtonDown ("Fire1")) {                        Transform n = (Transform)Instantiate(Q,transform.position,transform.rotation) as Transform;            Vector3 fwd = transform.TransformDirection(Vector3.forward);            n.GetComponent<Rigidbody>().AddForce(fwd * 3000);            Destroy(n.gameObject, 3);

Instantiate是实例化函数,就是将预制体实例化。三个函数分别是,对象,方向,旋转角度。

transform.position,transform.rotation分别代表了摄像机的位置和旋转角度。

Transform是一个封装好的类,public Transform Q定义了一个Transform类的对象。

Vector3是三维世界的坐标相关的类,此处是为了确定发射的方向。

GetComponent<Rigidbody>().AddForce();是给物体添加一个力。这里注意在U3D4.X版本中,是Rigidbody.AddForce();不同版本的函数略有不同。

Destroy是销毁。不然创建一个子弹一直不销毁,子弹会越来越多,会影响程序的运行。第二个参数是几秒后销毁。


在Main Camera下的manyou脚本下可以看到出现了Q,这里拖拽预制体中的zidan,或点击Q后的小圆圈添加物体,将zidan添加给Q。

这样就实现了子弹的发射和销毁

(2)Text的使用及相关脚本

想要在游戏中写一些文字,就需要Text控件了

如果是4.X版本的话,应该Hierarchy中点击Create->GUI->Text

如果是5.X版本的话,应该是Create->UI->Text

小源是5.X版本的,创建以后会出现下面几个东东


点击Text,查看它的属性设置等等


上面的xyz不再是在世界中的坐标,而是相对于整个界面的位置。

下面的Text中可以修改显示的文字,小源想显示发射了多少个子弹

那么问题来了,发射子弹数是一个变量,怎么在Text中显示变量呢

这就需要脚本来实现了。

由于发射数是和鼠标左键点击有关,而鼠标左键点击的代码是在manyou脚本中

所以依然在manyou脚本中if (Input.GetButtonDown ("Fire1"))下写

首先也是定义一个新变量number,使number=0,在if (Input.GetButtonDown ("Fire1"))末尾添加number++,意思是每点击一下左键,number+1,然后添加

GameObject.Find("Canvas/Text").GetComponent<Text>().text = "发射数:" + number ;

需要注意的是,5.X版本需要添加一个包,即

using UnityEngine.UI;

低版本的有所不同,大家可以上网搜索低版本的写法。

在这里先Find,寻找Canvas/Text这个控件,再修改text属性。保存运行后就可以动态显示发射数了。

除了寻找控件以外,还可以寻找脚本。

比如在Cube上有一个脚本,需要用到manyou脚本中的number数据,怎么做呢

int zd = GameObject.Find("Main Camera").GetComponent<manyou>().number;
这是寻找到manyou脚本下的number变量,就可以用zd来表示manyou脚本中的number变量了
说到这里,脚本中可以控制其他脚本的开关,如下

 GameObject.Find("Main Camera").GetComponent<manyou>().enabled = false;
enabled=false就意味着把manyou脚本关闭了,如果等于true,即为打开。

在程序中可以根据需要,某些条件下关闭某些脚本。

(3)cube预制体脚本

现在我写了一个cube相关脚本来实现一些功能,相信有了上面的讲解大家可以很容易地知道这个脚本的作用。

using UnityEngine;using System.Collections;using UnityEngine.UI;public class number: MonoBehaviour {    public int zd;    public int xm;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {        if (gameObject.transform.position.y < 0)        {            zd = GameObject.Find("Main Camera").GetComponent<manyou>().number;            xm = GameObject.Find("Main Camera").GetComponent<manyou>().number1++;            GameObject.Find("Canvas/Text").GetComponent<Text>().text = "发射数:" + zd + "  " + nu;                        if (nu >= 20)            {                GameObject.Find("Canvas/Text").GetComponent<Text>().text = "恭喜过关!" ;                GameObject.Find("Main Camera").GetComponent<manyou>().enabled = false;            }            Destroy(gameObject);        }}}
把这个脚本添加给预制体cube,此时gameObject就是这个cube了
这个脚本是如果cube的y坐标小于0,也就是被打下了地面,就会被销毁,number1++

number1和number一样定义在manyou脚本中,用来计算被消灭的cube数

原创粉丝点击