玩家在C#中爬上代码错误

时间:2016-04-07 12:56:45

标签: c#

我在使用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
    }

1 个答案:

答案 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.TransformDirectionmostion代表的内容)。另外我认为这是一个错字,应该是motion