unity学习(三)

来源:互联网 发布:银行软件 编辑:程序博客网 时间:2024/06/05 17:56


1. 新建plateForm预制件,添加脚本,加入四种不同的材质球及物理材质,即可使脚下的阶梯实现四种不同效果

using UnityEngine;using System.Collections;using System.Collections.Generic;public class PlateFormMan : MonoBehaviour {    public Material[] mats;    public PhysicMaterial[] phyMats;    public int gameObjectNumber;    public Vector3 startPosition;    Vector3 nextPosition;    public Transform prefab;    Queue<Transform> queue;    public int maxY, minY;    public Vector3 minGap, maxGip;    public Vector3 minSize, maxSize;    public float offset;    void Start()    {        queue = new Queue<Transform>();        for (int i = 0; i < gameObjectNumber;i++ )        {            queue.Enqueue((Transform)GameObject.Instantiate(prefab));        }        nextPosition = startPosition;        for (int i = 0; i < gameObjectNumber;i++ )        {            Recycle();        }    }    private void Recycle()    {        Vector3 position = nextPosition;        Vector3 scale = new Vector3(Random.Range(minSize.x,maxSize.x),1,1);        position.x += scale.x * 0.5f;        position.y += scale.y * 0.5f;        Transform t = queue.Dequeue();        t.localScale = scale;        t.position = position;        int r = Random.Range(0,mats.Length);        t.renderer.material = mats[r];        t.collider.material = phyMats[r];        nextPosition += new Vector3(scale.x+Random.Range(minGap.x,maxGip.x),scale.y+Random.Range(minGap.y,maxGip.y),Random.Range(minGap.z,maxGip.z));        if(nextPosition.y>maxY)        {            nextPosition.y = maxY - Random.Range(minGap.y,maxGip.y);        }        if(nextPosition.y<minY)        {            nextPosition.y = maxY + Random.Range(minGap.y,maxGip.y);        }        queue.Enqueue(t);    }    void Update()    {        if(RunnerScript.distance-queue.Peek().position.x>=offset)        {            Recycle();        }    }}


2. 给runner添加rigidbody(刚体),使用重力,添加脚本,将各项参数设置好之后就实现了runner在阶梯上行进,跳跃的效果

using UnityEngine;using System.Collections;public class RunnerScript : MonoBehaviour {    public static float distance;    public Vector3 jumpVelocity;    bool isOnPlateForm=false;    void Update()    {        transform.Translate(5f * Time.deltaTime, 0, 0);        distance = transform.position.x;        if(Input.GetButtonDown("Jump"))        {           if(isOnPlateForm)           {               rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);           }        }            }    void OnCollisionEnter()    {        isOnPlateForm = true;    }    void OnCollisionExit()    {        isOnPlateForm = false;    }}




0 0
原创粉丝点击