Unity中如何获取玩家Vector3坐标 实现物品丢弃在玩家前方5单位位置
问题原因分析
- 错误1:
lastpos是你在CustomStart方法内定义的局部变量,作用域仅在该方法内,DropItem方法无法访问,且Vector3结构体本身没有内置的lastpos静态属性,属于语法错误。 - 错误2:原逻辑仅在初始化时记录了一次玩家位置,后续玩家移动后位置不会更新,也没有实现「生成在玩家前方5单位」的需求。
修正后代码
using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using UnityEngine; public class Slot : MonoBehaviour { public Item slotsItem; public Transform player; // 丢弃偏移量可直接在Inspector面板调整 public float dropForwardOffset = 5f; Sprite defaultSprite; Text amountText; public void CustomStart() { defaultSprite = GetComponent<Image>().sprite; amountText = transform.GetChild(0).GetComponent<Text>(); this.player = GameObject.FindWithTag("Player").transform; } public void DropItem() { if(slotsItem != null && player != null) { slotsItem.transform.parent = null; slotsItem.gameObject.SetActive(true); // 实时计算玩家当前位置前方5单位的坐标 slotsItem.transform.position = player.position + player.forward * dropForwardOffset; } } public void CheckForItem() { if(transform.childCount > 1) { slotsItem = transform.GetChild(1).GetComponent<Item>(); GetComponent<Image>().sprite = slotsItem.itemSprite; if(slotsItem.amountInStack > 1) amountText.text = slotsItem.amountInStack.ToString(); } else { slotsItem = null; GetComponent<Image>().sprite = defaultSprite; amountText.text = ""; } } }
调整说明
- 移除了无效的
lastpos局部变量,改为丢弃物品时实时获取玩家当前位置,避免玩家移动后丢弃位置偏差 - 用
player.forward获取玩家正前方方向向量,乘以偏移量即可得到玩家前方指定距离的生成坐标 - 新增
player非空判断,避免玩家标签未正确设置时触发空引用报错 - 若为2D项目,玩家朝向为左右方向时,将
player.forward替换为player.right即可适配2D丢弃位置
内容的提问来源于stack exchange,提问作者cb12438
相关产品推荐
相关产品推荐

