C# 选择特定的预制件
我创建了多个相同的预制克隆,我想销毁我选择的其中一个 首先,我使用raycast2d检测与预置的碰撞和碰撞C# 选择特定的预制件,c#,unity3d,collision,C#,Unity3d,Collision,我创建了多个相同的预制克隆,我想销毁我选择的其中一个 首先,我使用raycast2d检测与预置的碰撞和碰撞 if(Input.GetMouseButtonDown(1)) { RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), Vector2.zero); if(hit.collider != nu
if(Input.GetMouseButtonDown(1))
{
RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), Vector2.zero);
if(hit.collider != null && hit.collider.gameObject==gameObject){
health-=PlayerScript.damage;
if(health<=0){
Destroy(hit.collider.gameObject);
}
}
}
我用void OnCollision2DEnter()检查游戏对象和预置之间是否存在碰撞
现在有了不同的问题。游戏对象不会与其他预制件碰撞,因为
我希望,我能描述我的问题。
我正在等待您关于选择特定预制件或我的碰撞问题的建议在场景中的游戏对象(可能是用作控制器的空游戏对象)上类似这样的问题: 请注意,如果使用默认摄影机方向,光线投射的方向应为
-Vector2.up
public class RayShooter : MonoBehaviour
{
void Update()
{
if(Input.GetMouseButtonDown(1)) // 1 is rightclick, don't know if you might want leftclick instead
{
RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), -Vector2.up);
if(hit.collider != null)
{
GameObject target = hit.collider.gameObject;
target.GetComponent<Enemy>().dealDamage(PlayerScript.damage);
// "Enemy" is the name of the script on the things you shoot
}
}
}
}
public class RayShooter:monobhavior
{
无效更新()
{
如果(Input.GetMouseButtonDown(1))//1是rightclick,不知道您是否希望改为leftclick
{
RaycastHit2D hit=Physics2D.Raycast(Camera.main.ScreenToWorldPoint((Input.mousePosition)),-Vector2.up);
if(hit.collider!=null)
{
GameObject target=hit.collider.GameObject;
target.GetComponent().dealDamage(PlayerScript.damage);
//“敌人”是你拍摄的东西的脚本名称
}
}
}
}
在你射击的东西上(这里称为“敌人”):
公共类敌人:单一行为
{
int health=10;
公共无效释放损害(整数值)
{
健康-=价值;
如果(健康第一,prefact
在你的资源中,而不是在场景中(这只是一个正式的东西,与你的问题无关)。你的raycast脚本是否在你的prefact的每个实例上?如果是,你应该将其更改为一个专用的游戏对象(某种控制器)。否则,每个克隆将在您只需要执行一次的情况下执行该脚本。是的,raycast脚本位于我的预置上的每个实例上。我尝试添加一个在MouseOver上激活的布尔控制器,如果布尔控制器为真,则对象将失去运行状况。但是,其他克隆也会失去运行状况,当鼠标在其上时,它们将被销毁。可以吗你对分拣控制器有什么建议吗?因为不管我怎么做,它都不起作用。
public class RayShooter : MonoBehaviour
{
void Update()
{
if(Input.GetMouseButtonDown(1)) // 1 is rightclick, don't know if you might want leftclick instead
{
RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), -Vector2.up);
if(hit.collider != null)
{
GameObject target = hit.collider.gameObject;
target.GetComponent<Enemy>().dealDamage(PlayerScript.damage);
// "Enemy" is the name of the script on the things you shoot
}
}
}
}
public class Enemy : MonoBehaviour
{
int health = 10;
public void dealDamage(int value)
{
health -= value;
if(health <= 0)
{
Destroy(gameObject);
}
}
}