我是Unity的新手。就像标题一样,我很难在游戏中正确设置碰撞。我正在使用统一的https://unity3d.com/learn/tutorials/topics/2d-game-creation/scripting-gravity?playlist=17093自定义物理脚本。在我的游戏中,我在禁用碰撞方面遇到困难。
例如,当我使用
class StackADT<ANY>(var capacity: Int) {
private var top = -1
private val stack: (generic type array)//NEED TO INITIALIZE PROPERLY HERE
fun push(element: ANY) {
if (top == capacity)
throw Exception("Overflow occurred in stack!!")
stack[++top] = element
}
....
它什么都没有改变,两个字符仍然冲突。同样,由于某些原因,触发器的行为也很奇怪,仍然受到碰撞的影响。靠近带有触发器的角色会使他漂浮。我已经坚持了很长时间,非常感谢您的帮助。
值得注意的是,我正在使用自定义物理学,并使用盒对撞机2d来检测攻击范围等。这是其中的一些代码:
Physics2D.IgnoreLayerCollision (8, 9);
并且我在动画中有单独的打孔触发器,以检测角色实际被击中的时间:
Collider2D attackbox = Physics2D.OverlapBox (attackPos.position, new Vector2 (attackRangeX, attackRangeY), 0, whatIsPlayer);
if (attackbox != null && !isDead && characterController.isDead == false) {
targetVelocity = Vector2.zero;
animator.SetTrigger ("isPunching");
timeBtwAtk = startTimeBtwAtk;
}
当我使用public void SetColliderIndex(int spriteNum)
{
colliders[currentColliderIndex].enabled = false;
currentColliderIndex = spriteNum;
colliders[currentColliderIndex].enabled = true;
}
public void ClearColliderIndex()
{
colliders[currentColliderIndex].enabled = false;
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.tag == "Player")
{
col.GetComponent<CharacterController2D> ().TakeDamage (enemyDamage);
col.GetComponent<CharacterController2D> ().canWait = false;
col.GetComponent<CharacterController2D> ().canControl = false;
}
}
时,我不希望两个指定的层都相互作用。我不希望出现任何怪异的变化,也不希望它们彼此通过时漂浮。同样,当我再次移动玩家的敌人时,我也不希望他能够将他退回。我希望他好像撞墙一样。
答案 0 :(得分:0)
我已经回答了与此here类似的问题。另外,如果您不希望玩家在碰撞时突然漂浮,则可以将“刚体/刚体2d”类型设置为运动学类型,但这意味着该对象将不受物理影响。您将需要用代码来完成。
答案 1 :(得分:0)
我认为您的问题是在某些时候两个对撞机相互作用和/或两个对撞机被激活,但是从您发布的代码中我无法清楚地确定问题是否存在