我已经创建了一个Unity的Android游戏。纵横比是9:16。屏幕的左下方有一个立方体,我正在尝试编写代码,以便如果单击屏幕,则立方体移动到屏幕的底部中间,然后在下一次单击右下角。
我在网上搜索,但没有发现任何有用的东西。有人可以帮我或将我指向教程吗?
检测单击屏幕
void Update()
{
if (Input.touchCount > 0)
{
// Someone clicked the screen!
}
}
- 文档
获得底部中间&屏幕位置右下世界位置
您可能需要在这些数字上偏移一些偏移,因为它将是边缘的确切像素:
Vector3 worldBottomMiddle = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width / 2, 0f));
Vector3 worldBottomRight = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, 0f));
移动立方体
transform.position = Vector3.MoveTowards(position);
一切在一起
Vector3 worldBottomMiddle;
Vector3 worldBottomRight;
Vector3 target;
bool cubeIsMoving = false;
void Start()
{
worldBottomMiddle = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width / 2, 0f));
worldBottomRight = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, 0f));
target = transform.position;
}
void Update()
{
if (Input.touchCount > 0)
{
cubeShouldMove = true;
if (target == worldBottomMiddle)
target = worldBottomRight;
else
target = worldBottomMiddle;
}
if (cubeShouldMove & Vector3.Distance(transform.position, target) < 1)
{
transform.position = Vector3.MoveTowards(target);
}
}
类似的东西应该起作用,但这并不漂亮。如果您对您希望如何工作的详细介绍,我可以将解决方案编辑为更漂亮的解决方案。
编辑:刚看到另一个答案;您应该使用该代码在位置上骑自行车。
您可以使用摄像头在屏幕和世界坐标之间转换。Screentoworldpoint。
float distanceFromCamera = 1.0f;
Vector3 bottomCenter = new Vector3(Screen.Width/2, 0, distanceFromCamera);
Vector3 worldPos = Camera.main.ScreenToWorldPoint(bottomCenter);
myCube.transform.position = worldPos;
您可以将屏幕上的位置存储在数组中,并在它们之间循环:
Vector3[] positions = new Vector3[] {
new Vector3(Screen.Width/2f, 0f, 1f),
new Vector3(Screen.Width, 0f, 1f)
};
int counter = 0;
void Update() {
if (Input.GetMouseDown(0)) {
Vector3 pos = positions[Mathf.Min(positions.Length-1, counter++)];
Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos);
myCube.transform.position = worldPos;
}
}