Как отключить скрипт для некоторых объектов в prefab? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть движущийся скрипт в префабе под названием «игрок».Итак, мой скрипт работает с камерой и холстом тоже.Но мне нужен этот скрипт только для «тела».

[enter image description here]

Да, я не могу переместить этот скрипт в «тело», потому что мне нужен этот скрипт для Rigidbody2D,Сетевое преобразование и т. Д. Проще говоря, мой сценарий находится в префабе "player", я не могу его переместить - и все.

using System.Collections;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeedup;
    public float moveSpeeddown;
    public float rotateSpeed;
    public bool moveup;
    public bool movedown;
    public bool rotateleft;
    public bool rotateright;
    void Update()
    {
        if ((Input.GetKey(KeyCode.UpArrow)) || moveup)
        {
            transform.Translate(Vector3.right * moveSpeedup * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.DownArrow) || movedown)
        {
            transform.Translate(-Vector3.right * moveSpeeddown * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.RightArrow) || rotateleft)
        {
            transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.LeftArrow) || rotateright)
        {
            transform.Rotate(Vector3.forward * -rotateSpeed * Time.deltaTime);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Это должно помочь

using System.Collections;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeedup;
    public float moveSpeeddown;
    public float rotateSpeed;
    public bool moveup;
    public bool movedown;
    public bool rotateleft;
    public bool rotateright;
    public Transform body;
    void Update()
    {
        if ((Input.GetKey(KeyCode.UpArrow)) || moveup)
        {
            body.Translate(Vector3.right * moveSpeedup * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.DownArrow) || movedown)
        {
            body.Translate(-Vector3.right * moveSpeeddown * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.RightArrow) || rotateleft)
        {
            body.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.LeftArrow) || rotateright)
        {
            body.Rotate(Vector3.forward * -rotateSpeed * Time.deltaTime);
        }
    }
}
0 голосов
/ 02 апреля 2019

Ваш вопрос кажется немного неясным, но если я вас правильно понимаю, вы хотите использовать скрипт движения только для объекта "Body", а не для родительского объекта "Player".

Вы можете переместить его и просто попросить объект Body найти его родительский объект и получить эти вещи (Rigidbody2D, Transform и т. Д.) Из этого. Что-то вроде ...

GameObject parentObject = childObject.transform.parent.gameObject;

Вы также можете в своем дочернем объекте создать открытые переменные для вашего префаба и установить для них атрибуты parent-prefab.

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