我在2D中有一个简单的场景。右边的黄色框是“播放器”,而绿色和&棕色的东西是“障碍”。
播放器附加了BoxCollider2D
,RigidBody2D
和名为Hero.cs
的C#脚本。 BoxCollider2D
已启用Is Trigger
; RigidBody2D
已启用Is Kinematics
;其他设置保留默认值。
障碍只有BoxCollider2D
且启用了Is Trigger
。
这是Hero.cs
:
using UnityEngine;
using System.Collections;
public class Hero : MonoBehaviour {
public float moveSpeed = 0.1f;
private Vector3 moveDirection;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
Vector3 currentPos = transform.position;
if(Input.GetKey("left")) {
transform.Translate(new Vector3(-1, 0, 0));
} else if(Input.GetKey("right")) {
transform.Translate(new Vector3(1, 0, 0));
}
}
void OnCollisionEnter2D(Collision2D collision) {
Debug.Log("Colliding");
}
void OnTriggerEnter2D(Collider2D other) {
Debug.Log("Triggering");
}
}
控制台日志中仅显示“触发”。
我的问题是:我应该添加什么才能让“障碍”无法访问“播放器”(无需反弹)?
注意:使用Unity 4.5
更新:在我将Gravity Scale
设置为 0 后,碰撞检测可以正常工作,但这种做法很奇怪。在碰撞过程中,“玩家”会侧身。观看此YouTube video for action。
我希望播放器只沿X或Y轴行进。我错过了什么?
答案 0 :(得分:2)
触发器让其他碰撞器通过而不会发生任何碰撞。它们只是触发事件,因此得名。
如果为两个对象禁用IsTrigger
,则会发生冲突并触发相应的事件。
此处有更多信息:http://docs.unity3d.com/Manual/CollidersOverview.html
运动刚体碰撞器只会与其他非运动刚体碰撞器发生碰撞。 看看这个矩阵http://docs.unity3d.com/Manual/CollisionsOverview.html
如果您不想使用强制值移动播放器,请停用IsKinematic
并将播放器移至MovePosition
。