和上一章一样,先建立一个模型
在test里继续写代码驱动。在上一章已经描述过如何让小球前后左右移动了。
这次我换了一个更完美点的模型,和上章大差不差。再往里放入一个cube,将其rename成Enemy。
在他跟处找到AddTag添加一个Enmey,并选择这个tag。
player有Rigidbody,给物体一个作用效果基础,例如重力,摩擦力等。碰撞时候会用到。Enemy没有Rigidbody。
Collider就是碰撞,外形只是让你更加形象。
碰撞之后Enemy消失
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//引入命名空间
public class test : MonoBehaviour//调用的库
{
Rigidbody rb;//获取钢体
Vector3 move;//获取两个轴,移动的
public float speed = 3f;
void Start()//执行一次,开始的时候调用一次
{
rb= GetComponent<Rigidbody>();//获取Rigidbody组件,即初始化
}
void Update()//每帧都执行
{
move.x = Input.GetAxis("Horizontal");
move.z = Input.GetAxis("Vertical");
move=new Vector3(move.x,0,move.z);//平面移动,y=0
rb.AddForce(move*speed);
}
private void OnTriggerEnter(Collider other)
//吃木块,木块的is trigger要勾上
{
if (other.gameObject.tag == "Enemy")
{
Destroy(other.gameObject);//碰上Enemy时候消灭Enemy
}
}
}
注意:player和Enemy都具有碰撞体Collider,同时Enemy碰撞体中is Trigger要打对勾。如果不勾选就只能碰撞,并不会出现消失的事件。
通过触发即可消灭Enemy。
碰撞之后小球消失
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//引入命名空间
public class test : MonoBehaviour//调用的库
{
Rigidbody rb;//获取钢体
Vector3 move;//获取两个轴,移动的
public float speed = 3f;
void Start()//执行一次,开始的时候调用一次
{
/*Destroy(gameObject,4f);*/
rb= GetComponent<Rigidbody>();//获取Rigidbody组件,即初始化
}
void Update()//每帧都执行
{
move.x = Input.GetAxis("Horizontal");
move.z = Input.GetAxis("Vertical");
move=new Vector3(move.x,0,move.z);//平面移动,y=0
rb.AddForce(move*speed);
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag=="Enemy")
{
Destroy(gameObject);
}
}
}
此时Enemy的is Trigger不能勾选。
用OnCollisionEnter判断一个的死亡,当player碰撞enemy时player会消失。(此时呢,要把Enemy的is Trigger不勾选上,如果勾选上,player就会穿过Enemy)
OnCollisionEnter判断一个死亡。
碰撞后Enemy消失2
此时要打开Enemy的is Trigger
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//引入命名空间
public class test : MonoBehaviour//调用的库
{
Rigidbody rb;//获取钢体
Vector3 move;//获取两个轴,移动的
public float speed = 3f;
void Start()//执行一次,开始的时候调用一次
{
rb= GetComponent<Rigidbody>();//获取Rigidbody组件,即初始化
}
void Update()//每帧都执行
{
move.x = Input.GetAxis("Horizontal");
move.z = Input.GetAxis("Vertical");
move=new Vector3(move.x,0,move.z);//平面移动,y=0
rb.AddForce(move*speed);
}
private void OnTriggerEnter(Collider other)//其中一个is trigger打对勾就可以进入此方法
{
// if(other.gameObject.tag=="Enemy")//和下方写法一样
if (other.gameObject.CompareTag("Enemy"))
{
Destroy(other.gameObject);
}
}
}
记得勾选Enemy的is Trigger。不然碰撞只会碰不会使得Enemy消失。
如果勾选了其中一个的is Trigger就会进入onTriggerEnter(碰撞有事件产生,其中一个有刚体)的方法,不能进入oncollisionEnter的方法。oncollisionEnter是谁都不能勾选is Trigger才能进入此方法。
例如:与敌人斗争用oncollisionenter方法,吃香蕉用ontriggerenter方法
标签:Rigidbody,Enemy,--,void,move,小球,unity,rb,using From: https://blog.csdn.net/Cao__Ye/article/details/136737170