我试图制作一个2D迷宫游戏,它很简单,但我需要让玩家跟随我的手指在屏幕上,我只是让玩家走到我把手指放在屏幕上的地方,但我只想让它只有当我用手指在玩家身上时才开始跟随,但它根本不起作用。
我正在使用这个脚本atm,但没有按我想要的方式工作:X
void Update() {
if(Input.GetMouseButton(0)) {
Vector3 pos = Input.mousePosition;
pos.z = distanceFromCamera;
pos= cam.ScreenToWorldPoint(pos);
rb.velocity = (pos-square.position)*velocity;
}
if(Input.GetMouseButtonUp(0)) {
rb.velocity = Vector3.zero;
}
}
现在尝试这个脚本:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(MeshCollider))]
public class DraggingObject : MonoBehaviour
{
private Vector3 screenPoint;
private Vector3 offset;
void OnMouseDown() {
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void OnMouseDrag() {
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
}
它像我想的那样拖动,但当我需要碰撞时,它不起作用,只是像没有碰撞一样传球。
我只想使用IDragHandler
来简化这一点:
public class FollowFinger : MonoBehaviour, IDragHandler
{
// ...
public void OnDrag(PointerEventData eventData)
{
Vector3 pos = eventData.position
pos.z = distanceFromCamera;
pos= cam.ScreenToWorldPoint(pos);
rb.velocity = (pos-square.position)*velocity;
}
}
您可能需要在相机中添加Physics2DRaycaster
(如果使用的是3d,则添加PhysicsRaycaster
(。
你可能还想让你的玩家的对撞机(任何合适的类型(比它们看起来大一点,这样玩家就可以把他们的手指拖得更远。
请参阅此处获取更多指导。