首页 > 其他分享 >unity--控制小球运动与销毁

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

时间:2024-03-16 21:31:17浏览次数:26  
标签:Rigidbody Enemy -- void move 小球 unity rb using

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

在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

相关文章

  • JS实现之用户注册协议倒计时
    要求:按钮显示5秒倒计时,5秒前禁点,5秒后可以点击按钮运行结果:5秒前5秒后思路开启禁用按钮属性disabled获取按钮元素开启倒计时函数setInterval调用函数,函数里包括变量自减,使用DOM对象修改时间,关闭按钮禁用属性HTML代码:首先禁用按钮属性<textareaname=""id=""......
  • LLM大语言模型(七):部署ChatGLM3-6B并提供HTTP server能力
    目录HighLight部署ChatGLM3-6B并开启HTTPserver能力下载embedding模型bge-large-zh-v1.5HTTP接口问答示例LLM讲了个尴尬的笑话~HighLight将LLM服务化(如提供HTTPserver能力),才能在其上构建自己的应用。部署ChatGLM3-6B并开启HTTPserver能力下载embedding模型bge-l......
  • 【C语言步行梯】各类操作符、类型转换与原码、反码、补码详谈
    ......
  • 华为OD机试 C++ -文件缓存系统
    文件缓存系统前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述请设计一个文件缓......
  • JavaScript学习 第三天
    一、数组(一)数组基本知识声明按顺序保存数据的数据类型<body><script>letarr=[1,2,'猪儿',true]</script></body>声明数组函数<body><script>letarr=newArray(1,2,'猪儿',true)</script></body>......
  • python来判断密码强弱-类
    '''设计者:ISDF版本:v1.0日期:2019/4/3''''''设计者:ISDF版本:v2.0日期:2024/4/3'''classPasswordTool:'''密码工具类'''def__init__(self,password):#类......
  • JavaScript学习 第一天
    一、什么是JavaScript(一)介绍是一种运行在浏览器的编程语言,进行人机交互(二)可以做什么可以做网页特效,表单验证,进行数据交互,还有服务端编程node.js(三)组成由ECMAScript和WebAPIs组成其中WebAPIs由DOM和BOM组成ECMAScript:js基础语法知识WebAPIs:DOM:操作文......
  • 命令行生成jar文件
    做IT也二十年有余了,一直做着运维工作,编程仅是业余兴趣,水平就是在HelloWorld的基础上多做几个练习,行在各语言都能试试手,偶尔也能做些提高效率小工具,多是味都没怎么嚼就新版本了,人也白发生了...运维吗,效率在先,什么容易就用什么,c#,php,autoit,shell,bat,vba,sql,powershell,python,唯java总......
  • conda 安装R以及在 Jupyter Notebook中运行 R 代码
    1.打开命令行工具,输入以下命令,创建一个新的conda环境并激活:condacreate-nmyenvr-base==4.2.2condaactivatemyenv如碰到PackagesNotFoundError问题解决,使用以下命令,将conda-forge通道添加到通道列表中:condaconfig--appendchannelsconda-forge2.在conda环境中安......
  • vue生命周期
     什么是生命周期:从Vue实例创建,运行,到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!生命周期钩子=生命周期函数=生命周期事件主要的生命周期函数分类:创建期间的生命周期函数:beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好data和methods属性......