所以我正在尝试制作一个关于足球的游戏。在这个程序中,我创建了两个名为(在层次结构中)的对象:Ball
和goal_line_1
。在这段代码中,我试图检查球是否与球门线发生碰撞,如果碰撞,我会将球(Lerp)返回到中间(0,0.3,0)
点。但不知何故,当我将球拖到球与球门线碰撞然后按下比赛的位置时,球就会停留在那里并且不会回到中间位置。
public var smooth : float;
private var newPosition : Vector3;
function Awake ()
{
newPosition = transform.position;
}
function OnTriggerEnter (ball : Collider)
{
var positionA : Vector3 = new Vector3(0, 0.3, 0);
newPosition = positionA;
ball.transform.position = Vector3.Lerp(ball.transform.position, newPosition, smooth * Time.deltaTime);
}
答案 0 :(得分:0)
那是因为您使用了OnTriggerEnter()
功能。当对手进入与另一个对撞机发生碰撞时,会调用此函数。通过将球拖入线然后按下播放所做的操作实际上是跳过“触发器输入”。事件。碰撞有三个主要事件:TriggerEnter,TriggerStay和TriggerExit。
虽然我不确定,但如果将功能更改为OnTriggerStay()
,则可能会使您的功能正常运行。但是为了更安全的测试方法,我建议你在球上添加一个脚本,这样你就可以用键盘手动移动它,看看OnTriggerEnter()
功能是否有效,因为通过这样做,你将模拟一个更现实的情况(球被踢/朝着线移动而不是"突然存在"在线上。
答案 1 :(得分:0)
如果您使用的是2D,则需要将OnTriggerEnter
功能更改为OnTriggerEnter2D
。