如何在没有碰撞器相互穿过的情况下更改接触时的精灵
how to change a sprite on contact without colliders passing through each other
基本上,我来自 SpriteKit 背景,可以在没有碰撞的情况下建立接触。我试图在 Unity2d 中获得相同的效果,我希望一个对象的图像和对撞机在穿过另一个对象时从圆形变为矩形,而不会使它们弹跳或对碰撞力做出反应。请在下面查看我的代码:
void OnCollisionEnter2D(Collision2D col) {
if (col.collider.name == "Enemy") {
if(circleColliderOn){
GetComponent<SpriteRenderer>().sprite = rectTargetSprite;
boxColliderOn = true;
boxCollider.enabled = true;
GetComponent<CircleCollider2D>().enabled = false;
circleColliderOn = false;
Debug.Log("reached here");
}
}
}
同样在我的代码中,圆变成了矩形,但是盒子碰撞器并没有增加到更大的矩形的大小,它保持不变。
更新
我从 OnCollisionEnter2D
更改为 onTriggerEnter2D
并设置了 TriggerOn 属性,但无法识别触发器。甚至下面更新代码中的第一个日志也没有显示。我对这个问题做了一些研究,并且已经检查了以下内容:
- 一个游戏对象有一个 rigidBody2D
isKinematic
已禁用
- 两个对象的碰撞器都已设置
确保游戏对象名称正确
void OnTriggerEnter2d(Collision2D col) {
Debug.Log("reached here");
if (col.collider.name == "Enemy") {
if(circleColliderOn){
GetComponent<SpriteRenderer>().sprite = rectTargetSprite;
boxColliderOn = true;
boxCollider.enabled = true;
GetComponent<CircleCollider2D>().enabled = false;
circleColliderOn = false;
Debug.Log("LOGGED");
}
}
}
void OnTriggerEnter2d(Collision2D col)
将此更改为
void OnTriggerEnter2D(Collider2D col)
方法名称很重要,必须相同,并且使用 Collider 而不是碰撞 class 作为参数。
现在不需要col.collider.name
,可以改成col.name
http://docs.unity3d.com/ScriptReference/Collider2D.html
基本上,我来自 SpriteKit 背景,可以在没有碰撞的情况下建立接触。我试图在 Unity2d 中获得相同的效果,我希望一个对象的图像和对撞机在穿过另一个对象时从圆形变为矩形,而不会使它们弹跳或对碰撞力做出反应。请在下面查看我的代码:
void OnCollisionEnter2D(Collision2D col) {
if (col.collider.name == "Enemy") {
if(circleColliderOn){
GetComponent<SpriteRenderer>().sprite = rectTargetSprite;
boxColliderOn = true;
boxCollider.enabled = true;
GetComponent<CircleCollider2D>().enabled = false;
circleColliderOn = false;
Debug.Log("reached here");
}
}
}
同样在我的代码中,圆变成了矩形,但是盒子碰撞器并没有增加到更大的矩形的大小,它保持不变。
更新
我从 OnCollisionEnter2D
更改为 onTriggerEnter2D
并设置了 TriggerOn 属性,但无法识别触发器。甚至下面更新代码中的第一个日志也没有显示。我对这个问题做了一些研究,并且已经检查了以下内容:
- 一个游戏对象有一个 rigidBody2D
isKinematic
已禁用- 两个对象的碰撞器都已设置
确保游戏对象名称正确
void OnTriggerEnter2d(Collision2D col) { Debug.Log("reached here"); if (col.collider.name == "Enemy") { if(circleColliderOn){ GetComponent<SpriteRenderer>().sprite = rectTargetSprite; boxColliderOn = true; boxCollider.enabled = true; GetComponent<CircleCollider2D>().enabled = false; circleColliderOn = false; Debug.Log("LOGGED"); } } }
void OnTriggerEnter2d(Collision2D col)
将此更改为
void OnTriggerEnter2D(Collider2D col)
方法名称很重要,必须相同,并且使用 Collider 而不是碰撞 class 作为参数。
现在不需要col.collider.name
,可以改成col.name
http://docs.unity3d.com/ScriptReference/Collider2D.html