我正在努力让我的第一场比赛基于抢夺鱼,这是基于Raycast和Colliders。我复制了一些代码并对其进行了一些修改,但似乎当我启动Ray时,它不会与鱼碰撞
(GameObject
)Collider2D
,NULL
,Hit.Collider
值GameObject
。我有一个包含脚本的GameObject
,从中可以看到Ray发射和有碰撞器的鱼。
顺便说一句,我画了一条线来证明光线到达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;
}
}
}
(鱼)并确实如此,但没有发生碰撞。
这是我的代码,然后是图像:
ScreenToWorldPoint()
我发现WorldPoint和Screen的坐标之间的差异与我的问题有关,我在第16分钟通过youtube上的视频:https://www.youtube.com/watch?v=eF8F5NHZoHQ&t=1246s
问题是我使用Input.mousePosition
时的坐标大于count()
。
答案 0 :(得分:0)
Physics2D.Raycast采用两个Vector2作为前两个参数:原点和方向。
原点是射线开始的点,方向是射线的射程。
你正在使用它,好像它是从A点到B点。如果你想要从A到B的Ray,你的原点应该是A点,但方向应该是B - A(因为它是计算从A到B的方向的方法。