public class Projectile : MonoBehaviour{ private Lober lober; private Tank ply; private void Start() { // 取得抛物线组件lober lober = GetComponent<Lober>(); // 取得玩家组建ply ply = GameObject.FindWithTag("Player").GetComponent<Tank>(); } // 把子弹跟其他物体碰撞的脚本写在这里 private void OnCollisionEnter(Collision collision) { // 子弹跟谁发生了碰撞? if (collision.gameObject.tag == "Arch") { print("你碰到了圆环!"); lober.endPos = ply.transform.position; lober.enabled = true; } else if (collision.gameObject.tag == "Tower") { print("你碰到了砖块!"); // Step1:怎么取得砖块对象? // Step2:Unity中,用什么方法销毁一个对象? //Destroy(collision.gameObject); // 把整个塔都销毁了! //collision.gameObject.GetComponent<Tower>().DropTower(); // 塔向下销毁一层 // Step3: 销毁子弹 Destroy(this.gameObject); } }}
public class Projectile : MonoBehaviour
{
private Lober lober;
private Tank ply;
private void Start()
// 取得抛物线组件lober
lober = GetComponent<Lober>();
// 取得玩家组建ply
ply = GameObject.FindWithTag("Player").GetComponent<Tank>();
}
// 把子弹跟其他物体碰撞的脚本写在这里
private void OnCollisionEnter(Collision collision)
// 子弹跟谁发生了碰撞?
if (collision.gameObject.tag == "Arch")
print("你碰到了圆环!");
lober.endPos = ply.transform.position;
lober.enabled = true;
else if (collision.gameObject.tag == "Tower")
print("你碰到了砖块!");
// Step1:怎么取得砖块对象?
// Step2:Unity中,用什么方法销毁一个对象?
//Destroy(collision.gameObject); // 把整个塔都销毁了!
//collision.gameObject.GetComponent<Tower>().DropTower(); // 塔向下销毁一层
// Step3: 销毁子弹
Destroy(this.gameObject);
void Update() { // 如果游戏结束,就不处理子弹发射操作了! if (isGameOver) return; // 发射子弹 if (Input.GetButton("Fire1") && Time.time - lastFireTime > 0.2f) { // 实例化(从预制体克隆)一个子弹 var transProj = Instantiate(projPrefab).transform; // 设置子弹的位置在坦克设定好的炮口位置 transProj.SetParent(this.transform, false); transProj.position = shotPos.position; Vector3 v = shotPos.forward * 100; transProj.GetComponent<Rigidbody>().AddForce(v, ForceMode.Impulse); Destroy(transProj.gameObject, 2f); lastFireTime = Time.time; } }
void Update()
// 如果游戏结束,就不处理子弹发射操作了!
if (isGameOver)
return;
// 发射子弹
if (Input.GetButton("Fire1")
&& Time.time - lastFireTime > 0.2f)
// 实例化(从预制体克隆)一个子弹
var transProj = Instantiate(projPrefab).transform;
// 设置子弹的位置在坦克设定好的炮口位置
transProj.SetParent(this.transform, false);
transProj.position = shotPos.position;
Vector3 v = shotPos.forward * 100;
transProj.GetComponent<Rigidbody>().AddForce(v, ForceMode.Impulse);
Destroy(transProj.gameObject, 2f);
lastFireTime = Time.time;
随后打开我们的Projectile脚本把代码修改如下:
public class Projectile : MonoBehaviour{ private Lober lober; private Tank ply; private void Start() { // 取得抛物线组件lober lober = GetComponent<Lober>(); // 取得玩家组建ply ply = GameObject.FindWithTag("Player").GetComponent<Tank>(); } // 把子弹跟其他物体碰撞的脚本写在这里 private void OnCollisionEnter(Collision collision) { // 子弹跟谁发生了碰撞? if (collision.gameObject.tag == "Arch") { print("你碰到了圆环!"); lober.endPos = ply.transform.position; lober.enabled = true; ply.isGameOver = true; } else if (collision.gameObject.tag == "Tower") { print("你碰到了砖块!"); // Step1:怎么取得砖块对象? // Step2:Unity中,用什么方法销毁一个对象? //Destroy(collision.gameObject); // 把整个塔都销毁了! //collision.gameObject.GetComponent<Tower>().DropTower(); // 塔向下销毁一层 // Step3: 销毁子弹 Destroy(this.gameObject); } }}
ply.isGameOver = true;
这样就能实现我们的目标了
原文链接:http://www.cnblogs.com/raymondking123/p/11463186.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728