UNITY3D学习笔记12




using UnityEngine;
using System.Collections;

public class Script_Enemy : MonoBehaviour {

	public const int STATE_STAND = 0;
	public const int STATE_WALK = 1;
	public const int STATE_RUN = 2;
	public const int STATE_PAUSE = 3;

	private int enemyState;
	private GameObject hero;

	private float backUptime;
	public const int AI_THINK_TIME = 2;
	public const int AI_ATTACK_DISTANCE = 10;

	bool showBlood = false;
	public Texture2D tex_red;
	public Texture2D tex_black;

	public Texture2D tex_hp;
	private int HP = 100;
	private bool ishatred = false;

	Object[] texmube;

	// Use this for initialization
	void Start () {
		hero = GameObject.Find("/Hero");
		texmube = Resources.LoadAll("number");
		enemyState = STATE_STAND;
	}

	void OnGUI(){
		if(showBlood){
			GUI.DrawTexture(new Rect(5,0,tex_hp.width,tex_hp.height),tex_hp);

			Tools.DrawImageNumber(200,0,HP,texmube);

			int blood_width = tex_red.width * HP/100;
			GUI.DrawTexture(new Rect(5,50,tex_black.width,tex_black.height),tex_black);
			GUI.DrawTexture(new Rect(5,50,blood_width,tex_red.height),tex_red);
		}
	}
	
	// Update is called once per frame
	void Update () {
		if(Vector3.Distance(transform.position,hero.transform.position)< AI_ATTACK_DISTANCE || ishatred){
			gameObject.animation.Play("run");
			enemyState = STATE_RUN;
			transform.LookAt(hero.transform);
			int rand = Random.Range(0,20);
			if(rand == 0){
				hero.SendMessage("HeroHurt");
			}
		}else{
			if(Time.time - backUptime >= AI_THINK_TIME){
				backUptime = Time.time;

				int rand = Random.Range(0,2);

				if(rand == 0){
					gameObject.animation.Play("idle");
					enemyState = STATE_STAND;
				}else if(rand == 1){
					Quaternion rotate = Quaternion.Euler(0,Random.Range(1,5)*90,0);
					transform.rotation = Quaternion.Slerp(transform.rotation,rotate,Time.deltaTime * 1000);
					gameObject.animation.Play("walk");
					enemyState = STATE_WALK;
				}
			}
		}

		switch(enemyState){
		case STATE_STAND:

			break;
		case STATE_WALK:
			transform.Translate(Vector3.forward*Time.deltaTime);
			break;
		case STATE_RUN:
			if(Vector3.Distance(transform.position,hero.transform.position)>3){
				transform.Translate(Vector3.forward * Time.deltaTime * 3);
			}
			break;
		} 
	}

	void OnMouseDown(){
		if(HP > 0){
			HP -= 5;
			transform.Translate(Vector3.back * 0.1f);
			ishatred = true;
		}else{
			Destroy(gameObject);
			hero.SendMessage("EnemyHurt");
		}
	}
	void OnMouseUp(){
		transform.Translate(Vector3.forward * 0.1f);
	}

	void OnMouseOver(){
		showBlood = true;
	}

	void OnMouseExit(){
		showBlood = false;
	}
}



using UnityEngine;
using System.Collections;

public class Tools : MonoBehaviour {


	public static void DrawImageNumber(int x,int y,int mumber,Object[] texmube){
		char[] chars = mumber.ToString().ToCharArray();

		Texture2D tex = (Texture2D)texmube[0];
		int width = tex.width;
		int height = tex.height;

		foreach(char s in chars){
			int i = int.Parse(s.ToString());
			GUI.DrawTexture(new Rect(x,y,width,height),(Texture2D)texmube[i]);
			x+=width;
		}
	}

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}



using UnityEngine;
using System.Collections;

public class Script_Game : MonoBehaviour {

	public const int STATE_GAME = 0;
	public const int STATE_WIN = 1;
	public const int STATE_LOSE =2;

	public enum RotationAxes {MosueXAndY = 0,MouseX=1,MouseY = 2}
	public RotationAxes axes = RotationAxes.MosueXAndY;

