C# 将游戏对象捕捉到网格?
我正在制作一个2D TD游戏,目前我已经使用quill18教程制作了一个简单的建筑系统。然而,当我把鼠标移到瓷砖上时,我试着让它卡在瓷砖上 这是应用于建筑对象的脚本C# 将游戏对象捕捉到网格?,c#,unity3d,2d,mouse,C#,Unity3d,2d,Mouse,我正在制作一个2D TD游戏,目前我已经使用quill18教程制作了一个简单的建筑系统。然而,当我把鼠标移到瓷砖上时,我试着让它卡在瓷砖上 这是应用于建筑对象的脚本 void Update(){ Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mousePos.z = 0; Vector2 mp = mousePos; this.transform.positi
void Update(){
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos.z = 0;
Vector2 mp = mousePos;
this.transform.position = mousePos;
Collider2D col = GetComponent<Collider2D> ();
if (GameManager.instance.player.CanAffordCurrentBuilding()
&& !col.IsTouchingLayers(LayerMask.GetMask("NonBuildingLayer"))
&& col.IsTouchingLayers(LayerMask.GetMask("BuildingLayer"))
&& !col.IsTouchingLayers(LayerMask.GetMask("BlockingLayer"))) {
SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>();
foreach(SpriteRenderer sr in sprites)
sr .color = Color.green;
canPlace = true;
}
else {
SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>();
foreach(SpriteRenderer sr in sprites)
sr .color = Color.red;
canPlace = false;
}
if (Input.GetMouseButtonDown (0) && canPlace) {
SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>();
foreach(SpriteRenderer sr in sprites)
sr .color = Color.white;
Destroy(GetComponent<Rigidbody2D>() );
Destroy(this);
GameManager.instance.player.BuildingWasPlaced();
}
void Update(){
Vector3 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos.z=0;
Vector2 mp=鼠标点;
this.transform.position=鼠标点;
col=GetComponent();
if(GameManager.instance.player.CanAffordCurrentBuilding()
&&!col.isTouchLayers(LayerMask.GetMask(“非构建层”))
&&col.isTouchLayers(LayerMask.GetMask(“BuildingLayer”))
&&!col.isTouchLayers(LayerMask.GetMask(“BlockingLayer”)){
SpriteRenderer[]sprites=GetComponentsInChildren();
foreach(精灵中的高级喷洒器)
sr.color=color.green;
canPlace=true;
}
否则{
SpriteRenderer[]sprites=GetComponentsInChildren();
foreach(精灵中的高级喷洒器)
sr.color=color.red;
canPlace=false;
}
if(Input.GetMouseButtonDown(0)和&canPlace){
SpriteRenderer[]sprites=GetComponentsInChildren();
foreach(精灵中的高级喷洒器)
sr.color=color.white;
销毁(GetComponent());
摧毁(这个);
GameManager.instance.player.buildingwasplace();
}
如果触摸层是“BuildingLayer”我将能够放置该对象,并且该对象始终跟随我的鼠标,直到我放置它为止。但是,我希望它仅在触摸层不是BuildingLayer时跟随我的鼠标。当触摸层是BuildingLayer时,我希望它捕捉到最靠近鼠标的瓷砖上。并不断更改捕捉在鼠标周围移动时平铺
我怎样才能完成这样的事情?
我有一个名为grid的列表,其中包含游戏中所有的建筑瓷砖,如果有帮助的话。我想你可以做的是在你的建筑中添加触发碰撞框。 如果要拖动一个,请使要拖动的那个有一个稍微大一点的触发器碰撞框。
然后检查拖动的对象上是否存在触发碰撞,如果是,则捕捉到与碰撞对象相关的位置。您需要检查碰撞是在底部、左侧、顶部还是右侧。我想您可以做的是在建筑物中添加触发碰撞框。 如果要拖动一个,请使要拖动的那个有一个稍微大一点的触发器碰撞框。 然后检查拖动的对象上是否存在触发碰撞,如果存在,则捕捉到与碰撞对象相关的位置。您需要检查碰撞是在底部、左侧、顶部还是右侧