我已经实现了一个click 2移动脚本,我正在尝试使用一个方法,该方法已经获得了我点击的Vector3并通过CharacterController将播放器移动到它。
有没有办法获取变换当前位置,在键关闭时从GetAxis获取值并计算其新位置。当垂直/水平控件被释放时,Vector3将被赋予变换当前位置,因此它将停止移动
是用于移动到该位置的东西。
void MoveToPosition()
{
if (Vector3.Distance(transform.position, position) > 1)
{
Quaternion newRotation = Quaternion.LookRotation(position - transform.position);
newRotation.x = 0f;
newRotation.z = 0f;
transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * 10);
controller.SimpleMove(transform.forward * speed);
animation.CrossFade(run.name);
}
else
{
animation.CrossFade(idle.name);
}
}
位置是通过光线投射分配的,所以我想使用玩家当前位置,getaxis需要进行哪些计算并相应调整
答案 0 :(得分:1)
当然,回到没有引擎的游戏时,这是计算碰撞检测的最简单方法,
但你必须考虑很多变量以及它们如何变化。 基本上如果你想知道玩家将在哪里,你必须使用最简单的 数学,另外。计算玩家将要去哪里你必须采取向量 并添加速度。
因此更新函数中的位置+(Vector3.forward)会使每帧增加Vector3(0,0,n)。
void Update() {
Vector3 newpos = transform.position + Vector3.forward;
transform.position = newpos;
}
简而言之,这就是代码必须要做的事情,如果我们使用Vector3.forward,但你很可能会使用自己的变量,例如
Vector3 moveForward = new Vector3(0,0,Input.GetAxis("Horizontal"));
moveForward += transform.position;
如果在移动已执行该帧之后调用它,您将获得前向轴上的位置(您还必须从一侧到另一侧添加并且我猜是上下)但是它的位置玩家下一帧,所以你可以检查墙是否存在,如果是这样,不允许玩家向前移动下一帧,这是旧学校碰撞检测。
我希望这有点明确。