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

Unity常用API

2014-07-26 15:34 423 查看
一、播放动画的方法

1.1 直接用Unity的编辑器编辑动画,但有个缺点就是不适合动画太多的精灵,不够灵活,不好控制

1.2 使用代码控制,这样比较灵活,但要书写比较多的代码

代码如下:

void update()

{

timer+=Time.deltaTime;
int frameIndex = (int)(timer/(1f/explosionAnimationFrame)); //explosionAnimationFrame设置的是动画速度,一般为10,数值越大,动画越快
if(frameIndex>=explosionSprites.Length){
Destroy(gameObject); //如果不需要循环播放就消除对象
}
else render.sprite=explosionSprites[frameIndex]; //frameIndex表示哪一张图片,如果要循环播放的那种只需要在前面加frameIndex=frameIndex%length

//explosionSprites 一个是sprits类型的数组

}

二、获取游戏对象或者游戏的组件的方法

GetComponent<SpriteRenderer> () 这个就是获取对象的精灵组件,通过这个组件可以切换精灵的图片

guiText = GameObject.FindGameObjectWithTag ("scoreGui").guiText; //获取Tag为scoreGui的物体

GameObject.Find("pickupManager").GetComponent<PickupSpawner>(); //获取名字为pickupManager的游戏物体

transform.root.GetComponent<Animator>(); //获取父亲组件

Camera.main.GetComponent<EnvGenerator> ();//获取摄像机的组件

三、给精灵加一个速度

3.1 transform.Translate (Vector3.down*speed*Time.deltaTime); //Vector3.down表示向下的速度,speed是速度,Time。deltaTime表示每秒,不乘的话按没帧移动,速度会比较快

3.2 this.rigidbody.velocity = new Vector3(vel.x,5,vel.z); //加入了rigibdody的精灵可以使用这个方法

3.3 使用Character Controller组件

controller = GetComponent<CharacterController> ();

float distance = Vector3.Distance (tmp, transform.position);

  if(distance >= 0.1f)

  {

   state = PlayerState.Moving;

   controller.SimpleMove(transform.forward * speed); //forward是Y轴

  }

3.4 Vector3 moveDir = targetPos - transform.position; //移动的方向

   transform.position += moveDir.normalized * moveSpeed * Time.deltaTime;

3.5 使用插值(以移动X轴为例子)

float moveLength = Mathf.Lerp(0,moveHorizontal,moveHorizontalSpeed * Time.deltaTime);

   transform.position = new Vector3(transform.position.x + moveLength, transform.position.y, transform.position.z);

   moveHorizontal-=moveLength;

   if(Mathf.Abs(moveHorizontal)<0.5f) //距离少于0.5的直接移动

   {

    transform.position = new Vector3(transform.position.x + moveHorizontal, transform.position.y, transform.position.z);

    moveHorizontal = 0;

    nowLaneIndex = targetLaneIndex;

   }

四、触发件事

void OnTriggerEnter2D(Collider2D other) // 刚体的进入触发时间,与此同时还有OnTriggerExit2D(退出)OnTriggerStay2D(停留)

void OnCollisionEnter2D(Collision2D other) //添加了rigidbody2D的物体触发的事件,同理也有上面的那个Exit,Stay两个触发事件

void Update()

void FixUpdate() //添加了rigibody2D的物体

void Awake()

五、获取鼠标单击命令或者键盘响应

GetMouseButton(0) 响应鼠标左键按着

GetMouseButtonDown(0) 鼠标按下的一瞬间

GetMouseButtonUp(0) 鼠标放开的一瞬间

float h = Input.GetAxis("Horizontal"); 获取左右方向键,-1为左,1为右

六、播放声音

6.1 直接添加声音组件,然后给组件添加上声音

6.2 代码如下

public AudioClip boom;(把音乐文件拖放到这个对象上面)

AudioSource.PlayClipAtPoint(boom, transform.position);

6.3 添加自带的PlaySound

七、其他

7.1other.gameObject.SendMessage("BeHit"); 触发对象脚本中的BeHit函数

7.2重复执行某个方法

InvokeRepeating ("fire",1,rate);//1秒后开始调用fire方法,以后每隔rate秒调用一次

CancelInvoke ("fire"); 取消被InvokeRepeating调用的方法

7.3生成一个物体的方法:

GameObject.Instantiate (enemy,position,Quaternion.identity); //生成一个物体,enemy是要生成的对象,position是位置,Quaternion.identity是保持角度不变

Instantiate(bomb, transform.position, transform.rotation);

// Create a quaternion with a random rotation in the z-axis.

  Quaternion randomRotation = Quaternion.Euler(0f, 0f, Random.Range(0f, 360f));

  // Instantiate the explosion where the rocket is with the random rotation.

  Instantiate(explosion, transform.position, randomRotation);

 如果要赋值得话需要在这样 Rigidbody2D bombInstantiate = Instantiate (bomb,transform.position,Quaternion.identity) as Rigidbody;

7.4//对本地数据的存取

highScore=PlayerPrefs.GetFloat ("score",0); 取数据

PlayerPrefs.SetFloat ("score",highScore);存数据

7.5 加载场景

pplication.LoadLevel(0);//从第0个场景开始,这里只有一个场景,使用前需要在File->Build Setting->Add Current


单例模式

public static GameManager _instance;

void Awake()
{
_instance = this;
}

在其他地方直接使用GameManager._instance然后就可以调用共有的函数和成员
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: