当前位置: 首页 > article >正文

Unity中用触发器模拟碰撞效果

直接上代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bluut : MonoBehaviour
{
    // 触发器进入时调用
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 判断碰撞物体是否是标记为 "Map" 的物体
        if (collision.gameObject.CompareTag("Map"))
        {
            // 获取当前物体的 Rigidbody2D 组件
            Rigidbody2D rb = gameObject.GetComponent<Rigidbody2D>();

            // 获取当前速度
            Vector2 currentVelocity = rb.velocity;

            // 获取碰撞物体的位置
            Vector2 circleCenter = collision.gameObject.transform.position;

            // 计算碰撞点位置
            // 由于触发器没有碰撞点,可以使用物体和触发器中心的相对位置来模拟碰撞点
            Vector2 collisionPoint = (Vector2)transform.position;

            // 计算法线向量(从物体中心指向碰撞点,作为反射法线)
            Vector2 normal = (collisionPoint - circleCenter).normalized;

            // 计算反射速度
            float dotProduct = Vector2.Dot(currentVelocity, normal);
            Vector2 reflectedVelocity = currentVelocity - 2 * dotProduct * normal;

            // 设置物体的反射速度
            rb.velocity = reflectedVelocity;
        }
    }
}

 将这个代码加到你的子弹或者需要实现触发器不与其他物体发生碰撞的特性的物体上,然后修改if (collision.gameObject.CompareTag("Map"))将Map改为你需要碰撞的物体的标签。这样你的物体在碰到Map以外的物体就会表现出触发器的特性碰到Map又会表现出正常碰撞体的特性。


http://www.kler.cn/a/512672.html

相关文章:

  • Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问
  • Docker 学习总结(85)—— docker cp 使用总结
  • 3D 模型格式转换之 STP 转 STL 深度解析
  • 哈希(hashing)、哈希函数(Hash Function)、哈希表(Hash Table)、哈希冲突(Hash Collision)
  • vue2使用flv.js在浏览器打开flv格式视频
  • 移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场
  • 为什么相关性不是因果关系?人工智能中的因果推理探秘
  • 【深度学习】利用Java DL4J 训练金融投资组合模型
  • 【漫话机器学习系列】056.F1值(F1 score)
  • 前端——JS
  • STM32 FreeRTOS任务通知
  • C++设计新思维:泛型编程与设计模式之应用学习笔记
  • WebSocket 和 Socket 的区别
  • 谈一谈前端构建工具的本地代理配置(Webpack与Vite)
  • 开发常用工具
  • QT:IconButton的动画效果
  • leetcode刷题记录(七十二)——146. LRU 缓存
  • Docker 单机快速部署大数据各组件
  • 力扣10-搜索插入位置
  • uni-app连接EventSource
  • 嵌入式硬件篇---ADC模拟-数字转换
  • MySQL表的增删改查(基础)CRUD
  • 【PCIe 总线及设备入门学习专栏 6.2 -- PCIe VDM (Vendor Defined Messages)】
  • Kubernetes 集群网络及服务暴露方式详解
  • 【Linux 重装】Ubuntu 启动盘 U盘无法被识别,如何处理?
  • 一款功能强大的互联网资产测绘引擎-CyberEdge