【发布时间】:2015-12-25 17:57:17
【问题描述】:
我在创建脚本时遇到了一些问题,一旦玩家单击游戏对象,该游戏对象就会跟随鼠标。再次单击鼠标后,对象将被放下。
这是脚本:
public float distance = 10;
public void OnMouseDrag()
{
Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance);
Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
transform.position = objPosition;
}
这很好用,但问题是如果玩家(主摄像头)上有任何类型的移动脚本,例如其上的角色控制器脚本或其父级,那么拾取的游戏对象将四处移动如果它试图远离鼠标。
public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
private Vector3 moveDirection = Vector3.zero;
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
if(Input.GetKey(KeyCode.LeftShift))
{
speed = 15.0f;
}else
{
speed = 6.0f;
}
if(controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
}
if(Input.GetButton("Jump"))
{
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
float rotateRight = Input.GetAxis("Mouse X");
transform.Rotate(0, rotateRight, 0);
}
如果上面的脚本被禁用,那么 GameObject 不会崩溃并且可以正常工作。
我知道角色控制器中的输入以某种方式影响了顶部脚本,鼠标移动,因此游戏对象在该方向上变换,同时试图保持鼠标上的某个点。
但是我怎么做所以它不会影响它。
【问题讨论】:
-
尝试在您的更新中放置一个布尔值,该布尔值会在拖动
if(isBeingDragged) return;时切换。只要脚本为真,就有效地禁用脚本。