如何更正我当前将精灵完全移出屏幕的代码?
How to correct my current code of moving the sprite completely offscreen?
我目前正在尝试编写 Unity
中的 gameobject/sprite
脚本,使其完全移出屏幕然后被销毁。但截至目前,使用我当前的代码,精灵并没有完全移出屏幕。
这是我当前的代码:
void MoveObstacle()
{
this.transform.position -= new Vector3(this.transform.position.x, speed * Time.deltaTime, this.transform.position.z);
}
void CheckIfOffscreen()
{
Vector3 spriteSize = this.GetComponentInChildren<Renderer>().bounds.size;
Debug.Log(spriteSize);
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
if(screenPos.y < 0 - spriteSize.y/2)
{
this.DestroyObstacle();
}
}
void DestroyObstacle()
{
Destroy(gameObject);
}
这段代码的问题是它不会让我的精灵在精灵被销毁之前完全离开屏幕。当一半精灵在屏幕外时它会消失,这不是我想要的行为。
我知道我只是遗漏了一些东西或者 spriteSize
使用不当。有人知道如何解决这个问题吗?
谢谢
首先,我相信这句话:
this.transform.position -= new Vector3(this.transform.position.x, speed * Time.deltaTime, this.transform.position.z);
应该是:
this.transform.position -= new Vector3(0, speed * Time.deltaTime, 0);
要解决您的问题,试试这个:
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position + spriteSize);
if(screenPos.y < 0)
{
this.DestroyObstacle();
}
我目前正在尝试编写 Unity
中的 gameobject/sprite
脚本,使其完全移出屏幕然后被销毁。但截至目前,使用我当前的代码,精灵并没有完全移出屏幕。
这是我当前的代码:
void MoveObstacle()
{
this.transform.position -= new Vector3(this.transform.position.x, speed * Time.deltaTime, this.transform.position.z);
}
void CheckIfOffscreen()
{
Vector3 spriteSize = this.GetComponentInChildren<Renderer>().bounds.size;
Debug.Log(spriteSize);
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
if(screenPos.y < 0 - spriteSize.y/2)
{
this.DestroyObstacle();
}
}
void DestroyObstacle()
{
Destroy(gameObject);
}
这段代码的问题是它不会让我的精灵在精灵被销毁之前完全离开屏幕。当一半精灵在屏幕外时它会消失,这不是我想要的行为。
我知道我只是遗漏了一些东西或者 spriteSize
使用不当。有人知道如何解决这个问题吗?
谢谢
首先,我相信这句话:
this.transform.position -= new Vector3(this.transform.position.x, speed * Time.deltaTime, this.transform.position.z);
应该是:
this.transform.position -= new Vector3(0, speed * Time.deltaTime, 0);
要解决您的问题,试试这个:
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position + spriteSize);
if(screenPos.y < 0)
{
this.DestroyObstacle();
}