如何禁用预制中某些对象的脚本?

时间:2019-04-02 18:43:51

标签: c# unity3d

我在预制件中有一个动态脚本,称为“玩家”。因此,我的脚本也适用于相机和画布。但是我只需要针对“身体”的脚本。

[enter image description here]

是的,我无法将此脚本移动到“ body”中,因为我需要该脚本用于Rigidbody2D,Network Transform等。简单地说,我的脚本位于“玩家”预制件中,因此我无法移动它-就这些。

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 :(得分:0)

您的问题似乎还不清楚,但是如果我对您的理解是正确的,那么您只希望在“ Body”对象上而不是在父对象“ Player”对象上使用移动脚本。

可以移动它,只需让Body对象找到其父对象并从中获取那些东西(Rigidbody2D,Transform等)。像...

GameObject parentObject = childObject.transform.parent.gameObject;

您还可以在子对象中为预制件创建公共变量,并将其设置为其父预制件属性。

答案 1 :(得分:0)

这应该有帮助

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);
        }
    }
}