unity开发经验(不定期更新)

希望我的开发日志记录的经验越来越多,给以后得自己留个记录和参考,同时也能为广大的同样是想做unity独立开发者的朋友一些经验和参考,互相学习,互相进步!如果想合作的可以加我微信:wqm994,一起探讨unity引擎,在独立开发的道路上齐头并进!!

废话不多说,开始正题:

如何实现点击按钮弹出菜单栏?

实现方法:

再建一个Canvas,在这个Canvas上加入所有你想加的东西

然后加代码:

public Canvas canvas;

void Start()

{

canvas.enabled=false;

}

public void Click()

{

canvas.enabled=true;

}

将这个代码加到任意游戏物体上,然后就和普通的创建按钮点击事件操作一样了。

注意:回到unity后把Canvas关联上。

unity5.6版本的video组件,在通过代码控制它的时候,必须引用命名空间,即必须进行程序集引用:

using UnityEngine .Video ;(这是必须的)

控制视频的播放与暂停

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine .Video ;

public class bofang : MonoBehaviour {

public VideoPlayer vp;

// Use this for initialization

void Start () {

vp.Stop ();

}

// Update is called once per frame

void OnMouseDown () {

vp.Play ();

}

}

如何实例化发射炮弹?(变种:如何发射类似于英雄联盟中极地大乱斗中的雪球?)

public Rigidbody paodan;

public float speed=20f;

void Update()

{

if(Input.GetButtonDown(KeyCode.F)){

Rigidbody newpandan=Instantiate(pandan,transform.position,transform.rotation) as Rigidbody;

newpandan.velocity=transform.TransformDirection(new Vector3(0,0,speed));

}

}

如何每隔一段时间克隆一个呢?

public GameObject monster;//要克隆的游戏物体(必须要制作成预制)

public float jdtime = 5.0f;//每隔5秒克隆一个

private float nextgs = 0.0f;//游戏时长

void Start () {

}

void Update () {

if(Time .time >nextgs )//判断实际游戏时长是否大于游戏时长

{

nextgs = Time.time + jdtime;

GameObject newgs=Instantiate(monster,transform.position,transform.rotation) as GameObject ;

}

}

}

改变鼠标样式:

public Textrue2D mousetextrue;

void OnMouseOver()

{

Cursor.SetCursor(mousetextrue,Vector2.zero,CursorMode.Auto);

}

void OnMouseExit()

{

Cursor.SetCursor(null,Vector2.zero,CursorMode.Auto);

}

在脚本组件小齿轮图标下自定义菜单项:

[ContextMenu("XXXX")] //XXXX为菜单名字

void XXXX(){

}

如何制作光线投射,即发射射线来检测是否碰撞到物体?

void Update(){

RaycastHit hit;设置一个RaycastHit类型的变量。

if (Physics.Raycast(transform.position,transform.forword,hit,3)){//transform.position表示从此脚本所依附的游戏物体的位置发射射线;transform.forword表示射线的朝向和所依附的游戏物体一致

这里面即可写一些做什么事的代码

}

}

在当前物体的位置绘制图像等元素的函数:

void OnDrawGizmos()

{

XXXXXX

}

如何建立路点?在场景中摆好各个路点,并把“parent”和“Next”设置好。然后为每个路点(空物体)添加以下脚本:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class PathNode : MonoBehaviour {

public PathNode m_parent;//路点

public PathNode m_next;

public void SetNext(PathNode node){

if (m_next != null) {

m_next.m_parent = null;

}

m_next = node;

node.m_parent = this;

}

void OnDrawGizmos(){

Gizmos .DrawIcon (this .transform .position ,"timg.jpg");

}

}

