Unity3D使用GetAxis转换位置移动

时间:2014-01-31 02:14:07

标签: c# unity3d

我已经实现了一个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需要进行哪些计算并相应调整

1 个答案:

答案 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;

如果在移动已执行该帧之后调用它,您将获得前向轴上的位置(您还必须从一侧到另一侧添加并且我猜是上下)但是它的位置玩家下一帧,所以你可以检查墙是否存在,如果是这样,不允许玩家向前移动下一帧,这是旧学校碰撞检测。

我希望这有点明确。