【问题标题】:Change of direction in relation to Arrow相对于箭头改变方向
【发布时间】:2014-09-12 04:00:02
【问题描述】:

我是编程新手,想知道如何创建一个类似于游戏中使用的交换系统,这意味着链接:

https://www.youtube.com/watch?v=11PXll2K_rg&list=FLdeibbADKB476CmvWIyd21A&index=2

我想知道我的泵如何识别箭头的位置并开始朝她的方向移动:

我想我会开始这样做:

运动物体中使用的代码:

public float speed;
public int direction;

void Start () {
    direction = 1;
}


void Update () {

    if (gameObject.transform.position == GameObject.Find("ArrowUp").transform.position){

        direction = 1;
    }

    if (transform.position ==  GameObject.Find("ArrowDown").transform.position)){

        direction = 2;
    }


        if(direction == 1){
          transform.position += new Vector3(0,speed*Time.deltaTime,0);
         }
        if(direction == 2 ){
          transform.position += new Vector3(0,-(speed*Time.deltaTime),0);
         }

    }}

类型:我有一个炸弹正在朝着包含箭头的对象移动,Vector3 它们的位置 X 和 Z 相同,Y 的位置不同。

箭头位置 (0,10,0)

泵的初始位置(0,0,0)

void从这个方向开始=1,然后物体向上移动

然后当泵到达位置 (0,10,0) 时,我希望它识别出向下箭头中的同一位置,然后想要泵 mudaçe 方向 = 2,然后将向下移动。

注意,箭头每隔一段时间会旋转 90 度。那么运动的方向就会不同。

问题:我想知道如何识别这个泵在物体箭头的同一位置,然后下达命令改变它的运动;

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

    如果“箭头”指向 Y 轴(绿色箭头),则可以使用 transform.up

    void Update () {
    
    Vector3 ArrowUpPosition = GameObject.Find("ArrowUp").transform.position
    Vector3 ArrowDownPosition = GameObject.Find("ArrowDown").transform.position
    
    if (gameObject.transform.position == ArrowUpPosition ){
    
        direction = 1;
    }
    
    if (transform.position ==  ArrowDownPosition )){
    
        direction = 2;
    }
    
    if(direction == 1){
        transform.position += ArrowUpPosition.transform.up * speed*Time.deltaTime;
    }
    if(direction == 2 ){
        transform.position += ArrowDownPosition.transform.up * speed*Time.deltaTime;
    }
    

    否则,您可以使用transform.right或transform.forward(和-transform.forward、-transform.up、-transform.right)

    为了性能!!! :

    避免 GAMEOBJECT.FIND IN UPDATE:在 Start() 中获取参考

    避免 GAMEOBJECT.FIND AT :如果可以,将游戏对象作为字段传递给脚本。

    在更新中避免此指令:如果游戏对象具有触发碰撞器,它们是否在 OnTriggerStay 中。

    【讨论】:

    • 谢谢,但是,没有设法让我的对象泵在“箭头”的相同位置识别它。我唯一想要的是在我使用时认识到这个泵在对象“箭头”的相同位置:if (transform.position.y >= GameObject.Find("ArrowDown").transform.position.y)) { 方向 = 2; } : 泵识别,,,, 使用 == 但当她不知道时
    • 啊,好的。可能是精度问题。 == 意味着 2 vector3 完全匹配。您可以使用:if ((vector1 - vector2).sqrMagnitude < smallFloat) { do actions... }
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多