	float rotationY = 0f;

	public Texture2D tex_fire;
	public Texture2D tex_red;
	public Texture2D tex_black;

	public Texture2D tex_hp;
	public Texture2D tex_win;
	public Texture2D tex_lose;

	public AudioSource music;

	public int HP = 100;

	Object[] texmube;

	int gameState;

	// Use this for initialization
	void Start () {
		Screen.showCursor = false;
		texmube = Resources.LoadAll("number");
		gameState  = STATE_GAME;
		
		if(rigidbody){
			rigidbody.freezeRotation = true;
		}
	}
	
	// Update is called once per frame
	void Update () {
		switch(gameState){
		case STATE_GAME:
			UpdateGame();
			break;
		case STATE_WIN:
		case STATE_LOSE:
			if(Input.GetKey(KeyCode.Escape)){
				Application.LoadLevel("Scene_Menu");
			}
			break;
		}
	}

	void OnGUI(){
		switch(gameState){
		case STATE_GAME:
			RenderGame();
			break;
		case STATE_WIN:
			GUI.DrawTexture(new Rect(0,0,tex_win.width,tex_win.height),tex_win);
			break;
		case STATE_LOSE:
			GUI.DrawTexture(new Rect(0,0,tex_lose.width,tex_lose.height),tex_lose);
			break;
		}
	}

	void UpdateGame(){
		if(Input.GetKey(KeyCode.Escape)){
			Application.LoadLevel("Scene_Menu");
		}

		if(axes == RotationAxes.MouseX){
			transform.Rotate(0,Input.GetAxis("Mouse X"),0);
		}else{
			transform.localEulerAngles = new Vector3(-rotationY,transform.localEulerAngles.y,0);
		}
	}

	void RenderGame(){
		if(tex_fire){
			float x = Input.mousePosition.x - (tex_fire.width>>1);
			float y = Input.mousePosition.y - (tex_fire.height>>1);
			GUI.DrawTexture(new Rect(x,Screen.height - y,tex_fire.width,tex_fire.height),tex_fire);
		}

		int blood_width = tex_red.width * HP / 100;
		GUI.DrawTexture(new Rect(5,Screen.height - 50,tex_black.width,tex_black.height),tex_black);
		GUI.DrawTexture(new Rect(5,Screen.height - 50,blood_width,tex_red.height),tex_red);
		GUI.DrawTexture(new Rect(5,Screen.height - 80,tex_hp.width,tex_hp.height),tex_hp);
		Tools.DrawImageNumber(200,Screen.height - 80,HP,texmube);

	}

	void HeroHurt(){
		HP--;
		if(HP<=0){
			HP = 0;
			gameState = STATE_LOSE;
		}
	}

	void HeroAddBlood(){
		HP+=50;
		if(HP>=100){
			HP = 100;
		}
	}

	void EnemyHurt(){
		GameObject[] enemy = GameObject.FindGameObjectsWithTag("enemy");
		if(enemy.Length == 1){
			gameState = STATE_WIN;
		}
	}

	void OnControllerColliderHit(ControllerColliderHit hit){
		GameObject collObj = hit.gameObject;
		if(collObj.name =="Cube"){
			HeroAddBlood();
			Destroy(collObj);
		}
	}
}



using UnityEngine;
using System.Collections;

[AddComponentMenu("Camera-Control/Mouse Lock")]
public class MouseLook : MonoBehaviour {

	public enum RotationAxes {MouseXAndY = 0,MouseX = 1,MouseY = 2}
	public RotationAxes axes = RotationAxes.MouseXAndY;
	float rotationY = 0f;

	public Texture2D tex_fire;

	// Use this for initialization
	void Start () {
		Screen.showCursor = false;

		if(rigidbody){
			rigidbody.freezeRotation = true;
		}
	}
	
	// Update is called once per frame
	void Update () {
		if(axes == RotationAxes.MouseX){
			transform.Rotate(0,Input.GetAxis("Mouse X"),0);
		}else{
			transform.localEulerAngles =new Vector3(-rotationY,transform.localEulerAngles.y,0);
		}
	}

