プロジェクトご提示ありがとうございます。動かしてますと確かにおっしゃる通りの挙動ですね。そして追記依頼欄で「私の場合はAddComponentでもちゃんと角丸になっているようでした」などと申し上げましたが、私の実験用シーンでもご質問者さんのおっしゃる挙動が観察されました。おそらく、最初に試した時はうっかりオブジェクトのインスペクターを表示したまま動かしてしまったんだろうと思います。早とちりしてすみませんでした。
インスペクターを表示してやると変更が反映される件ですが、ShapeEditor
には下記のようなコードがありました。
丸みが4方向個別設定でない場合は、全方向共通の丸み設定を4方向それぞれの丸みプロパティにセットするような動作をしているようでした。
lang
1 // ここまで省略
2 ShapeType shapeType = (ShapeType) shapeTypeProp.enumValueIndex;
3 if (shapeType == ShapeType.Rectangle) {
4 // rectangle props
5 EditorGUILayout.PropertyField(roundnessPerCornerProp);
6 if (shape.settings.roundnessPerCorner) {
7 EditorGUILayout.PropertyField(roundnessTLProp);
8 EditorGUILayout.PropertyField(roundnessTRProp);
9 EditorGUILayout.PropertyField(roundnessBLProp);
10 EditorGUILayout.PropertyField(roundnessBRProp);
11 } else {
12 EditorGUILayout.PropertyField(roundnessProp);
13 roundnessTLProp.floatValue = roundnessProp.floatValue;
14 roundnessTRProp.floatValue = roundnessProp.floatValue;
15 roundnessBLProp.floatValue = roundnessProp.floatValue;
16 roundnessBRProp.floatValue = roundnessProp.floatValue;
17 }
18 } else if (shapeType == ShapeType.Ellipse) {
19 // 以降は省略
ですがShape
自身にはこれに相当する処理をしている部分が見当たらず、さらにシェーダーへプロパティをセットする際にも4方向個別の丸みを渡しているだけで、全方向共通の丸み設定が反映されていないような感じでした。
仕方ないので、下記のように自前で4方向それぞれに丸みをセットしてやってはいかがでしょうか。
lang
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4using UnityEngine.UI;
5using Shapes2D;
6
7public class TestScene : MonoBehaviour
8{
9 // Start is called before the first frame update
10 void Start()
11 {
12 GameObject obj = GameObject.Find("Button");
13 Shape shape = obj.AddComponent<Shape>();
14 // Shape shape = obj.GetComponent<Shape>();
15 shape.settings.roundness = 0.5f;
16
17 // roundnessを四隅にセットする
18 shape.settings.roundnessTopLeft = shape.settings.roundness;
19 shape.settings.roundnessTopRight = shape.settings.roundness;
20 shape.settings.roundnessBottomLeft = shape.settings.roundness;
21 shape.settings.roundnessBottomRight = shape.settings.roundness;
22
23 shape.settings.shapeType = ShapeType.Rectangle;
24 shape.settings.fillType = FillType.SolidColor;
25
26 }
27
28 // Update is called once per frame
29 void Update()
30 {
31
32 }
33}
この挙動はちょっと不親切な感じですので、おそらく作者の方も意図的にこういう仕様にしたわけではなく、今回のようなケースをうっかり見落としてしまったんじゃないかな...と思います。