自学Unity3D游戏开发(6)

xiaoxiao2021-02-28  66

    

(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 initialization void Start () { } // Update is called once per frame void 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数

转载请注明原文地址: https://www.6miu.com/read-79136.html

最新回复(0)