我在Unity3d中有一个简单的sprite /图片。我想分别动态地改变叶子/茎/花瓣的颜色。
最简单的方法是什么?我应该只是创建不同的对象并分别对其进行操作,还是有一种更有效的方法来解决这个问题?
(我不是在寻找代码,只是一个高水平的建议-例如,使用svg /将叶子/茎/花瓣组合在一起创建一个预制件,然后分别给它们上色)
我问的原因是,对于Unity来说是新来的,我没有Google的“语法”,但是我希望能有一个快速的指针,应该对其余的内容进行管理。
答案 0 :(得分:3)
您必须分别保存每个部分。
据我了解,您将有不止一张图像要着色。如果是这样,我建议您使用可编写脚本的对象来存储由这些分离的精灵组成的图像。这是一段视频,讨论可编写脚本的对象的基础知识以及如何使用它。
https://www.youtube.com/watch?v=aPXvoWVabPY
这是一些基本代码,我想它会如何寻找您来保存图像:
[CreateAssetMenu(fileName = "Sprite Scriptable Object", menuName = "Sprite SO")]
public class ScriptObje : ScriptableObject {
public string naming;
public List<Sprite> parts;
}
答案 1 :(得分:0)
还有另一个选项可以让您操作svg:执行此操作的方法是解析SVG文件以获得文件的矢量表示形式(矢量场景),然后可以在镶嵌细分之前更改任何属性。例如:
string svg =
@"<svg xmlns=""http://www.w3.org/2000/svg"" xmlns:xlink=""http://www.w3.org/1999/xlink"" viewBox=""0 0 216 216"">
<g>
<polygon id=""Poly1"" points=""...""/>
</g>
</svg>";
// Import the SVG at runtime
var sceneInfo = SVGParser.ImportSVG(new StringReader(svg));
var shape = sceneInfo.NodeIDs["Poly1"].Shapes[0];
shape.Fill = new SolidFill() { Color = Color.red };
// Tessellate
var geoms = VectorUtils.TessellateScene(sceneInfo.Scene, tessOptions);
// Build a sprite
var sprite = VectorUtils.BuildSprite(geoms, 10.0f, VectorUtils.Alignment.Center, Vector2.zero, 128, true);
GetComponent<SpriteRenderer>().sprite = sprite;