首页 > 数据库技术 > 详细

DragRigidbody2D

时间:2014-03-24 11:34:32      阅读:690      评论:0      收藏:0      [点我收藏+]
using UnityEngine;
using System.Collections;

//This script allows to drag rigidbody2D elements on the scene with orthographic camera
//Attach this script to your camera

public class DragRigidbody2D : MonoBehaviour
{
    public float Damper = 5f;
    public float Frequency = 3;
    public float Drag = 10f;
    public float AngularDrag = 5f;
    
    private SpringJoint2D _springJoint;

    private Camera _camera;
    private RaycastHit2D _rayHit;

        void Start ()
        {
        _camera = gameObject.GetComponent<Camera>();
        }
        
        void Update () 
    {
        if (!Input.GetMouseButtonDown(0))
            return;

        //Looking for any collider2D under mouse position
        _rayHit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

        if (_rayHit.collider == null)
            return;
        
        if (!_rayHit.collider.rigidbody2D || _rayHit.collider.rigidbody2D.isKinematic)
            return;


        if (!_springJoint)
        {
            //Create spring joint
            GameObject go = new GameObject("[Rigidbody2D_dragger]");
            Rigidbody2D body = go.AddComponent<Rigidbody2D>();
            _springJoint = go.AddComponent<SpringJoint2D>();
            body.isKinematic = true;
        }

            _springJoint.transform.position = _rayHit.point;

            _springJoint.anchor = Vector2.zero;

        //Apply parameters to spring joint
            _springJoint.frequency = Frequency;
            _springJoint.dampingRatio = Damper;
            _springJoint.distance = 0;
            _springJoint.connectedBody = _rayHit.collider.rigidbody2D;

            StartCoroutine("DragObject");
        }

    IEnumerator DragObject()
    {
        var oldDrag = _springJoint.connectedBody.drag;
        var oldAngDrag = _springJoint.connectedBody.angularDrag;

        _springJoint.connectedBody.drag = Drag;
        _springJoint.connectedBody.angularDrag = AngularDrag;

        while (Input.GetMouseButton(0))
        {
            Vector2 newPos = _camera.ScreenToWorldPoint(Input.mousePosition);
            _springJoint.transform.position = new Vector2(newPos.x, newPos.y);
            yield return new WaitForSeconds(0.1f);
        }

        if (_springJoint.connectedBody)
        {
            _springJoint.connectedBody.drag = oldDrag;
            _springJoint.connectedBody.angularDrag = oldAngDrag;
            _springJoint.connectedBody = null;
        }
    }
}
bubuko.com,布布扣 bubuko.com,布布扣 bubuko.com,布布扣 

DragRigidbody2D,布布扣,bubuko.com

DragRigidbody2D

原文:http://www.cnblogs.com/zhaoqingqing/p/3619645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!