【问题标题】:Change the scale of a gameObject that is not instantiated in a script in unity统一更改未在脚本中实例化的游戏对象的比例
【发布时间】:2022-01-19 21:18:40
【问题描述】:

在一个空场景中,我添加了一个空游戏对象并将其称为“脚本”。我附加了一个创建纹理对象并在其上放置精灵渲染器的 C# 脚本。渲染网络摄像头图像。我想更改显示精灵的比例。通过脚本游戏对象的检查器->转换-​​>缩放已经可以手动更改此更改。但是,我只想更改一个参数,因此我需要在脚本中添加一个公共参数。即使脚本中没有实例化这样的游戏对象,我如何 - 从脚本中访问空脚本的转换比例?

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

【问题讨论】:

  • 我不是 100% 确定你在问什么。如果一个游戏对象没有被实例化,那么你就不能改变它的规模,因为这个游戏对象不存在。实例化 Texture (game?) 对象的 C# 代码将引用该对象。想必你可以在上面调用GetComponent来获取Transform组件,并用一些代码调整比例
  • 我很难回答这个问题,因为我看不到您的检查器窗口(或您的游戏对象)(或生成新游戏对象的代码)
  • 您应该能够使用GetComponent&lt;Transform&gt;(); 从轮廓单一行为内的任何位置获取对变换组件的引用。然后您可以使用referenceToTransform.localScale = new Vector3(1, 0, 1); 使用代码更新 X/Y/Z 值。假设轮廓 monobehaviour 存在于我在您的层次结构中看到的“脚本”对象上
  • 是的,应该可以。但请记住,如果比例每次都相同,您不需要每帧更新localScale,因此您也可以将reference.localScale = whatever 移动到您的Start() 方法中,至少对于这种特定情况
  • 是的。我希望能够在播放模式期间更改比例

标签: unity3d sprite scale gameobject


【解决方案1】:

对组件所附加的同一个GameObjectTransform 组件的引用是一个内置属性transform! 一般来说,你可以例如做

rend.transform.localScale = newLocalScale;

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

transform.localScale = newLocalScale; 

顺便说一句,也不需要创建一个新的Sprite 实例每一帧!更改纹理也会自动更新基于该纹理的Sprite

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

【讨论】:

  • 确实如此。两者都有效!完美的 !我得到了一个摄像头直播,它在到达时由一个 opencv 库处理,然后我将其与纹理对象一起显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多