我在使用C#编写的一段代码时遇到了一些问题。
这段代码的意思是向上和向前移动玩家,使他站在他面前的1x1x1区块,不让他克服1x2x1或更高的任何东西。但我遇到了问题,Image。距离0,0,0越远越远。有人可以帮帮我吗?
代码:
//Player Climbs Up One Block Heights But Dose Not Climb Anything Higher
if ((PlayerClimAction.posOneHit == true) && (PlayerClimAction.posTwoHit == false))
{
// Moves the Player Up By 0.9
controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime);
// Moves The Player Forward By 0.9
controller.Move ((transform.TransformDirection (input) * (float) 0.9f) * Time.deltaTime);
//Debug
print("Up Vector3: " + (transform.position + transform.up * (float) 0.9f) * Time.deltaTime);
print("////////////////////////////////////////////////");
print ("Forward: " + (transform.TransformDirection (input) * (float) 0.9f) * Time.deltaTime);
// Reset Triggers
PlayerClimAction.posOneHit = false;
PlayerClimAction.posTwoHit = false;
}else
{
controller.Move (motion * Time.deltaTime); // Move Normaly
}
答案 0 :(得分:0)
假设controller.Move
的参数是运动矢量而不是绝对位置(这是代码的其余部分所暗示的)
该行
controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime);
应该阅读
controller.Move (transform.up * (float) 0.9f * Time.deltaTime);
另一方面,如果控制器的参数,移动应该是一个绝对的位置,你有几个问题
a)对controller.Move
的第一次调用将transform.position
乘以Time.deltaTime
。这将导致所有轴上的移动(这就是为什么它越远离0,0,0越来越差)
b)对controller.Move
的第二次和第三次调用在计算中不包括transform.Position
(取决于transform.TransformDirection
和mostion
代表的内容)。另外我认为这是一个错字,应该是motion
。