我有一个玩家对象和一个名为StartRamp的斜坡。我正在使用下面的代码将我的球员位置和旋转更改为斜坡下方的表面。当我的播放器离开斜坡时,我想将x轴上的播放器旋转更改为仅在50到-50之间。
但是当surface为false时,我的其他声明没有运行。这让我觉得我的OnCollisionExit()错了。有人能帮助我吗?
以下代码的脚本附加到播放器对象
private void OnCollisionStay(Collision collision)
{
if(collision.gameObject.name == "StartRamp"){
surface = true;
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name != "StartRamp")
{
surface = false;
}
}
public void playerToSurface(){
if (surface == true){ // Change Position When On Ramp
Ray ray = new Ray(transform.position, -transform.up);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 1.5f) == true)
{
Debug.DrawLine(transform.position, hit.point, Color.green);
rotCur = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
posCur = new Vector3(transform.position.x, hit.point.y, transform.position.z);
grounded = true;
}
else
{
grounded = false;
}
if (grounded == true)
{
transform.rotation = Quaternion.Lerp(transform.rotation, rotCur, Time.deltaTime * 5);
}
else
{
transform.position = Vector3.Lerp(transform.position, transform.position - Vector3.up * 1f, Time.deltaTime * 5);
}
}else{ // Change Position When Off Ramp
Debug.Log("Player is off ramp.\n");
}
}
// Update player position to ground
private void Update()
{
playerToSurface();
}
答案 0 :(得分:2)
由于OnCollisionExit正在寻找 不再接触的对手,而不是任何你不接触的对手,你应该说对象名是 startramp,不是不是。
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name == "StartRamp")
{
surface = false;
}
}
答案 1 :(得分:0)
我做了这个,它在团结中运作良好。
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name == "StartRamp")
{
surface.SetActive(false);
}
}