。
我正在制作3D游戏,希望能够用一个手指向上移动该板并在Z轴上旋转它。如果手指向上滑动-面板将上升。如果手指向左或向右滑动,则面板将向左或向右倾斜。
关键是使棋盘使位于其顶部的球向上运动,并且当棋盘向一侧倾斜/旋转时,球开始滑动并向一侧掉落。
木板和球都附有刚体。
到目前为止,我已经尝试过:
我已经尝试了更多的变体,但是不幸的是,我现在不记得它们了,而我已经尝试过的那些都没有用。
答案 0 :(得分:0)
我知道了。我将图像(UI)游戏对象添加到一个空的游戏对象,以便它可以从X上的0和Y轴上的0移动。添加了3个变换-向左倾斜1个,向右倾斜1个和在屏幕顶部中间的1个,以在游戏中用作指导,然后禁用它们,以使它们不会出现在实际游戏中。将脚本附加到我的Image UI游戏对象上,并在检查器和瞧中分配了必要的转换,即可使用。
using UnityEngine;
using UnityEngine.EventSystems;
public class MoveStick : MonoBehaviour, IDragHandler, IEndDragHandler {
public Transform leftTarget;
public Transform rightTarget;
public float rotateSpeed;
[Space]
Vector2 joyStartPosition;
public Transform stick;
public Transform topTarget;
public float speed;
bool goingUp;
void Start()
{
joyStartPosition = transform.position;
goingUp = false;
}
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position;
if (transform.localPosition.y > 80f || transform.localPosition.x > 50 || transform.localPosition.x < -50)
{
goingUp = true;
var step = speed * Time.deltaTime;
stick.position = Vector3.MoveTowards(stick.position, topTarget.position, step);
Debug.Log("Going up: " + goingUp);
}
else if (transform.localPosition.y < 80f)
{
goingUp = false;
Debug.Log("Going up: " + goingUp);
}
if (transform.localPosition.x > 80 && transform.localPosition.y > 80)
{
stick.rotation = Quaternion.RotateTowards(stick.rotation, rightTarget.rotation, rotateSpeed * Time.deltaTime);
}
else if (transform.localPosition.x < -80 && transform.localPosition.y > 80)
{
stick.rotation = Quaternion.RotateTowards(stick.rotation, leftTarget.rotation, rotateSpeed * Time.deltaTime);
}
}
public void OnEndDrag(PointerEventData eventData)
{
transform.position = joyStartPosition;
eventData.position = joyStartPosition;
Debug.Log("Joystick is not moving");
goingUp = false;
}
}
仍有许多需要改进和改进的地方,但是作为基本代码,它可以很好地工作。