c# - 如何从碰撞中检查对象名称?
问题描述
我想将红色圆圈移动到另一个仅与当前方形游戏对象发生碰撞的框位置。
在我当前的代码中,例如单击该游戏对象(正方形)中的一个。红色圆圈的位置将等于我点击的正方形的位置。我需要移动红色圆圈只是相邻的正方形。使用碰撞或其他风格我怎样才能轻松地制作这种逻辑?
解决方案
执行:
public class StackOverflowScript : MonoBehaviour
{
public Detector CircleObject;
public SquareItem SquarePrefab;
public Vector2 SpawnOffset;
List<SquareItem> _squares = new List<SquareItem>();
private void Start()
{
InitGrid();
}
public void InitGrid()
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
var pos = new Vector2(i, j) * SpawnOffset;
SquareItem square = Instantiate(SquarePrefab, pos, Quaternion.identity) as SquareItem;
square.Init(this, pos);
_squares.Add(square);
}
}
}
public void MoveCircle(SquareItem item, Vector2 newPos)
{
if (CircleObject.Squares.Contains(item))
CircleObject.MoveTowardPos(newPos);
}
}
public class SquareItem : MonoBehaviour
{
private StackOverflowScript _stackScript;
public Vector2 Position
{
get; private set;
}
public void Init(StackOverflowScript script, Vector2 squarePosition)
{
_stackScript = script;
Position = squarePosition;
}
private void OnMouseDown()
{
_stackScript.MoveCircle(this, this.transform.position);
}
}
using System.Linq;
public class Detector : MonoBehaviour
{
public List<SquareItem> Squares
{
get; private set;
}
public float DetectionRadius = 2f;
void FixedUpdate()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(this.transform.position, DetectionRadius);
Squares = colliders.ToList().FindAll(el => el.GetComponent<SquareItem>() != null).Select(el => el.GetComponent<SquareItem>()).ToList();
}
//This is for drawing the red circle in the inspector so you can control the radius of detection.
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(this.transform.position, DetectionRadius);
}
public void MoveTowardPos(Vector2 newPos)
{
this.transform.position = newPos;
}
}
解释:
StackOverflowScript 用于启动正方形网格并控制圆的移动。
SquareItem 是为您实例化的每个正方形附加的脚本,它现在包含位置信息。
Detector 是附加到您的圆圈/播放器的脚本,它使用 Physics2D Overlaps 测试是否在一定半径内的邻居中有正方形。
当方形项目被按下时,它会将其信息发送到负责检查方形是否在圆的检测半径内的 stackoverflow 脚本。如果是这样,将圆圈移动到方形位置。
希望这可以帮助!
干杯!
推荐阅读
- java - Tomcat 服务器声明我的 PostgreSQL 数据库不存在,但它确实存在
- python - 变量没有按应有的方式更新
- python - 分配前引用的局部变量“数据” - python
- c++ - 回文程序和条件跳转或移动取决于未初始化的值
- java - 如何测试这条骆驼路线?依赖注入和环境变量
- github - 如何将新文件/文件夹添加到现有的 Github 存储库?
- java - Android:错误:-source 1.3 中不支持注释
- javascript - 页面加载后如何正确运行JS
- tomcat9 - Catalina-utility-1 和 Catalina-utility-2 内存分配过多
- react-native - 照片库中未列出将远程图像下载到本地设备