【发布时间】:2021-09-13 20:33:07
【问题描述】:
我正在尝试制作我的第一款统一游戏,它基于抓鱼,基于 Raycast 和 Colliders。我复制了一些代码并对其进行了一些修改,但是当我启动Ray时,它似乎没有与鱼发生碰撞
(GameObject) 有一个Collider2D,它在Hit.Collider 值上给了我NULL。我有一个GameObject,其中包含脚本,以及来自它的 Ray 发射和具有碰撞器的鱼。
顺便说一句,我画了一条线来证明射线到达GameObject(鱼)并且确实到达了,但没有发生碰撞。
这是我的代码,然后是图片:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class grapplinghook : MonoBehaviour {
DistanceJoint2D joint;
Vector3 TargetPos;
public float maxdistance;
public LayerMask mask;
// Use this for initialization
void Start () {
joint = GetComponent<DistanceJoint2D>();
joint.enabled = false;
}
// Update is called once per frame
void Update () {
if(Input.GetMouseButton(0) ) {
TargetPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
TargetPos.z = 0;
Vector2 TargetPos2D = new Vector2(TargetPos.x, TargetPos.y);
Vector2 CurrentPos2D = new Vector2(transform.position.x, transform.position.y);
RaycastHit2D Hit = Physics2D.Raycast(CurrentPos2D, TargetPos2D, maxdistance);
Debug.DrawLine(transform.position, TargetPos2D, Color.black);
if(Hit != null)
Debug.Log("trueeeeeeeeeee");
Debug.Log(Hit.collider);
Debug.Log(Input.mousePosition);
if(Hit.collider){
joint.enabled = true;
Debug.Log("true" + Hit.collider.gameObject.name);
joint.connectedBody = Hit.collider.gameObject.GetComponent<Rigidbody2D>();
joint.distance = Vector2.Distance(transform.position, Hit.point);
}
}
if(Input.GetMouseButtonUp(0)){
joint.enabled = false;
}
}
}
通过 youtube 上第 16 分钟的视频,我发现 WorldPoint 和 Screen 坐标之间的差异与我的问题有关:https://www.youtube.com/watch?v=eF8F5NHZoHQ&t=1246s
问题是我使用ScreenToWorldPoint()时的坐标大于Input.mousePosition。
【问题讨论】: