unity--控制小球运动与销毁

9 篇文章 0 订阅

和上一章一样,先建立一个模型

在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方法

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值