55 lines
1.4 KiB
C#
55 lines
1.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
[RequireComponent(typeof(SpriteRenderer))]
|
|
[RequireComponent(typeof(BoxCollider2D))]
|
|
[RequireComponent(typeof(Rigidbody2D))]
|
|
public class FollowMouseWithCollision : MonoBehaviour
|
|
{
|
|
private SpriteRenderer spriteRenderer;
|
|
private Color originalColor;
|
|
private bool isColliding = false;
|
|
|
|
void Start()
|
|
{
|
|
// 缓存 SpriteRenderer 和原始颜色
|
|
spriteRenderer = GetComponent<SpriteRenderer>();
|
|
originalColor = spriteRenderer.color;
|
|
|
|
// 确保 Rigidbody2D 是 Kinematic
|
|
Rigidbody2D rb = GetComponent<Rigidbody2D>();
|
|
rb.bodyType = RigidbodyType2D.Kinematic;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
// 跟随鼠标
|
|
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
|
|
mousePos.z = 0;
|
|
transform.position = mousePos;
|
|
|
|
// 碰撞提示
|
|
if (isColliding)
|
|
spriteRenderer.color = Color.red; // 碰撞中变红
|
|
else
|
|
spriteRenderer.color = originalColor; // 恢复原色
|
|
}
|
|
|
|
private void OnTriggerEnter2D(Collider2D other)
|
|
{
|
|
Debug.Log("开始碰撞: " + other.gameObject.name);
|
|
isColliding = true;
|
|
}
|
|
|
|
|
|
private void OnTriggerExit2D(Collider2D other)
|
|
{
|
|
Debug.Log("结束碰撞: " + other.gameObject.name);
|
|
isColliding = false;
|
|
}
|
|
|
|
private void OnTriggerStay2D(Collider2D other)
|
|
{
|
|
isColliding = true;
|
|
}
|
|
} |