统一更改未在脚本中实例化的游戏对象的比例

Change the scale of a gameObject that is not instantiated in a script in unity

在一个空场景中,我添加了一个空游戏对象并将其命名为“脚本”。我附加了一个 C# 脚本来创建一个纹理对象并在其上放置一个精灵渲染器。呈现网络摄像头图像。我想更改精灵显示的比例。通过脚本 gameObject 的 inspector->transform->scale 手动可以进行此更改。但是,我只想更改一个参数,因此我需要在脚本中添加一个 public 参数。我如何 - 从脚本 - 访问空脚本的 tansform 比例,即使脚本中没有实例化这样的 gameObject?

using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.InteropServices;

[RequireComponent(typeof(SpriteRenderer))]
public class contours : MonoBehaviour
{

    SpriteRenderer rend;
    void Start()
    {
        tex = new Texture2D(432, 240, TextureFormat.RGBA32, false);
        rend = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        pixel32 = tex.GetPixels32();        
        //get a customized texture here
        tex.SetPixels32(pixel32);
        tex.Apply();

        //create a sprite from that texture
        Sprite newSprite = Sprite.Create(tex, new Rect(0, 0,432,240), new Vector2(0.5f, 0.5f), 100F, 0, SpriteMeshType.FullRect);

        rend.sprite = newSprite;
}

对附加到 GameObject 组件的 Transform 组件的引用是内置的 属性 transform! 一般来说,你可以例如做

rend.transform.localScale = newLocalScale;

但是,在您的情况下,您自己的脚本也附加到同一个游戏对象,因此您需要做的就是

transform.localScale = newLocalScale; 

顺便说一句,也没有必要在 每一帧 创建一个新的 Sprite 实例!更改纹理也会根据该纹理自动更新 Sprite

即便如此,您仍然质疑为什么每帧都更改纹理的所有像素..