如何让人物或者你需要的游戏物体沿着你架设的路点移动?

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Enemy : MonoBehaviour {

public PathNode m_currentNode;

public float E_life = 15.0f;

public float max_life = 15.0f;

public float speed = 12.0f;

//public Enemy inst;

//void Start () {

//inst = this;

//}

void Update () {

RotateTo ();

MoveTo ();

}

public void RotateTo()

{

float current = transform.eulerAngles.y;

this.transform.LookAt (m_currentNode.transform);

Vector3 target = this.transform.eulerAngles;

float next = Mathf.MoveTowardsAngle (current, target.y, 120 * Time.deltaTime);

this.transform.eulerAngles = new Vector3 (0, next, 0);

}

public void MoveTo()

{

Vector3 pos1 = transform.position;

Vector3 pos2 = m_currentNode.transform.position;

float dist = Vector2.Distance (new Vector2 (pos1.x, pos1.z), new Vector2 (pos2.x, pos2.z));

if (dist < 1.0f) {

if (m_currentNode.m_next == null) {

Destroy (this.gameObject);

}else {m_currentNode = m_currentNode.m_next;}

}

transform.Translate (new Vector3 (0, 0 ,speed * Time.deltaTime));

}

}

如果好几个物体都需要用同一个代码,则可以使用下面的技巧(如,控制玩家的代码,但由于分敌我情况,但脚本都是一样的)

那么则可以这样做:

[Range(1, 2)]

这里则申请一个int型的变量,如

public int playernum=1;//初始时是玩家1

这样则可以在检视面板出现一个滑块,滑块的数字的多少由上面的中括号里的数字来定。

(注:[Range(1, 2)]只能用来控制它下面的一个变量,所以我们要把需要控制的变量写到下面,并且保证变量类型和上面的一致)

接着就可以在代码里面这样来做:

if(playernum==1)

{

//任何你想做的事

}

if(playernum==2)

{

//任何你想做的事

}

....

如何在安卓设备中播放视频:

using UnityEngine;

using System.Collections;

public class Test : MonoBehaviour {

//以下都为全屏播放

//必须将视频转换成MP4格式并且放到Assets/StreamingAssets文件夹下

public GUIStyle buttontype;

public Texture buttonzhanshi;

void OnGUI()

{

//if (GUI.Button(new Rect(40, 600, 68, 76), "播放"))//触屏后会取消播放

//{

// Handheld.PlayFullScreenMovie("GS.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);

//}

//if (GUI.Button(new Rect(20, 290, 200, 200), "全屏播放"))

//{

// Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.Full);

//}

//if (GUI.Button(new Rect(20, 500, 200, 200), "隐藏按钮控制器"))//隐藏控制器

//{

// Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.Hidden);

//}

if (GUI.Button(new Rect(30, 600, 100, 150), buttonzhanshi,buttontype ))

{

Handheld.PlayFullScreenMovie("GS.mp4", Color.black, FullScreenMovieControlMode.Minimal);

}

}

}

将脚本直接放到摄像机上即可。


怎么在Unity中实现划线效果呢?即通过鼠标来划线。代码如下:

public class DrawLineTest : MonoBehaviour {

private GameObject clone;

private LineRenderer line;

private int i;

public GameObject tf;

void Start () {

}

// Update is called once per frame

void Update () {

if (Input.GetMouseButtonDown(0))

{

clone = (GameObject)Instantiate(tf, tf.transform.position, transform.rotation);//克隆一个带有LineRender的物体

//clone.gameObject.GetComponent().enabled=false;

//clone.GetComponent().enabled=true;

line = clone.GetComponent();//获得该物体上的LineRender组件

line.SetColors(Color.blue, Color.red);//设置颜色

line.SetWidth(0.2f, 0.1f);//设置宽度

i = 0;

}

if (Input.GetMouseButton(0))

{

i++;

line.SetVertexCount(i);//设置顶点数

line.SetPosition(i - 1, Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15)));//设置顶点位置

}

if (Input.GetMouseButtonUp (0)) {

line.enabled=false;

Destroy (clone, 1);

}

}

}

将此脚本挂载到摄像机上?并在工程面板里将tf游戏物体关联上,运行,就可以划线了!

未完待续.....

 

 

 

 

 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容