Unity中导入的自定义3D模型无法通过脚本协程Lerp移动的问题
问题根源与解决方法
核心问题是你操作错了对象:Resources.Load加载的是预制体资源,Instantiate(myObj)会生成一个场景内的克隆实例,但你没保存这个实例,反而去修改原始预制体的位置。后续移动协程如果还是操作myObj,那改的是资源文件,不是场景里显示的那个模型,所以看起来没动。
修正后的代码
private GameObject myObjInstance; // 保存场景中的实例对象 void Start() { GameObject prefab = Resources.Load<GameObject>(path_to_model); myObjInstance = Instantiate(prefab); // 保存实例 myObjInstance.transform.position = new Vector3(1.5f, 0, 2.3f); // 修改实例的位置 } // 示例移动协程 IEnumerator MoveObject() { Vector3 targetPos = new Vector3(5f, 0, 5f); float duration = 2f; float elapsedTime = 0f; Vector3 startPos = myObjInstance.transform.position; while(elapsedTime < duration) { elapsedTime += Time.deltaTime; float t = elapsedTime / duration; myObjInstance.transform.position = Vector3.Lerp(startPos, targetPos, t); yield return null; } }
为什么基础几何体测试有效
你用基础几何体测试时,要么是直接把脚本挂载在场景中的几何体上(操作的是自身),要么是正确保存了实例对象,没有出现“操作预制体而非场景实例”的错误。
内容的提问来源于stack exchange,提问作者alcor
相关产品推荐
相关产品推荐

