如何旋转我单击的立方体而不是所有立方体同时旋转?
Posted
技术标签:
【中文标题】如何旋转我单击的立方体而不是所有立方体同时旋转?【英文标题】:How to rotate the cube I click instead of all cubes rotating at the same time? 【发布时间】:2021-10-31 21:48:28 【问题描述】:所以我正在实例化立方体,我想旋转一个单击的立方体,但是当我单击立方体时,所有实例化的立方体同时旋转,我一直尝试使用布尔值但没有成功。任何帮助,将不胜感激。 UNITY 2D
public int rotationDirection = -1; //-1 for clockwise
public int rotationStep = 5; //Should be less than 90
public bool noRotation;
// public GameObject cubeBox;
private Vector3 currentRotation, targetRotation;
// Update is called once per frame
void Update()
if (Input.GetMouseButtonDown(0))
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if (hit.collider != null && hit.collider.tag == "colourBox" && noRotation == false)
Debug.Log("object clicked: " + hit.collider.tag);
RotateCube();
void RotateCube()
currentRotation = gameObject.transform.eulerAngles;
targetRotation.z = (currentRotation.z + (90 * rotationDirection));
StartCoroutine(objectRotationAnimation());
IEnumerator objectRotationAnimation()
currentRotation.z += (rotationStep * rotationDirection);
gameObject.transform.eulerAngles = currentRotation;
yield return new WaitForSeconds(0);
if (((int)currentRotation.z > (int)targetRotation.z && rotationDirection < 0))
StartCoroutine(objectRotationAnimation());
【问题讨论】:
条件判断一个立方体是否被点击,但需要判断当前立方体是否被点击。我不知道团结,但也许if (hit.collider != null && hit.collider.tag == "colourBox" && hit.collider.attachedRigidbody == this && noRotation == false)
.
我将光线投射更改为 OnMouseDown 并解决了问题。但是我仍然想知道如果我使用上面的代码会有什么解决方案!private void OnMouseDown() RotateCube();
【参考方案1】:
如果我理解正确的话,这个脚本出现在所有立方体上。
问题在于,当您用鼠标单击时,每个立方体都会创建自己的光线投射实例。之后每个立方体将检查hit.collider
是否不是null
,其标签是否为colourBox
,以及noRotation
是否等于false
。
事实上,您并没有在任何地方检查您刚刚单击的立方体。您可以通过比较光线投射所碰撞的游戏对象的实例 ID 和运行脚本的游戏对象的实例 ID 来简单地添加此检查。
if (hit.collider != null && hit.collider.tag == "colourBox" && noRotation == false)
// Check if the cube that was clicked was this cube
if (hit.collider.gameObject.GetInstanceID() == gameObject.GetInstanceID())
Debug.Log("object clicked: " + hit.collider.tag);
RotateCube();
这样,每个多维数据集都会将其实例 ID 与单击对象的实例 ID 进行比较。只有被点击的对象会在这个if
语句中返回true
,从而运行RotateCube
方法。
【讨论】:
【参考方案2】:使用它而不是 RayCastHit2D ....删除了 Update 中的所有内容并创建了一个新的 void。
private void OnMouseDown()
RotateCube();
【讨论】:
请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。以上是关于如何旋转我单击的立方体而不是所有立方体同时旋转?的主要内容,如果未能解决你的问题,请参考以下文章