明会长 发表于 2018-1-9 22:21:53

使用unity自制“跳一跳”

主要代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class TabJump : MonoBehaviour {


    public GameObject cubes;//方块预制体

    public float Force = 500;//力度

    public float DropForce;//按压力

    private Rigidbody rigidbody;//刚体组件

    private Animation animation;//动画组件

    private int score;

    public Text scoretxt;

    public AudioClip jump;
    public AudioClip down;

    private AudioSource ad;


    //private Camera can;

    void Start()
    {
      rigidbody = GetComponent<Rigidbody>();
      animation = GetComponent<Animation>();
      ad=GetComponent<AudioSource>();
      //can = GameObject.Find("Main Camera").gameObject.GetComponent<Camera>();
      scoretxt.text = score.ToString();
    }

   
    public float _x = -0.5f;

    private Vector3 nextPos;//下一个生成物体的位置
    private void Update()
    {
      Jump(nextPos);      
    }
    //void OnCollisionEnter(Collision collision)
    void OnCollisionEnter(Collision col)
    {
       if(col.transform.tag=="plane")//如果碰到了plane,重新加载场景
       {
         SceneManager.LoadScene("001");
       }

      if(col.transform.tag=="box")//如果碰到了一个标签为box的并且可以克隆
      {
            creatbox(col.transform.position);//克隆一个方块
            ad.PlayOneShot(down);
            nextPos = col.transform.position+pos;//将碰到的物体的位置赋值给nextPos
            if (canaddscore)
            {
                score += 1;
            }
            scoretxt.text = score.ToString();
      }      
    }
   
    void UpdateCamera()//跳完相机移动
    {
      Camera.main.transform.localPosition =new Vector3(0, 0, 2f);
    }
    Vector3 pos = new Vector3(0, 0, 2);//Z轴偏移量为2

    GameObject newcube;//声明一个游戏物体变量
    private bool CanCopy=false;//是否可以克隆
    bool canaddscore;
    void Jump(Vector3 pos)
    {

      Vector3 Dir = (pos - transform.position).normalized;//跳的方向(向量的减法运算)
      
      if (Input.GetMouseButton(0))//鼠标按下
      {
            animation.Play("reset");
            DropForce += 0.05f;//按压力+=0.05
            if (DropForce >= 7.0f)//如果大于等于5
            {
                DropForce = 7.0f;//就等于5
            }

            if(DropForce>=2.0f)
            {
                canaddscore = true;
            }
      }

      if (Input.GetMouseButtonUp(0))//鼠标抬起
      {
            CanCopy=true;//将能否克隆开关改为true
            ad.PlayOneShot(jump);
            rigidbody.AddForce(Vector3.up* Force * DropForce/2);//添加一个向上的力
            rigidbody.AddForce(Dir * Force * DropForce/2);//添加一个向下一个物体跳向的力
            animation.Play("jump");//播放翻转动画
            DropForce = 0;//按压力重置为0
      }
    }

    /// <summary>
    /// 克隆一个方块
    /// </summary>
    /// <param name="trans">位置</param>
    void creatbox(Vector3 trans)
    {
      newcube = Instantiate(cubes, trans + pos, Quaternion.identity) as GameObject;
      newcube.name = "box";
    }
}

将此代码挂载到玩家身上即可。注意要设置一些东西。如物体的标签,玩家的刚体等,相信unity开发者应该很熟悉了。我已经将工程打包成了unity插件包:如果看不懂的额可以下载来看看哦



x3269199 发表于 2018-1-9 22:47:55

{:10_256:}{:10_256:}

wok 发表于 2018-1-11 02:03:22

看不懂
页: [1]
查看完整版本: 使用unity自制“跳一跳”