[英]Is there a way to move a gameobject with a rigidbody
。
我正在制作3D游戏,希望能够用一个手指向上移动该板并在Z轴上旋转它。 如果手指向上滑动-面板将上升。 如果手指向左或向右滑动,则面板将向左或向右倾斜。
关键是使棋盘使位于其顶部的球向上运动,并且当棋盘向一侧倾斜/旋转时,球开始向一侧滑落。
板和球均附有刚性体。
到目前为止,我已经尝试过:
我已经尝试了更多的变体,但不幸的是,我现在不记得它们了,而我已经尝试过的所有方法都没有用。
我想到了。 我将图像(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;
}
}
还有许多事情需要改进和完善,但是作为基本代码,它可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.