自学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数
- 自学Unity3D游戏开发(6)
- 自学Unity3D游戏开发(前言)
- 自学Unity3D游戏开发(1)
- 自学Unity3D游戏开发(2)
- 自学Unity3D游戏开发(4)
- 自学Unity3D游戏开发(5)
- 自学Unity3D游戏开发(7)
- 自学Unity3D游戏开发(3)刚体和碰撞
- 【Unity3D自学记录】Unity3D游戏开发之连续滚动背景
- 【Unity3D自学记录】游戏开发之怪物AI
- 【Unity3D自学记录】Unity3D游戏开发之跑酷游戏项目讲解
- 【Unity3D自学记录】Unity3D游戏开发之鼠标滚轮实现放大缩小
- 【Unity3D自学记录】 Unity3D游戏开发之键盘选取、切换目标
- 【Unity3D自学记录】Unity3D游戏开发之自由视角状态下的角色控制(二)
- 【Unity3D自学记录】Unity3D游戏开发之自由视角状态下的角色控制(一)
- UNITY3D自学--(一)
- 【Unity3D自学记录】Time.timeScale、游戏暂停
- Unity3D——汽车游戏自学1
- 自定义LayoutManager带你撸个LinearLayoutManager
- 深入探索C++对象模型学习笔记2
- 保留两位小数
- wcf 动态调用
- 有符号的整数-负数在内存的存放形式
- 自学Unity3D游戏开发(6)
- OpenGL学习总结
- Codeforces Round #FF (Div. 2) C. DZY Loves Sequences
- 自己动手实现OpenGL!
- Freemarker之#list的排序
- 云计算和云存储IBM教程
- 【HAUT OJ1282】ykc想吃好吃的
- android build系统
- HDU 6075 Questionnaire(水~)