示例#1
0
        public void MovePlayer(Vector2 dir)
        {
            if (dir != Vector2.zero)
            {
                Dir = dir;
            }
            var childAngle = childStartAngle;

            childAngle            += dir.x * inclineAngleScale * inclineAngleX;
            childAngle            += dir.y * inclineAngleScale * inclineAngleY;
            child.localEulerAngles = childAngle;

            var forwerdRay = new Ray(transform.position - transform.forward, transform.forward);

            if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask))
            {
                var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);
                Normal = forwardPoints.Normal;

                var upFV    = Vector3.ProjectOnPlane(cameraTransform.up, forwardPoints.Normal).normalized;
                var rightFV = Vector3.ProjectOnPlane(cameraTransform.right, forwardPoints.Normal).normalized;


                Debug.DrawLine(transform.position, transform.position + rightFV, Color.black);
                Debug.DrawLine(transform.position, transform.position + upFV, Color.black);
                Debug.DrawLine(forwerdHit.point, forwerdHit.point + forwardPoints.Normal, Color.red);

                var projectDir = (upFV * dir.y + rightFV * dir.x).normalized;
                var move       = projectDir * (speed * Time.timeScale);

                rigid.AddForce(moveForceMultiplier * (move - rigid.velocity), ForceMode.Force);

                rigid.AddForce((forwerdHit.point - transform.position).magnitude * -forwardPoints.Normal * gravity, ForceMode.Acceleration);
            }
        }
示例#2
0
        void LookAtPlayer()
        {
            Ray forwerdRay = new Ray(transform.position - transform.forward, transform.forward);

            if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask))
            {
                var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);

                transform.LookAt(transform.position - forwardPoints.Normal, forwardPoints.Up.normalized);
            }
        }
示例#3
0
    private void Update()
    {
        explosionFrame++;
        if (isExplosion)
        {
            if (explosionFrame > 4)
            {
                transform.GetChild(0).gameObject.SetActive(false);
            }
            if (explosionFrame > 30)
            {
                Destroy(gameObject);
            }
        }
        else
        {
            if (explosionFrame > 60)
            {
                isExplosion    = true;
                explosionFrame = 0;

                GetComponent <ParticleSystem>().Play();
                GetComponent <SphereCollider>().radius += bombRadius;
                transform.GetChild(0).localScale       += Vector3.one / 4;

                AudioManager.Instance.Play(se);
            }

            var forwerdRay = new Ray(transform.position - transform.forward, transform.forward);
            if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask))
            {
                var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);
                transform.localPosition +=
                    (dir.x * forwardPoints.Right.normalized +
                     dir.y * forwardPoints.Up.normalized)
                    * speed;
            }
        }
    }
示例#4
0
    static void SetBlock()
    {
        Undo.RecordObjects(Selection.gameObjects.Select(o => o.transform).ToArray(), "set");
        var mask = LayerMask.GetMask(new string[] { "Mebiusu" });


        foreach (var gameObject in Selection.gameObjects)
        {
            var transform = gameObject.transform;

            var forwerdRay = new Ray(transform.position - transform.forward, transform.forward);

            if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask))
            {
                var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);


                Vector3 upFV = forwardPoints.Up.normalized;


                transform.LookAt(transform.position - forwardPoints.Normal, upFV);
            }


            forwerdRay = new Ray(transform.position - transform.forward, transform.forward);



            if (Physics.Raycast(forwerdRay, out forwerdHit, Mathf.Infinity, mask))
            {
                var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);



                transform.localPosition = forwerdHit.point + forwardPoints.Normal * length;
            }
        }
    }
示例#5
0
    void Set(Vector3 prev, Vector3 current)
    {
        Ray forwerdRay = new Ray(transform.position - transform.forward, transform.forward);


        Debug.DrawRay(forwerdRay.origin, forwerdRay.direction * 10);

        if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask))
        {
            var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);


            var sa = current - prev;

            transform.localPosition += forwardPoints.Right.normalized * sa.x +
                                       forwardPoints.Up.normalized * sa.y +
                                       forwardPoints.Normal * sa.z;
        }

        forwerdRay = new Ray(transform.position - transform.forward, transform.forward);

        if (Physics.Raycast(forwerdRay, out forwerdHit, Mathf.Infinity, mask))
        {
            var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);


            Vector3 upFV = forwardPoints.Up.normalized;

            Quaternion OriginalRot = transform.rotation;

            transform.LookAt(transform.position - forwardPoints.Normal, upFV);
            Quaternion NewRot = transform.rotation;

            transform.rotation = Quaternion.Slerp(OriginalRot, NewRot, smoothSpeed);
        }
    }
示例#6
0
    public void MoveBlock(Vector2 dir)
    {
        var forwerdRay = new Ray(transform.position - transform.forward, transform.forward);

        if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask))
        {
            var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right);

            var upFV    = forwardPoints.Up.normalized;
            var rightFV = forwardPoints.Right.normalized;

            Debug.DrawLine(transform.position, transform.position + rightFV, Color.black);
            Debug.DrawLine(transform.position, transform.position + upFV, Color.black);

            var move = upFV * dir.y + rightFV * dir.x;

            GetComponent <Rigidbody>().AddForce(-forwardPoints.Normal * 5, ForceMode.Acceleration);

            if (dir != Vector2.zero)
            {
                GetComponent <Rigidbody>().AddForce(move, ForceMode.VelocityChange);
            }
        }
    }