Как можно заставить двигаться на ощупь "Kinemati c" Rigidbody2D? - PullRequest
3 голосов
/ 09 апреля 2020

Итак, есть код с вложением Rigidbody2D моего персонажа, но он не двигается, когда установлен Kinemati c (работает только на Dynami c), но я хочу Kinemati c, потому что он сталкивается с Dynami c Объекты, и я не хотел, чтобы он двигался влево и вправо при касании.

UI: Я очень новичок, я просто хочу сделать свою первую игру для Android и извините за мой английский sh. : D

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour
{
    //variables
    public float moveSpeed = 300;
    public GameObject character;

    private Rigidbody2D characterBody;
    private float ScreenWidth;


    // Use this for initialization
    void Start()
    {
        ScreenWidth = Screen.width;
        characterBody = character.GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        int i = 0;
        //loop over every touch found
        while (i < Input.touchCount)
        {
            if (Input.GetTouch(i).position.x > ScreenWidth / 2)
            {
                //move right
                RunCharacter(1.0f);
            }
            if (Input.GetTouch(i).position.x < ScreenWidth / 2)
            {
                //move left
                RunCharacter(-1.0f);
            }
            ++i;
        }
    }
    void FixedUpdate()
    {
#if UNITY_EDITOR
        RunCharacter(Input.GetAxis("Horizontal"));
#endif
    }

    private void RunCharacter(float horizontalInput)
    {
        //move player
        characterBody.AddForce(new Vector2(horizontalInput * moveSpeed * Time.deltaTime, 0));

    }
}

1 Ответ

0 голосов
/ 09 апреля 2020

Из Документы Unity ,

Если активирован isKinemati c, силы, столкновения или соединения больше не будут влиять на твёрдое тело.

Таким образом, вместо применения силы, просто измените ее положение. Как то так:

private void RunCharacter(float horizontalInput)
{
    //move player
    characterBody.transform.position += new Vector2(horizontalInput * moveSpeed * Time.deltaTime, 0);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...