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

本文介绍了在Unity中使用Rigidbody和Collider组件创建玩家角色和可触发消失的敌人模型,通过OnTriggerEnter和OnCollisionEnter方法处理玩家与敌人的碰撞行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

Unity中,如果你想实现一个摄像头射出实体小球并且在一段时间后小球消失的效果,你需要编写一个脚本来控制小球的生成、发射和消失。以下是一个简单的示例代码,它演示了如何在Unity中通过脚本来实现这个功能。 首先,你需要创建一个小球预制体(Prefab),并在Unity编辑器中准备好。然后,创建一个新的C#脚本,我们可以叫它`BallThrower.cs`,并附加到控制发射小球物体上(例如摄像头)。 ```csharp using UnityEngine; public class BallThrower : MonoBehaviour { public GameObject ballPrefab; // 小球预制体 public float throwForce = 10f; // 发射力 public float lifetime = 5f; // 小球存在时间 // 每帧调用一次 void Update() { // 检测是否按下发射键(例如鼠标左键或空格键) if (Input.GetButtonDown("Fire1")) { // 实例化小球预制体 GameObject ball = Instantiate(ballPrefab, transform.position, transform.rotation); // 给小球添加力使其发射 ball.GetComponent<Rigidbody>().AddForce(ball.transform.forward * throwForce, ForceMode.Impulse); // 启动一个协程来控制小球消失时间 StartCoroutine(DestroyBallAfterLifetime(ball)); } } // 协程,用于在一定时间后销毁小球 IEnumerator DestroyBallAfterLifetime(GameObject ballToDestroy) { // 等待指定的时间 yield return new WaitForSeconds(lifetime); // 销毁小球 Destroy(ballToDestroy); } } ``` 这段代码首先声明了几个公共变量,用于在Unity编辑器中设置小球预制体、发射力和小球存在时间。在`Update`方法中,通过`Input.GetButtonDown`检测用户是否按下了发射键。如果按下,就在当前物体的位置实例化一个球体,并给它一个向前的力使其发射。接着,启动一个协程`DestroyBallAfterLifetime`,该协程会在指定的时间后销毁小球。 请确保你的小球预制体上有`Rigidbody`组件,这样它才能受到力的影响。 在Unity编辑器中,你需要将这个脚本附加到控制小球发射的物体上,比如摄像头,并将小球预制体拖拽到脚本组件的`ballPrefab`字段中。调整`throwForce`和`lifetime`的值来符合你的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值