C# 统一-将不同的游戏对象放在函数OnTiggerEnter中
我的项目是在目标车和AGV之间划一条线。 对不起,我的英语水平。我的英语不好 这是我的代码,它是如何工作的C# 统一-将不同的游戏对象放在函数OnTiggerEnter中,c#,unity3d,C#,Unity3d,我的项目是在目标车和AGV之间划一条线。 对不起,我的英语水平。我的英语不好 这是我的代码,它是如何工作的 找到目标和AGV的位置 利用AGV的位置x,y和目标的位置x,y得到一个简单的线性方程 在我刚刚在步骤2中找到的简单线性方程上画点 当我的点遇到一个标签“墙”做点什么。。。(尚未制作) 这就是我的问题: 我的C#'MapFile.cs'脚本安装在EmptyObject'Map'上 当场景开始时,点开始逐渐放置在线性方程上,直到AGV到达目标。 但我希望在最后一个点与“墙”对象相交时停止
void onTriggerEnter(Collider other)
但正如您所看到的,'MapFile.cs'脚本安装在EmptyObject'Map'上
我不知道如何将我的点与墙壁相互作用
这是我的密码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;
public class MapFile : Agent
{
public Transform targetPosition;
public Transform AGVposition;
public GameObject dot;
public float w, b;
public float functionTarget = 0f;
public float[] data = new float[2];
void Awake()
{
Initializing();
}
public void Initializing()
{
data[0] = AGVposition.position.x;
data[1] = AGVposition.position.y;
}
public void drawline()
{
if(data[0] < 20f && data[0] > -20f)
{
while(true)
{
data[1] = FindYValue(data[0]);
Instantiate(dot, new Vector3( data[0] , 0f , data[1] ) , Quaternion.identity);
if(targetPosition.position.x > 0 )
{
data[0] += 0.07f;
if(data[0] > 20f) break;
}
else
{
data[0] -= 0.07f;
if(data[0] < -20f)break;
}
}
}
}
void Update()
{
drawline();
}
public float FindYValue(float a)
{
float result;
float x1 = AGVposition.position.x;
float y1 = AGVposition.position.z;
float x2 = targetPosition.position.x;
float y2 = targetPosition.position.z;
result = ( (y2 - y1) / (x2 - x1) ) * (a - x1) + y1;
return result;
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用MLA试剂;
公共类映射文件:代理
{
公共转型目标定位;
公共场所;
公共游戏对象点;
公众浮标w,b;
公共浮动功能目标=0f;
公共浮动[]数据=新浮动[2];
无效唤醒()
{
初始化();
}
公共无效初始化()
{
数据[0]=AGVposition.position.x;
数据[1]=AGVposition.position.y;
}
公共空水位线()
{
if(数据[0]<20f&&data[0]>-20f)
{
while(true)
{
数据[1]=FindYValue(数据[0]);
实例化(点,新向量3(数据[0],0f,数据[1]),四元数.identity);
如果(targetPosition.position.x>0)
{
数据[0]+=0.07f;
如果(数据[0]>20f)中断;
}
其他的
{
数据[0]=0.07f;
如果(数据[0]<-20f)中断;
}
}
}
}
无效更新()
{
抽绳();
}
公共浮点FindYValue(浮点a)
{
浮动结果;
浮点x1=AGVposition.position.x;
浮动y1=AGVposition.position.z;
浮点x2=targetPosition.position.x;
浮动y2=targetPosition.position.z;
结果=((y2-y1)/(x2-x1))*(a-x1)+y1;
返回结果;
}
}
我并没有真正理解所有的东西,但你们只想在两个物体之间画一条线,而不穿过另一个物体?如果是这样,只需将光线投射从object1拍摄到object2,并将lineRenderer的endPosition设置为光线的末端。如果同意Jichael的意见,则并不完全清楚您想要什么。然而,这些“点”是游戏对象,你可以在点上有一个带有OnTiggeretner的脚本。。如果它碰撞的物体有一个墙的标签,做点什么。。所以OnTriggerEnter(Collider thing){if(thing.gameObject.tag==“Wall”)DoSomething();}不如使用光线投射,将原点和命中位置之间的距离除以点的大小,并仅在这两点之间实例化点?你的墙可能没有选中
isTrigger
。但是derHugo和Jichael是正确的,你应该使用光线投射。