【Unity】实现“挤开”效果(不使用自带物理引擎)【改】

今天发现被撞击的小球移动有些生硬,所以改了一下被撞击之后小球的移动方式。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    //需要“挤开”的物体数组
    public GameObject[] targets;
    //需要“挤开”的物体的边界框
    Bounds[] targetBound;
    //自身的边界框
    Bounds bound;

    //虚拟一个平面用来判断目标位于自身的左边或右边
    Plane plane;
    //自身与目标物体的半径和
    Vector2[] dis;

    //鼠标点击的点
    Vector2 clickPoint = Vector2.zero;
    //是否移动
    bool isMove;
    //小球散开时移动速度
    public float speed;

    void Start()
    {
        //初始化
        isMove = false;
        targetBound = new Bounds[targets.Length];
        dis = new Vector2[targets.Length];

        bound= this.GetComponent<Renderer>().bounds;

        for (int i = 0; i < targets.Length; i++)
        {
            targetBound[i] = targets[i].GetComponent<Renderer>().bounds;

            dis[i] = bound.extents + targetBound[i].extents;
        }

        //print("边界盒的中心" + bound.center);
        //print("边界框的实际范围。这个总是size的一半。" + bound.extents);
        //print("边界盒的最大点,这个总是等于center + extents。" + bound.max);
        //print("边界盒的最小点,这个总是等于center-extents。" + bound.min);
        //print("边界盒的总大小。这个总是extents的两倍大。" + bound.size);

    }


    void Update()
    {
        for (int i = 0; i < targets.Length; i++)
        {
            if (Vector2.Distance(this.transform.position, targets[i].transform.position) < dis[i].x)
            {
                Vector3 vector = targets[i].transform.position - this.transform.position;
                Vector3 dir = vector.normalized;
                targets[i].transform.Translate(dir * Time.deltaTime * speed);
            }
        }

        if (Input.GetMouseButtonDown(0))
        {
            isMove = true;
            clickPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        }

        CricleMove();
    }


    /// <summary>
    /// 主角移动
    /// </summary>
    void CricleMove()
    {
        if (isMove)
        {
            this.transform.position = Vector2.MoveTowards(this.transform.position, clickPoint, Time.deltaTime * 2);

            if (Vector2.Distance(this.transform.position, clickPoint) < 0.1f)
            {
                isMove = false;
            }
        }
    }
}

修改之后的撞击效果,如图:
这里写图片描述

到这就OK了!

猜你喜欢

转载自blog.csdn.net/fcgdzh2008/article/details/77159415