C# 我怎样才能找到游戏对象所看方向的2D方向向量
以下是重要的内容:C# 我怎样才能找到游戏对象所看方向的2D方向向量,c#,unity3d,vector,quaternions,C#,Unity3d,Vector,Quaternions,以下是重要的内容: private RaycastHit2D[] FillRaycastArray() { List<RaycastHit2D> RaycastList = new List<RaycastHit2D>(); Vector2 rayOrigin = new Vector2(animalTransform.position.x, animalTransform.position.y); anima
private RaycastHit2D[] FillRaycastArray()
{
List<RaycastHit2D> RaycastList = new List<RaycastHit2D>();
Vector2 rayOrigin = new Vector2(animalTransform.position.x, animalTransform.position.y);
animalTransform.rotation.ToAngleAxis(out float angle, out Vector3 axis);
for (int i = 0; i < genes.sightQuality; i++)
{
float rightEyeAngle = angle - (genes.sightAngle / 2 + genes.sightWidth * i);
float leftEyeAngle = angle + (genes.sightAngle / 2 + genes.sightWidth * i);
Vector2 rightEyeDirectionVector = new Vector2((float)-Math.Sin(Mathf.Deg2Rad * rightEyeAngle), (float)Math.Cos(Mathf.Deg2Rad * rightEyeAngle));
Vector2 leftEyeDirectionVector = new Vector2((float)-Math.Sin(Mathf.Deg2Rad * leftEyeAngle), (float)Math.Cos(Mathf.Deg2Rad * leftEyeAngle));
Debug.DrawRay(rayOrigin, rightEyeDirectionVector, Color.red);
Debug.DrawRay(rayOrigin, leftEyeDirectionVector, Color.red);
int predatorLayer = 1 << 8;
predatorLayer = ~predatorLayer;
RaycastHit2D hitR = Physics2D.Raycast(rayOrigin, rightEyeDirectionVector, 20f, predatorLayer);
RaycastHit2D hitL = Physics2D.Raycast(rayOrigin, leftEyeDirectionVector, 20f, predatorLayer);
RaycastList.Add(hitR);
RaycastList.Add(hitL);
}
RaycastHit2D[] raycastArray = RaycastList.ToArray();
return raycastArray;
}
private RaycastHit2D[]FillRaycastArray()
{
List RaycastList=新列表();
Vector2光线原点=新Vector2(animalTransform.position.x,animalTransform.position.y);
动物转换。旋转。到角轴(外浮动角度,外矢量3轴);
for(int i=0;i int traderlayer=1使用Transform.TransformDirection
[*见下文]将眼睛的“向前”方向从局部空间转换为世界空间,然后使用四元数.AngleAxis
创建左右旋转以查找眼睛方向
Vector2 frontLocalDirection = new Vector2(0.7071f,0.7071f);
// or whatever the local "front" direction is.
private RaycastHit2D[] FillRaycastArray()
{
List<RaycastHit2D> RaycastList = new List<RaycastHit2D>();
Vector2 rayOrigin = animalTransform.position;
// will be converted to Vector2 later
Vector3 frontWorldDirection = animalTransform.TransformDirection(
frontLocalDirection);
for (int i = 0; i < genes.sightQuality; i++)
{
float eyeAngleOffset = genes.sightAngle / 2 + genes.sightWidth * i;
Vector2 rightEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset,
Vector3.back) * frontWorldDirection;
Vector2 leftEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset,
Vector3.forward) * frontWorldDirection;
Debug.DrawRay(rayOrigin, rightEyeDirectionVector, Color.red);
Debug.DrawRay(rayOrigin, leftEyeDirectionVector, Color.red);
int predatorLayer = 1 << 8;
predatorLayer = ~predatorLayer;
RaycastHit2D hitR = Physics2D.Raycast(rayOrigin, rightEyeDirectionVector, 20f,
predatorLayer);
RaycastHit2D hitL = Physics2D.Raycast(rayOrigin, leftEyeDirectionVector, 20f,
predatorLayer);
RaycastList.Add(hitR);
RaycastList.Add(hitL);
}
RaycastHit2D[] raycastArray = RaycastList.ToArray();
return raycastArray;
}
Transform.forward
。我试过了,但是如果我得到的只是指向前方的矢量3,我就不能通过sightAngle和sightWitdh来改变角度。你的问题是“如何找到游戏对象所看方向的2D方向矢量?”这就是forward
提供的功能。你说得对,我的错。我这里的第一个问题。@3Dave在2D游戏的典型设置中,Vector2 foobar=transform。forward
通常会导致foobar==Vector2.zero
,这不是很有用:)
private RaycastHit2D[] FillRaycastArray()
{
List<RaycastHit2D> RaycastList = new List<RaycastHit2D>();
Vector2 rayOrigin = animalTransform.position;
// will be converted to Vector2 later
Vector3 frontWorldDirection = animalTransform.up;
for (int i = 0; i < genes.sightQuality; i++)
{
float eyeAngleOffset = genes.sightAngle / 2 + genes.sightWidth * i;
Vector2 rightEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset,
Vector3.back) * frontWorldDirection;
Vector2 leftEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset,
Vector3.forward) * frontWorldDirection;
Debug.DrawRay(rayOrigin, rightEyeDirectionVector, Color.red);
Debug.DrawRay(rayOrigin, leftEyeDirectionVector, Color.red);
int predatorLayer = 1 << 8;
predatorLayer = ~predatorLayer;
RaycastHit2D hitR = Physics2D.Raycast(rayOrigin, rightEyeDirectionVector, 20f,
predatorLayer);
RaycastHit2D hitL = Physics2D.Raycast(rayOrigin, leftEyeDirectionVector, 20f,
predatorLayer);
RaycastList.Add(hitR);
RaycastList.Add(hitL);
}
RaycastHit2D[] raycastArray = RaycastList.ToArray();
return raycastArray;
}