C# 雷克特沃恩';t位置
我正在尝试移动一个RectTransform,它是在单击UI对象时触发的。当我在Update、LateUpdate或动画中设置位置时,RectTransform会按预期移动。当我尝试在OnClick回调中设置position/anchoredPosition/etc时,什么都没有发生(当我查询变量时,变量是不变的) 我有以下游戏板层次结构: 屏幕空间覆盖模式下的画布(全尺寸)C# 雷克特沃恩';t位置,c#,unity3d,unity-ui,C#,Unity3d,Unity Ui,我正在尝试移动一个RectTransform,它是在单击UI对象时触发的。当我在Update、LateUpdate或动画中设置位置时,RectTransform会按预期移动。当我尝试在OnClick回调中设置position/anchoredPosition/etc时,什么都没有发生(当我查询变量时,变量是不变的) 我有以下游戏板层次结构: 屏幕空间覆盖模式下的画布(全尺寸) 容器:RectTransform对象 MoveObj:具有矩形变换和画布渲染器的游戏对象 容器矩形: M
- 容器:RectTransform对象
-
- MoveObj:具有矩形变换和画布渲染器的游戏对象
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log($"{this.gameObject.name} - OnPointerClick - state:{this._state}");
(transform as RectTransform).position = offsetMaxTarget; // :(
(transform as RectTransform).localPosition = offsetMaxTarget; // :(
(transform as RectTransform).offsetMin = offsetMinTarget; // :(
(transform as RectTransform).offsetMax = offsetMaxTarget; // :(
(transform as RectTransform).anchoredPosition = targetPosition; // :(
}
SetInsertAndSizeFromparentEdge确实更改rect的大小,但根本不移动位置
(transform as RectTransform).SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 450.0f, 150.0f);
MoveObj是从预置中实例化的:
GameObject newMoveObj = Instantiate(MoveObjPrefab,
new Vector3(Container.transform.position.x, Container.transform.position.y, 2),
Quaternion.identity,
Container.transform);
newMoveObj.transform.localPosition = new Vector3(0, 0, 2);
如果我使用动画制作工具,并设置anchoredPosition和position属性的动画,则对象将完全按照我所希望的方式移动
我在代码中设置的唯一有效属性是,如果我设置轴,它实际上会移动。现在这一切都很好,但我发现的大多数信息表明,移动位置至少应该做点什么,动画的成功让我认为这是正确的方法。在我发疯之前,为什么定位在事件处理程序中设置不正确,但在更新中确实有效?我找到了一个解决方案,尽管我不理解它 动画始终处于空闲状态,没有运动,因为我从未设置触发器。下一个州确实有运动,改变了位置。我从animator图形中删除了所有状态,现在可以通过所有常规方法设置位置
我不明白为什么没有运动的状态仍然会将位置重置为默认值,但是。。。继续,我猜。它是移动到错误的位置还是根本不移动?根本不移动。这很奇怪。你使用的是哪个版本的Unity,因为这听起来像是一个核心引擎错误。2017.2.Hmm版。我使用的是同一个版本,但我没有这个问题。