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又会表现出正常碰撞体的特性。