	void OnGUI(){
		if(tex_fire){
			float x = Input.mousePosition.x -(tex_fire.width>>1);
			float y = Input.mousePosition.y +(tex_fire.height>>1);

			GUI.DrawTexture(new Rect(x,Screen.height - y,tex_fire.width,tex_fire.height),tex_fire);
		}
	}
}



using UnityEngine;
using System.Collections;

public class Script : MonoBehaviour {

	public const int STATE_0 = 0;
	public const int STATE_1 = 1;
	public const int STATE_2 = 2;
	public const int STATE_3 = 3;
	public const int STATE_4 = 4;

	private int gameState;
	// Use this for initialization
	void Start () {
		gameState = STATE_0;
	}
	
	// Update is called once per frame
	void Update () {
		switch(gameState){
		case STATE_0:

			break;
		case STATE_1:
			
			break;
		case STATE_2:
			
			break;
		case STATE_3:
			
			break;
		case STATE_4:
			
			break;
		}
	}

	void OnGUI(){
		switch(gameState){
		case STATE_0:
			
			break;
		case STATE_1:
			
			break;
		case STATE_2:
			
			break;
		case STATE_3:
			
			break;
		case STATE_4:
			
			break;
		}
	}
}



using UnityEngine;
using System.Collections;

public class Test5 : MonoBehaviour {

	public const int STATE_STAND = 0;
	public const int STATE_WALK = 1;
	public const int STATE_RUN = 2;

	private int enemyState;

	private GameObject hero;

	private float backUptime;

	public const int AI_THINK_TIME = 2;

	public const int AI_ATTACK_DISTANCE = 10;


	// Use this for initialization
	void Start () {
		hero = GameObject.Find("/Hero");

		enemyState = STATE_STAND;
	}
	
	// Update is called once per frame
	void Update () {
	
		if(Vector3.Distance(transform.position,hero.transform.position)<AI_ATTACK_DISTANCE){
			gameObject.animation.Play("run");
			enemyState = STATE_RUN;
			transform.LookAt(hero.transform);
		}else{
			if(Time.time - backUptime >= AI_THINK_TIME){
				backUptime = Time.time;
				int rand = Random.Range(0,2);

				if(rand == 0){
					gameObject.animation.Play ("idle");
					enemyState = STATE_STAND;
				}else if(rand ==1){
					Quaternion rotate = Quaternion.Euler(0,Random.Range(1,5)*90,0);
					transform.rotation = Quaternion.Slerp(transform.rotation,rotate,Time.deltaTime*1000);
					gameObject.animation.Play ("walk");
					enemyState = STATE_WALK;
				}
			}
		}

		switch(enemyState){
		case STATE_STAND:

			break;
		case STATE_WALK:
			transform.Translate(Vector3.forward*Time.deltaTime);
			break;
		case STATE_RUN:
			if(Vector3.Distance(transform.position,hero.transform.position)>3){
				transform.Translate(Vector3.forward*Time.deltaTime * 3);
			}
			break;
		}
	}
}



using UnityEngine;
using System.Collections;

public class Test4 : MonoBehaviour {

	bool showBlood = false;
	public Texture2D tex_red;
	public Texture2D tex_black;

	private int HP = 100;
	private GameObject hero;



	// Use this for initialization
	void Start () {
		hero = GameObject.Find("/Hero");
	}
	
	// Update is called once per frame
	void Update () {
		transform.LookAt(hero.transform);
	}

	void OnGUI(){
		if(showBlood){
			int blood_width = tex_red.width * HP/100;
			GUI.DrawTexture(new Rect(5,5,tex_black.width,tex_black.height),tex_black);
			GUI.DrawTexture(new Rect(5,5,blood_width,tex_red.height),tex_red);
		}
	}

	void OnMouseDown(){
		if(HP >0){
			HP -= 5;
			transform.Translate(Vector3.back * 0.1f);
		}else{
			Destroy(gameObject);
		}
	}

	void OnMouseUp(){
		transform.Translate(Vector3.forward*0.1f);
	}

	void OnMouseOver(){
		showBlood = true;
	}

