Unity Raycast2D 只拍摄 1 个单位
Unity Raycast2D only shoots like 1 unit
我有一个带枪的 2D 角色,我想在他的射击与其他东西碰撞时实例化爆炸。
我认为最好的方法是 javascript 中的 Raycast2D。
var hit: RaycastHit2D = Physics2D.Raycast(transform.position, Vector2.right);
if (hit.collider != null){
boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
}
现在的问题是我开火了,爆炸总是像我角色面前的一个单位一样实例化,即使那里什么也没有。我不知道为什么。
最大的问题是您没有甚至在实例化任何东西之前检查光线投射击中了哪个对象。这是错误的。光线投射可以击中它前面的任何东西。任何带有 Collider 2D 的东西。它甚至可以击中角色本身。
创建一个 "Enemy" 标签 把你的敌人放在那个标签里。当光线投射不是 null
时,确保在实例化任何东西之前 Enemy 确实被击中。
if (hit.collider != null)
{
if (hit.collider.CompareTag("Enemy"))
{
boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
}
}
就像我说的,光线投射甚至可以击中自己,尤其是当 2D 光线投射完成时。如果这是问题所在,请参阅 post 了解如何解决此问题。
您应该更改光线投射的来源。或者您可以为播放器创建新层。并在光线投射时排除该层。
RaycastHit2D hit = Physics2D.Raycast (transform.position, Vector2.right, ~(LayerMask.GetMask ("player")));
我有一个带枪的 2D 角色,我想在他的射击与其他东西碰撞时实例化爆炸。
我认为最好的方法是 javascript 中的 Raycast2D。
var hit: RaycastHit2D = Physics2D.Raycast(transform.position, Vector2.right);
if (hit.collider != null){
boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
}
现在的问题是我开火了,爆炸总是像我角色面前的一个单位一样实例化,即使那里什么也没有。我不知道为什么。
最大的问题是您没有甚至在实例化任何东西之前检查光线投射击中了哪个对象。这是错误的。光线投射可以击中它前面的任何东西。任何带有 Collider 2D 的东西。它甚至可以击中角色本身。
创建一个 "Enemy" 标签 把你的敌人放在那个标签里。当光线投射不是 null
时,确保在实例化任何东西之前 Enemy 确实被击中。
if (hit.collider != null)
{
if (hit.collider.CompareTag("Enemy"))
{
boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
}
}
就像我说的,光线投射甚至可以击中自己,尤其是当 2D 光线投射完成时。如果这是问题所在,请参阅
您应该更改光线投射的来源。或者您可以为播放器创建新层。并在光线投射时排除该层。
RaycastHit2D hit = Physics2D.Raycast (transform.position, Vector2.right, ~(LayerMask.GetMask ("player")));