c# - 精灵不会检测到碰撞
问题描述
抱歉格式不好,我不知道该怎么做。我正在使用 2020.3.21f1 并按照教程进行操作,当敌人圈子击中玩家时,他不会受到伤害。当它们发生碰撞时,它们根本不会重叠,但是 Debug.log 也没有注册,所以我认为圆形对撞机 2D 是问题所在。当敌人在范围内时,它仍然会向玩家移动。另一个问题(如果我不知道如何更改它,这将变成一个功能)是当敌人与玩家发生碰撞并且玩家推动它时,它会沿着它被推动的方向移动,直到它遇到一些东西这是我的教程下列的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy: MonoBehaviour
{
public float speed = 3f;
private Transform target;
[SerializeField] private float attackDamage = -10f;
private void Update(){
if (target != null){
float step = speed*Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, target.position, step);
}
}
private void OnCollision(Collision2D other){
if (other.gameObject.tag == "player"){
Debug.Log("hit");
other.gameObject.GetComponent<PlayerHealth>().UpdateHealth(attackDamage);
}
}
private void OnTriggerEnter2D(Collider2D other) {
if(other.gameObject.tag == "Player"){
target = other.transform;
Debug.Log(target);
}
}
private void OnTriggerExit2D(Collider2D other) {
if(other.gameObject.tag == "Player"){
target = null;
Debug.Log(target);
}
}
}
解决方案
精灵本身不会检测到碰撞,您需要为此添加一个盒子碰撞器。如果您将该组件添加到播放器,然后修改您的代码以包含这些碰撞检测,那么它应该按预期运行。:)
-TheHackintosh程序员;
推荐阅读
- c# - 如何在 mailItem.To 中的 To 文本框中获取未带下划线的电子邮件地址?
- javascript - 如何从 QML JavaScript 构造 Qt Quick 对象?
- java - Vue onclick 过滤器
- java - 如何在java中的文件中打印我的所有日志信息
- python - DataFrame:df.to_dict() 或 row.to_dict(),哪个节省内存和时间?
- c - 为什么 libvips 中出现“vips_region_prepare”阻塞错误?
- pandas - 如何在第二行替换相同的值?
- python - 如何防止 mpldatacursor 右键单击后重新出现?
- javascript - 如何将我的不和谐机器人同步到其仪表板?
- c++ - 字符串和双精度的 C++ 重叠输出