Scroll Rect manual scroll por Unity C# script
– UnityAssets3Free
bienvenido , por aqui Camilo y esta vez os traigo
nueva pregunta curiosa
Quiero hacer un script C# para Unity para que la vista de desplazamiento se desplace hacia arriba cuando presiono la tecla «ARRIBA» y se desplace hacia abajo cuando presiono la tecla «ABAJO».
4 respuestas 4
Solo usa
ScrollRect.horizontalNormalizedPosition // value range (0 to 1)
o
ScrollRect.verticalNormalizedPosition // value range (0 to 1)
probar lerp
estos valores de acuerdo con los controladores de eventos de clic de botón para los botones arriba y abajo.
O puedes echar un vistazo a los guiones HorizontalScrollSnap.cs
y VerticalScrollSnap.cs
en el Extensiones de UnityUI
Las otras respuestas parecían incompletas o demasiado complejas, así es como lo hice. asumiendo scroll
es la dirección en la que quieres rodar, speed
es una propiedad que controla su velocidad de desplazamiento en Unityes de contenido/seg, y scrollRect
es una referencia al componente ScrollRect:
if (scroll != 0)
float contentHeight = scrollRect.content.sizeDelta.y;
float contentShift = speed * scroll * Time.deltaTime;
scrollRect.verticalNormalizedPosition += contentShift / contentHeight;
Esto debería cambiar la cantidad correcta para cualquier tamaño de contenido y causar correctamente un rebote elástico en la parte superior e inferior (si ScrollRect está configurado para eso).
Para un desplazamiento suave (usando lerp).
[SerializeField]
private ScrollRect _scrollRectComponent;
[SerializeField]
RectTransform _container;
private IEnumerator LerpToPage(int page)
Vector2 _lerpTo = (Vector2)_scrollRectComponent.transform.InverseTransformPoint(_container.position) - (Vector2)_scrollRectComponent.transform.InverseTransformPoint(target.position);
bool _lerp = true;
Canvas.ForceUpdateCanvases();
while(_lerp)
float decelerate = Mathf.Min(10f * Time.deltaTime, 1f);
_container.anchoredPosition = Vector2.Lerp(_scrollRectComponent.transform.InverseTransformPoint(_container.position), _lerpTo, decelerate);
if (Vector2.SqrMagnitude((Vector2)_scrollRectComponent.transform.InverseTransformPoint(_container.position) - _lerpTo) < 0.25f)
_container.anchoredPosition = _lerpTo;
_lerp = false;
yield return null;
Tu pregunta es muy incompleta. Para 2d o 3d? ¿Qué intentaste?
A continuación, le mostramos cómo hacerlo, con algunas conjeturas donde omitió información. Agregue este código en su componente de cámara:
void Update()
if (Input.GetKeyDown(Input.KeyCode.W)
transform.position = new Vector3(transform.position.x, transform.position.y + 2, transform.position.z);
Lo que esto hace es acceder a la transformación de los objetos a los que adjunta el script y ajustar el valor Y de su posición con +2 si hace clic en W.
Puede agregar más declaraciones if y modificar las claves, pero el núcleo está ahí.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,hasta la proxima