	void OnMouseExit(){
		showBlood = false;
	}
}



using UnityEngine;
using System.Collections;

public class Test3 : MonoBehaviour {

	Object[] texmube;

	int mumber = 1980;

	// Use this for initialization
	void Start () {
		texmube = Resources.LoadAll("Textures");
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnGUI(){
		DrawImageNumber(0,100,mumber,texmube);
	}

	void DrawImageNumber(int x,int y,int number,Object[] texmube){
		char[] chars = mumber.ToString().ToCharArray();

		Texture2D tex = (Texture2D)texmube[0];
		int width = tex.width;
		int height = tex.height;

		foreach(char s in chars){
			int i = int.Parse(s.ToString());
			GUI.DrawTexture(new Rect(x,0,width,height),(Texture2D)texmube[i]);
			x+=width;
		}
	}
}



using UnityEngine;
using System.Collections;

public class Test2 : MonoBehaviour {

	public Texture2D blood_red;
	public Texture2D blood_black;

	private int HP = 100;

	// Use this for initialization
	void Start () { }
	
	// Update is called once per frame
	void Update () { }

	void OnGUI(){
		if(GUILayout.RepeatButton("add HP")){
			if(HP<100){
				HP++;
			}
		}
		if(GUILayout.RepeatButton("div HP")){
			if(HP>0){
				HP--;
			}
		}

		int blood_width = blood_red.width * HP/100;

		GUI.DrawTexture(new Rect(100,100,blood_black.width,blood_black.height),blood_black);
		GUI.DrawTexture(new Rect(100,100,blood_width,blood_red.height),blood_red);
	}
}



using UnityEngine;
using System.Collections;

public class Test1 : MonoBehaviour 
{ //Script_10_01

	public const int STATE_MAINMENU = 0;
	public const int STATE_STARTGAME = 1;
	public const int STATE_OPTION = 2;
	public const int STATE_HELP = 3;
	public const int STATE_EXIT = 4;

	public GUISkin mySkin;

	public Texture textureBG;
	public Texture tex_startInfo;
	public Texture tex_helpInfo;

	public AudioSource music;
	private int gameState;

	// Use this for initialization
	void Start () {
		gameState = STATE_MAINMENU;
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnGUI(){
		switch(gameState){
		case STATE_MAINMENU:
			RenderMainMenu();
			break;
		case STATE_STARTGAME:
			RenderStart();
			break;
		case STATE_OPTION:
			RenderOption();
			break;
		case STATE_HELP:
			RenderHelp();
			break;
		case STATE_EXIT:
			Application.Quit();
			break;
		}
	}

	void RenderMainMenu(){
		GUI.skin = mySkin;

		GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),textureBG);

		if(GUI.Button(new Rect(0,30,623,153),"","start")){
			gameState = STATE_STARTGAME;
		}

		if(GUI.Button(new Rect(0,180,623,153),"","option")){
			gameState = STATE_OPTION;
		}

		if(GUI.Button(new Rect(0,320,623,153),"","help")){
			gameState = STATE_HELP;
		}

		if(GUI.Button(new Rect(0,470,623,153),"","exit")){
			Application.Quit();
		}

	}

	void RenderStart(){
		GUI.skin = mySkin;
		GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),tex_startInfo);
		if(GUI.Button(new Rect(0,500,403,78),"","back")){
			gameState = STATE_MAINMENU;
		}
	}

	void RenderHelp(){
		GUI.skin = mySkin;
		GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),tex_helpInfo);
		if(GUI.Button(new Rect(0,500,403,78),"","back")){
			gameState = STATE_MAINMENU;
		}
	}

	void RenderOption(){
		GUI.skin = mySkin;
		GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),textureBG);

		if(GUI.Button(new Rect(0,0,403,75),"","music_on")){
			if(!music.isPlaying){
				music.Play();
			}
		}

		if(GUI.Button(new Rect(0,200,403,75),"","music_off")){
			music.Stop();
		}

		if(GUI.Button(new Rect(0,500,403,78),"","back")){
			gameState = STATE_MAINMENU;
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值