unity3D中,限制物体移动范围时出错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3D中,限制物体移动范围时出错相关的知识,希望对你有一定的参考价值。
我获取当前物体的位置,判断当这个位置小于一定值的时候才能移动,但是运行时移动到边界就开始反方向移动了,求大神指点。
void Update ()
float x = transform.position.x;
float y = transform.position.y;
if (Input.GetKey(KeyCode.W))
if (Input.GetKey(KeyCode.A))
if (x > -10000)
this.transform.Translate(Vector3.right * Time.deltaTime * -RotateSpeed);
if (Input.GetKey(KeyCode.D))
if (x < 10000)
this.transform.Translate(Vector3.right * Time.deltaTime * RotateSpeed);
this.transform.Translate(Vector3.right * Time.deltaTime * -RotateSpeed);
大于-1000时该物体会移动追问
大哥。。。代码我写的肯定知道什么意思啊,麻烦看清楚我的问题啊
追答不好意思没看清楚你的问题,也没有看懂你的代码,没有明白你什么意思
追问额。。。。。。那个,我设置了,当按下键盘上的A的时候,判定物体的X轴坐标是否小于-10000,当小于时,物体往左边移动,大于时就不移动,但是现在当按住A的时候向左移动到-10000的位置的时候又会朝右边移动了
追答// Update is called once per frame
void Update()
if (transform.position.x 10)
transform.position=new Vector3(9.9f, transform.position.y, transform.position.z);
if (Input.GetKey(KeyCode.A))
transform.Translate(new Vector3(-1, 0, 0)* 2*Time.deltaTime);
if (Input.GetKey(KeyCode.D))
transform.Translate(new Vector3(1, 0, 0) * 2 * Time.deltaTime);
将 UICollectionview 中单元格的移动限制在 CollectionView 的范围内
【中文标题】将 UICollectionview 中单元格的移动限制在 CollectionView 的范围内【英文标题】:Constrain movement of cell in UICollectionview to bounds of the CollectionView 【发布时间】:2018-02-23 14:50:56 【问题描述】:当我将一个单元格拖到 CollectionView 边界之外时,我遇到了一些奇怪的行为(实际上是崩溃)。如何将 CollectionView 的用户交互限制为仅 CollectionView 的框架?当用户长按并拖动视图单元格时,我只希望他们能够在 CollectionView 中移动单元格,而不是在整个屏幕上移动
private void HandleLongPressOnCollection(UILongPressGestureRecognizer gesture)
switch (gesture.State)
case UIGestureRecognizerState.Began:
var myIndexPath = MyCollectionView.IndexPathForItemAtPoint(gesture.LocationInView(MyCollectionView));
this.selectedIndexPath = myIndexPath;
BeginInteractiveMovementForItem();
break;
case UIGestureRecognizerState.Changed: // This is not working correctly
if (MyCollectionView.Frame.Contains(gesture.LocationInView(MyCollectionView)))
MyCollectionView.UpdateInteractiveMovement(gesture.LocationInView(MyCollectionView));
break;
case UIGestureRecognizerState.Ended:
EndInteractiveMovementForItem();
break;
default:
MyCollectionView.CancelInteractiveMovement();
break;
private void BeginInteractiveMovementForItem()
if (selectedIndexPath != null)
MyCollectionView.BeginInteractiveMovementForItem(selectedIndexPath);
var cell = MyCollectionView.CellForItem(selectedIndexPath) as CustomViewCell;
cell.MarkCellAsMoving();
private void EndInteractiveMovementForItem()
if (selectedIndexPath != null)
var cell = MyCollectionView.CellForItem(selectedIndexPath) as CustomViewCell;
cell?.SetToNormalState();
MyCollectionView.EndInteractiveMovement();
【问题讨论】:
【参考方案1】:您应该将手势的位置与ContentView
而非Frame
like 进行比较:
case UIGestureRecognizerState.Changed:
CGPoint gesturePoint = gesture.LocationInView(MyCollectionView);
CGSize contentSize = MyCollectionView.ContentSize;
if (gesturePoint.X > 0 && gesturePoint.X < contentSize.Width &&
gesturePoint.Y > 0 && gesturePoint.Y < contentSize.Height)
MyCollectionView.UpdateInteractiveMovement(gesture.LocationInView(MyCollectionView));
break;
调整 if 语句中的常量以满足您的要求。
此外,当您调用MyCollectionView.EndInteractiveMovement();
时,事件MoveItem()
可能会发生崩溃。您可以尝试发布一些有关它的代码。
【讨论】:
【参考方案2】:你可以使用
collectionView.bounces = false
如果你想拖到边缘。
您也可以发布您遇到的崩溃吗?
【讨论】:
崩溃没有给我任何堆栈跟踪,当我查看设备日志时它也没有给我任何信息。我认为这是与 xamarin 中的 iOS 11 相关的崩溃,它不会发生在 iOS 10 设备上。我想要做的是防止用户在整个屏幕上拖动单元格,我只希望他们能够在 collectionview 的范围内单击并拖动以上是关于unity3D中,限制物体移动范围时出错的主要内容,如果未能解决你的问题,请参考以下文章