统一更改未在脚本中实例化的游戏对象的比例
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
!
即便如此,您仍然质疑为什么每帧都更改纹理的所有像素..
在一个空场景中,我添加了一个空游戏对象并将其命名为“脚本”。我附加了一个 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
!
即便如此,您仍然质疑为什么每帧都更改纹理的所有像素..