使用刚体组件在 Unity 2D 中冲刺

问题描述

<?PHP

namespace App\Controller;

use App\Entity\Argument;
use App\Repository\ArgumentRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\normalizer\Objectnormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Contracts\HttpClient\HttpClientInterface;

class ApiController extends AbstractController
{
    /**
     * @Route("/create",name="create_argument",methods={"POST"})
     */
    public function createArgument(Request $request,HttpClientInterface $client)
    {
        if (!strpos($request->headers->get('Content-Type'),'application/json'))
        {
            $data = $request->toArray();
            $name = $data['name'];

            $response = $client->request(
                'POST','http://127.0.0.1:8080/name',[
                    'headers' => [
                        'Content-Type' => 'application/json',],'json' => ['name' => $name],]);

            if ($response->getStatusCode() == 200)
            {
                $content = $response->toArray();
                $content['name'] = strrev($content['name']);

                $argument = new Argument();
                $argument->setName($content['name']);

                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($argument);
                $entityManager->flush();

                return new Response("Argument added",Response::HTTP_OK);
            }
        }

        return new Response("Bad request",Response::HTTP_BAD_REQUEST);
    }

    /**
     * @Route("/show",name="show_arguments",methods={"GET"})
     */
    public function showArguments(ArgumentRepository $repository)
    {
        $arguments = $repository->findAll();

        if (!$arguments)
            return new Response('There are no tasks.',Response::HTTP_NOT_FOUND);

        $encoders = [new XmlEncoder(),new JsonEncoder()];
        $normalizers = [new Objectnormalizer()];
        $serializer = new Serializer($normalizers,$encoders);

        $content = $serializer->serialize($arguments,'json');

        return new JsonResponse($content,Response::HTTP_CREATED,[],true);
    }
}

所以我需要一些提示,所以我想在这里问,我想在我的自上而下的射手中实现冲刺,但我没有在 Youtube 上找到任何可以正确使用我的代码代码我也尝试移动玩家位置+2 到想要的方向,但我无法解决。 如果你们能帮助我,我会很高兴。

解决方法

很高兴您将 FixedUpdate() 用于物理 - 许多初学者使用错误。 但是不要手动设置速度。使用 AddForce。 它将有效地设置速度,但会自动考虑物体质量并允许加速而不是立即加速。 这是更合乎逻辑的方法,因为您通过对身体施加力来朝着一个方向移动。

对于 Dashing,您可以为少量物理帧(也就是少量 FixedUpdate 调用)添加显着更高的力。您可以使用倒计时,当角色开始冲刺时,您可以将倒计时设置为一个数字。 在 FixedUpdate 中,您递减计数器,只要它 >0,您就应用冲刺力。