您的位置:首页 > 移动开发 > Unity3D

unity学习(三)

2016-01-21 01:37 453 查看



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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: