2018年3月25日,Unity3D,基础笔记,自用

本文记录了Unity3D中Invoke方法的使用,通过Invoke可以在指定延迟时间后调用某个函数,例如Invoke(""hanshu"

Invoke("hanshu",0.4f);0.4秒后调用函数

Vector3  XYZ轴变量
transform.Translate(0,0,0);移动命令
gameObject.Find("Point light").GetComponent(Light).enabled=false ; 先查找到物体,在物体上查找自身组件
renderer.material.color=Color.red;查找颜色变量并赋值
Destroy (gameObject);    销毁物体
gameObject.transform.position.y<0    检测Y轴变化
gameObject.Find("Main Camera").GetComponent(sheji).x++;  先查找到物体,在物体上查找自身组件,在增加组件上的静态变量
OnGUI()   按钮函数
Start ()  静态函数
Update () 每一帧都要加载的函数
FixedUpdate() 隔一段时间加载
GUI.Button(Rect(180,400,60,30),"退 出")    创建一个按钮并赋值
Application.Quit();    退出当前运行环境
Application.LoadLevel("01");   重新加载另一个环境
audio.Play();    播放声音
audio.PlayOneShot();
audio.Pause();   暂停声音
audio.Stop();  停止声音
var x:float =Input.GetAxis("Horizontal")*Time.deltaTime*speed; 检测是否随着时间的变化水平移动
var z:float =Input.GetAxis("Vertical")*Time.deltaTime*speed;   检测是否随着时间的变化上下移动
transform.Translate(x,0,z);移动命令
Input.GetButtonDown("Fire1")检测是否按下开火键,及鼠标左键或Ctrl键
var n:Transform = Instantiate(newobject,transform.position,transform.rotation);生成一个物体newobject这个物体的位置是原点
var fwd:Vector3 = transform.TransformDirection(Vector3.forward);生成一个方向,这个方向是(0,0,z);
n.rigidbody.AddForce(fwd*3800); 给生成的物体一个力
Input.GetKey(KeyCode.Q)检测是否按下Q键
transform.Rotate(0,-25*Time.deltaTime,0,Space.Self );随着时间的移动的旋转功能
transform.Translate(0,5*Time.deltaTime,0);随着时间向上移动
AudioClip;声音类
GUIText ;文字类
Texture2D[]:创建数组
GUITexture:纹理类
timer += Time.deltaTime;计时
OnControllerColliderHit(hit:ControllerColliderHit)检测角色控制器与其他碰撞器碰撞的专用函数
hit.gameObject.tag=="playerDoor" 检测标签
transform.parent  找到父级
transform.root  总根目录
transform.FindChild("");  寻找子物体
transform.parent.gameObject.animation.Play(anim_name);找到父级并播放父级上的动画
OnMouseEnter()鼠标进入函数
OnMouseOver()鼠标停留函数
OnMouseExit()鼠标离开函数
OnMouseDown()鼠标点击函数
float dist = Vector3.Distance(a.position, b.transform.position);  返回a和b之间的距离。
OnTriggerEnter(col:Collider)    只要勾选一个isTrigger或者两个都勾选就能进入,触发函数
OnTriggerExit(col:Collider)  触发离开函数
OnCollisitionEnter(collision:Collision) 两个碰撞物体都不勾选isTrigger的前提下才能进入
SendMessage("函数");调用另一个函数
transform.FindChild("组件").SendMessage("函数");
gameObject.GetComponent(CharacterController).slopeLimit=90;改变主角爬坡度数
AddComponent  添加组件
GetComponent  查找组件
GUILayout 自动布局
gameObject.Find("物体")
StartCoroutine(HidePanel(GameObject));
IEnumerator HidePanel(GameObject go){
yield return new WaitForSeconds(0.4f);
go.SetActive(ture);  //显示与隐藏物体
}  时间暂停3秒,配合上面使用
transform.RotateAround(物体.position,Vector3.up,100*Time.deltaTime);一个物体沿着另一个物体旋转
迭代器:
var cms:Renderer[]
of(var c:Renderer in cms){
c.materia.color=color.blue;
}
非内建数组:
using System.Collections.Generic;//引入List数组
arr=new Array(132,45);
arr=new Array();
arr.Sort()数组里面的元素排序
arr.Reverse    数组里面的元素反序
arr.Push("x")数组添加元素
arr.join(",")以,号分割数组里面所有的元素并输出,连接成字符串
GUI.TextField(Rect(300,200,200,20),ss,30)在屏幕是显示一个输入框,在300,200位置高200,宽20.输入的内容方在ss里面,30表示最大输入
var winrect:Rect;
winrect=Rect(400,50,360,510);
winrect=GUI.Window(2,winrect,domywindow,""); 窗口的绘制
GUILayout.BeginVertical();开始垂直布局
GUILayout.Space (5);行间距
GUILayout.EndVertical();结束垂直布局
GUILayout.BeginHorizontal();开始水平布局
GUILayout.EndHorizontal();结束水平样式
GUILayout.Button ("","mybuttonskin1");设置按钮样式
GUILayout.Label (title1,"label");添加样式
GUI.DragWindow(Rect(0,0,1000,1000));随拖动窗口
=====================NPC与主角想对视=======================
var old:Vector3;
function Start(){
old=transform.eulerAngles;
}
function OnMouseEnter(){
transform.LookAt(inventory.player);
}
function OnMouseExit(){
transform.eulerAngles=old;
}
=====================NPC与主角想对视=======================
Screen.width-120 获取现在系统分辨率宽度-120
GUI.skin =myguiskin;修改系统默认样式
Physics.IgnoreCollision( transform.root.collider,newcoconut.collider,true);忽视碰撞


动画:


animator.layeCount>=2   判断动画层数大于等于2
animaror.SetlayerWeight(1,1)  设置动画权重
AnimtorStateInfo stateInfo=animtor.GetCurrentAnimatorStateInfo(0); 获得动画控制权
stateInfo.IsName("Base Layer.Run") 判断动画基层和节点的名字
animator.SetBool("Jump",true)  修改动画变量的参数
animator.GetBool("Jump",!true) 获得变量状态
NetworkConnectionError error=Network.InitializeServer(30,port,true);新建服务器
NetworkConnectionError error=Network.Connect(ip,port);连接服务器
Network.Disconnect();关闭服务器


网络:
非授权服务器:
using UnityEngine;
using System.Collections;


public class FeiShouQuan : MonoBehaviour {


    private string roip = "127.0.0.1";
    private int rport = 10000;
    private int concount = 15;
    private bool usenat = true;


    void OnGUI()
    {
        switch (Network.peerType ) { //服务器类型状态
            case NetworkPeerType.Disconnected:   //服务器状态,服务器还没有启动
                StartServer();  //自定义函数,启动服务器
                break;
            case NetworkPeerType.Server:        //服务器状态,服务器启动了
                OnServer();     //自定义函数,服务器已经被启动,服务器的状态数据,IP,等
                break;
            case NetworkPeerType.Connecting:   //服务器连接中
                break;
        }   
    }
    void StartServer() {
        roip = GUI.TextField(new Rect(10,30,100,20),roip);
        if (GUI.Button(new Rect(10,50,100,30),"创建服务器")) {
            Network.incomingPassword = "unitynetwork";   //创建服务器口令密码
            //创建服务器,初始化服务器,参数(服务器最大连接数,监听的端口号,是否使用NAT转换)
            NetworkConnectionError error = Network.InitializeServer(concount, rport, usenat);
            Debug.Log(error);  //输出服务器创建错误代码
        }
    }
    void OnServer() {
        GUILayout.Label("创建服务器成功!等待连接...");
        string exip = Network.player.externalIP;
        string ip = Network.player.ipAddress;  //获得IP地址,局域网的
        int port = Network.player.port;        //获得端口信息
        GUILayout.Label("服务器IP地址:"+ip+"\n服务器端口:"+port+"外网IP:"+exip);
        int connectlength = Network.connections.Length;  // 获取连接客户端的长度
        for (int i=0;i<connectlength;i++) {
            GUILayout.Label("连接的IP:"+Network.connections[i].ipAddress);
            GUILayout.Label("连接的端口:"+Network.connections[i].port);
        }
        if (GUI.Button(new Rect(10,340,100,30),"断开连接")) {
            Network.Disconnect(200);  //关闭服务器,服务器超过200没有数据就处于关闭状态
        }
    }
}


客户端:
using UnityEngine;
using System.Collections;


public class KeHuDuan : MonoBehaviour {


    private string roip = "127.0.0.1";
    private int iport = 10000;
   // private bool usenat = false;
    void OnGUI() {
        switch (Network.peerType) {
            case NetworkPeerType.Disconnected:
                Startconnect();
                break;
            case NetworkPeerType.Client:
                Clientto();
                break;
            case NetworkPeerType.Connecting:
                break;
        }
    }
    void Startconnect() {
        roip = GUILayout.TextField(roip);
        if (GUILayout.Button("连接服务器")) {
            NetworkConnectionError error = Network.Connect(roip,iport,"unitynetwork");
            Debug.Log(error);
        }
    }
     void Clientto() {
        GUILayout.Button("成功连接到服务器");
    }
    //客户端连接服务器成功后自动调用函数
    void OnConnectedToServer() {
        //FindObjectsOfType(typeof(GameObject))寻找游戏的物体对象,存放在go里面
        foreach (GameObject go in FindObjectsOfType(typeof(GameObject))) {// 迭代器,
            //调用游戏物体对象上的函数,SendMessageOptions.DontRequireReceiver如果没有这个函数这不执行
            go.SendMessage("OnNetworkLoaded",SendMessageOptions.DontRequireReceiver);
        }
    }
    //客户端断开连接后自动调用函数
    void OnDisconnectedFromServer(NetworkDisconnection info)
    {
        //移除该玩家的ID的RPC函数
        Network.RemoveRPCs(Network.player);
        //移除玩家物体
        Network.DestroyPlayerObjects(Network.player);
        //重新加载场景
        Application.LoadLevel(0);
    }
}


控制客户端角色移动
using UnityEngine;
using System.Collections;


public class playerDemo : MonoBehaviour {


    public Transform control;
    void OnNetworkLoaded() {
        Network.Instantiate(control,transform.position,transform.rotation,0);
    }
    private void Update()
    {
        if (Network.isClient) {//检测该脚本是否在客户端运行
            Vector3 Dir = new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));
            float speed = 5.0f;
            GameObject.FindGameObjectWithTag("Player").transform.Translate(speed*Dir*Time.deltaTime);
        }
    }
}


int.Parse()  类型转换
player.ToString() 返回这个玩家的索引,ID
int playerID=int.Parse(player.ToString());


UI
name.GetObject.SetActive(true);//修改Text文本启用
携程程序
IEnumerator Dis(){  //时间等待,选择调用
yiele return new WaitForSeconds(1);
name.GetObject.SetActive(false);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值