0

在此处输入图像描述我可以通过一个简单的 transform.position 调用来设置我的播放器的 Y 轴,在一个步骤中,所有这些都在 onTriggerEnter 方法中,但动作只有一个步骤,因此是生涩的。现在我试图通过将 transform.position 函数放在同一个类中的 Update 方法中来使运动平滑。但是,似乎无法在 Update 函数中访问由 onTriggerEnter 方法确定/更新的位置值。如果我将 x 和 z 值打印到控制台,它们包含来自 onTriggerEnter 函数的预期值,但当我从更新函数打印到控制台时,它们似乎为 0。关于我做错了什么的任何想法?我永远不会称自己为程序员,所以假设最坏的情况:-) 在此先感谢您的帮助!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Step1SetElevation : MonoBehaviour
{
    private float moveSpeed = 3f;
    private float currX = 0.0f;
    private float currZ = 0.0f;
    private Vector3 currentPos;
    private GameObject player;
    private Collider other;

    void OnTriggerEnter(Collider other)
    {
    player = GameObject.FindWithTag("Player");
    currentPos = GameObject.Find("PlayerController").transform.position;
    currX = currentPos.x;
    currZ = currentPos.z;
    }

    void Update()
    {
    player = GameObject.FindWithTag("Player");
    player.transform.position = new Vector3(currX, 3.4f, currZ) * Time.deltaTime * moveSpeed;
    }
}
4

1 回答 1

0

我相信你的问题可能是你OnTriggerEnter()用来设置你想让你的玩家移动到的位置,这将在你的玩家进入触发器的帧上被调用,但在玩家离开并重新进入之前不会再次被调用...
如果您改为使用OnTriggerStay()- 类似

void Start(){ // this lookup can be expensive so lets only do it once
    player = GameObject.FindWithTag("Player");
    playerController = GameObject.Find("PlayerController");
}

void OnTriggerStay(Collider other){ // this is called once per frame that a collider remains in a trigger
    if(other.gameObject.tag == "Player"){ // just in case anything else ever enters the collider
        currentPos = playerController.transform.position;
        currX = currentPos.x;
        currZ = currentPos.z;
    }
}

void FixedUpdate(){ // it's generally advised to move objects in fixed update
    player.transform.position = new Vector3(currX, 3.4f, currZ) * Time.fixedDeltaTime * moveSpeed;
}
于 2020-04-22T12:45:02.783 回答