C# 光线投射(Circlecast)和对象方向不相同
我试图画一条虚线,显示球落在哪里,并从那里反射。我用的是unity的物理系统 我认为圆投射和线渲染器有问题 无论我在哪里用鼠标点击,球都会在那里繁殖。因此,我认为BallCreate()函数没有任何问题 问题就在这里 如图所示,球在transform.position上实例化并通过hit.point。不知何故,线渲染器和球的方向不一样。总有一点不同(有时更大) 代码如下: 我想在一周内解决这个问题,任何帮助都很重要C# 光线投射(Circlecast)和对象方向不相同,c#,unity3d,C#,Unity3d,我试图画一条虚线,显示球落在哪里,并从那里反射。我用的是unity的物理系统 我认为圆投射和线渲染器有问题 无论我在哪里用鼠标点击,球都会在那里繁殖。因此,我认为BallCreate()函数没有任何问题 问题就在这里 如图所示,球在transform.position上实例化并通过hit.point。不知何故,线渲染器和球的方向不一样。总有一点不同(有时更大) 代码如下: 我想在一周内解决这个问题,任何帮助都很重要 using System.Collections; using System.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public Transform BallPrefab = null;
bool ShootDirected = true;
Vector3 mousePos;
private LineRenderer linerender;
RaycastHit2D hitx;
private Vector3 dir;
private Vector3 origin;
void Start()
{
linerender = GetComponent<LineRenderer>();
}
void Update()
{
mousePos = new Vector3(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y, 0);
//Direction according to mouse position.
dir = mousePos - transform.position;
origin = transform.position;
//First hit point 0.3307159f is the radius of the ball.
RaycastHit2D hit = Physics2D.CircleCast(origin, 0.3307159f, dir, 100f, 1 << 9 | 1<<10);
if (hit.collider != null)
{
//Stored reflected hit point.
Vector2 reflectDir = Vector2.Reflect(dir, hit.normal);
//Then start second ray from hit point thru reflected hit point.
RaycastHit2D SecondHit = Physics2D.CircleCast(hit.point, 0.3307159f, reflectDir, 100, 1 << 9 | 1<<10);
//Draw lines beetween origin, hit.point and secondhit point.
linerender.SetPosition(0, origin);
linerender.SetPosition(1, hit.point);
linerender.SetPosition(2, SecondHit.point);
}
//Create 50 balls when mouse clicked.
if (Input.GetMouseButtonUp(0))
{
ShootDirected = true;
StartCoroutine("BallCreate");
}
}
IEnumerator BallCreate()
{
Vector3 shootDirection = new Vector3(0,0,0);
//Create 50 balls
for (int i = 0; i < 50; i++)
{
Transform ball = Instantiate(BallPrefab, transform.position, Quaternion.identity) as Transform;
Rigidbody2D rb = ball.GetComponent<Rigidbody2D>();
if (ShootDirected)
{
//Set shootDirection to mouse position
shootDirection = Input.mousePosition;
shootDirection.z = 0.0f;
shootDirection = Camera.main.ScreenToWorldPoint(shootDirection);
//Get direction.
shootDirection = (shootDirection - transform.position);
ShootDirected = false;
}
//Apply force to each ball thru mouse direction.
rb.velocity = new Vector2(shootDirection.x, shootDirection.y);
rb.velocity = 7f * (rb.velocity.normalized);
yield return new WaitForSeconds(0.08f);
}
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
public-Transform-ballpreaf=null;
bool=true;
矢量鼠标3;
私有linerender linerender;
RAYCASTHITX;
专用矢量3-dir;
私人矢量源;
void Start()
{
linerender=GetComponent();
}
无效更新()
{
mousePos=newvector3(Camera.main.ScreenToWorldPoint(Input.mousePosition).x,Camera.main.ScreenToWorldPoint(Input.mousePosition).y,0);
//方向根据鼠标位置。
dir=鼠标点-transform.position;
原点=变换位置;
//第一个命中点0.3307159f是球的半径。
RaycastHit2D hit=Physics2D.CircleCast(origin,0.3307159f,dir,100f,1在Unity Technologies上的MelvMay帮助下发现了问题
简单地改变
`RaycastHit2D SecondHit = Physics2D.CircleCast(hit.point, 0.3307159f, reflectDir, 100, 1 << 9 | 1<<10);`
`RaycastHit2D SecondHit=Physics2D.CircleCast(hit.point,0.3307159f,reflectDir,100,1在Unity Technologies上的MelvMay帮助下发现了问题
简单地改变
`RaycastHit2D SecondHit = Physics2D.CircleCast(hit.point, 0.3307159f, reflectDir, 100, 1 << 9 | 1<<10);`
`RaycastHit2D SecondHit=Physics2D.CircleCast(hit.point,0.3307159f,reflectDir,100,1还更改linerender.SetPosition(0,原点);linerender.SetPosition(1,hit.centroid);linerender.SetPosition(2,SecondHit.centroid);还更改linerender.SetPosition(0,原点);linerender.SetPosition(1,命中.质心);linerender.SetPosition(2,第二次命中.质心);