Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一-将不同的游戏对象放在函数OnTiggerEnter中_C#_Unity3d - Fatal编程技术网

C# 统一-将不同的游戏对象放在函数OnTiggerEnter中

C# 统一-将不同的游戏对象放在函数OnTiggerEnter中,c#,unity3d,C#,Unity3d,我的项目是在目标车和AGV之间划一条线。 对不起,我的英语水平。我的英语不好 这是我的代码,它是如何工作的 找到目标和AGV的位置 利用AGV的位置x,y和目标的位置x,y得到一个简单的线性方程 在我刚刚在步骤2中找到的简单线性方程上画点 当我的点遇到一个标签“墙”做点什么。。。(尚未制作) 这就是我的问题: 我的C#'MapFile.cs'脚本安装在EmptyObject'Map'上 当场景开始时,点开始逐渐放置在线性方程上,直到AGV到达目标。 但我希望在最后一个点与“墙”对象相交时停止

我的项目是在目标车和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是正确的,你应该使用光线投射。