我有一个简单的设置。一个带有相机的玩家、一个玩家行走的飞机以及两堵带有盒子碰撞器的墙壁。
问题 当向一个方向(X 轴或 Z 轴)移动时,玩家会在接触墙壁时停止。但在两堵墙相交的角落,当使用 W 和 D 键对角移动时,玩家会穿过或滑过。我怎样才能防止这种情况发生,因为我已经为此苦苦挣扎了一段时间了。
下面是我的角色控制器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerController : MonoBehaviour
{
public float p_moveSpeed = 10f;
void Start()
{
}
void Update()
{
float horizontalInput = Input.GetAxisRaw("Horizontal");
float verticalInput = Input.GetAxisRaw("Vertical");
Vector3 moveDirection = new Vector3(horizontalInput, 0f, verticalInput);
transform.position += moveDirection * p_moveSpeed * Time.deltaTime;
moveDirection.Normalize();
}
void LateUpdate()
{
Vector3 position = transform.position;
transform.position = position;
}
}
下面是我靠墙拍摄的屏幕截图,另一张屏幕截图是我穿过相交的两堵墙,请记住两堵墙上都有一个盒子碰撞器。
在对角线移动时,我滑过它们相交的墙壁,我在玩家所在的区域周围画了一个蓝色圆圈......
就好像我的玩家走过十字路口,我不知道如何纠正它。 对于那些愿意提供帮助的人,提前表示感谢。我看过很多关于碰撞的视频和教程,但我从来没有见过这样的东西,玩家在碰撞墙壁时能够停下来,但会穿过交叉墙壁(附有碰撞器)......
如果通过重复设置对象的位置来移动对象,碰撞并不总是有效。如果您希望内置的碰撞解决系统发挥作用,您应该设置对象的刚体速度分量。