2014-10-30 20:48:57 book_longssl 阅读数 3948


 

Unity3D C#打开外部应用程序,并检测应用程序是否关闭退出实现代码。

using UnityEngine;

using System.Collections;

using System.Diagnostics;

using System;

 

public class StartOtherApp : MonoBehaviour {

 

         private Process pc;

         void Start () {

                   StartCoroutine(StartApp());

         }

 

         IEnumerator StartApp()

         {

                   yield return new WaitForSeconds(2);

                   pc = Process.Start("C:/Users/Lee/Desktop/Flash VideoPlayer/VRPlayer/VRPlayer.app/VRPlayer.exe");

 

                   pc.EnableRaisingEvents = true;

                   pc.Exited += new EventHandler(myProcess_Exited);

         }

 

         void myProcess_Exited(object sender, EventArgs e)

         {

                   Application.Quit();

         }

}


Unity3D 关于运动的代码


运动相关一般要写在update中,实际开发中,需要分清楚哪些是需要每frame都检测的,哪些是触发的。

input下面的类一般要写在update中,因为每个frame都需要检测。

OnTriggerEnter();OnTriggerStay;OnTriggerExit;与之对应的是OnCollisionEnter....,如果勾选了IsTrigger则需要Trigger类。

可以用于运动的函数。我们应该更具具体的情况选择合适的函数。

 

rigidbody(2D)velocity,

//向某个方向移动

velocity=transform.TransformDirection(Vector3.forward*100);

 

transform.translate,

//向某个方向移动

playerTransform.Translate(Vector3.right*Time.deltaTime*(-moveSpeed.x));

 

vector3.movetowards,

//移动到目标点

playerTransform.position=Vector3.MoveTowards(playerTransform.position,tagerpoint.position,200*Time.deltaTime);

 

也可以直接操作transform.position



2018-03-18 16:04:35 MadBam_boo 阅读数 1356

Unity3d实战之Unity3d网络游戏实战篇(10):玩家类Player

学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍,如有侵权请联系,必删。

 玩家在登录游戏到退出游戏时,有以下流程:
这里写图片描述
 我们给Player类设计如下方法:
 Send: 提供一个Player的Send方法,该方法调用ServNet的Send方法;
 KickOff:将当前角色踢下线;
 Logout:该方法将触发HandlePlayerEvent中的OnLogout事件。

 Player类的Property:

public string id;       // user_name
public Conn conn;       // the conn connect with user[id]'s client
public PlayerData data; // player's data
public PlayerTempData tempData; // player's tempdata

 KickOff:
 当用户在两个Client上登录同一账号时,把前一个角色踢下线。

public static bool KickOff(string id, ProtocolBase protoBase)
{
    Conn[] conns = ServNet.instance.conns;      // get client list.
    for (int i = 0; i < conns.Length; i++) {
        Conn conn = conns [i];
        if (conn == null || conn.isUse == false)
            continue;
        if (conn.player == null)
            continue;

        if (conn.player.id == id) {             // find the user who named [id].
            lock (conn.player) {
                if (protoBase != null) {        // send the logout protocol to user.
                    ProtocolBytes protocol = (ProtocolBytes)protoBase;
                    protocol.AddInt32 (-1);
                    conn.player.Send ((ProtocolBase)protocol);
                }

                return conn.player.Logout ();   // execute logout function
            }
        }
    }
    return true;
}

 Logout:
 Player类的Logout方法,调用Logout方法将会触发HandlePlayerEvent中的OnLogout事件处理相关逻辑。

public bool Logout()
{       
    ServNet.instance.handlePlayerEvent.OnLogout (this);     // trigger OnLogout event

    if (!DataMgr.instance.SavePlayer (this)) {              // save player's data before logout
        return false;
    }

    conn.player = null;
    conn.Close ();
    return true;
}
2018-10-25 13:56:07 weixin_42513339 阅读数 6184

1.暂停游戏。

Time.timescale = 0;

2.继续游戏。

Time.timescale = 1;

3.重新开始。

using UnityEngine.SceneManagement;

SceneManager.LoadScene (0);

其中,0,为游戏场景的索引号,具体索引号在build的时候加入场景的时候后面写的有。

4.退出游戏(在开发时,会没反应,打包后就可以了)

Application.Quit(); 

 

//这个代码仅仅是测试开发用的,并非是打包后的退出,这个需要注意

UnityEditor.EditorApplication.isPlaying = false;

PS:关于Editor相关详细可以看我这一篇https://blog.csdn.net/weixin_42513339/article/details/83411060

2017-11-30 10:04:14 oldherowang 阅读数 2234

手游会碰到诸如来电话、锁屏、闹钟等等一系列导致游戏被强制暂停的情况。

有些时候我们需要针对这种情况作出一定的判断和处理,此时就要用到两个方法:

OnApplicationPause(bool)方法:当程序转为暂停时,bool为true,当程序转为继续时,bool为false;此方法会自动执行,只需要在方法体内写好自己根据bool来执行的逻辑就可以了。

OnApplicationFocus(bool)方法:当程序获得焦点(即程序没有后台时)bool为true,当程序失去焦点(即程序后台)时,bool为false;此方法会自动执行,只需要在方法体内写好自己根据bool来执行的逻辑就可以了。

相关函数调用顺序及bool变化如下:

强制暂停时,先 OnApplicationPause,后 OnApplicationFocus;

重新“启动”手机时,先OnApplicationFocus,后 OnApplicationPause;

正常进游戏:

OnApplicationFocus, isFocus=True

正常退游戏:

OnApplicationQuit


Home键出游戏:

OnApplicationPause, isPause=True

OnApplicationFocus, isFocus=False


Home进游戏:

OnApplicationPause, isPause=False
OnApplicationFocus, _isFocus=True


Kill进程:

当前应用双击Home,然后Kill:

OnApplicationQuit  (IOS 有回调,android 没回调)


跳出当前应用,然后Kill:

OnApplicationQuit  (IOS和Android都没回调)



2014-02-27 10:21:42 u013265457 阅读数 596

  说说在Unity3D中制作2D游戏的原理。在Unity3D中绘制贴图的方式大致可分为两种,第一种是在GUI中绘制贴图,第二种是在网格面上绘制贴图。先说说第一种,GUI主要用来制作简单的游戏2D界面,比如游戏主界面中绘制的游戏名称开始游戏保存游戏退出游戏一些按钮或界面中一切其它的高级控件,文本框,输入框等等、GUI只能制作简单的图形化界面,因为它的渲染效率非常低,它与3D世界中网格模型的渲染机制完全不一样。第二种的属于将图片绘制在3D中网格平面中,它的渲染效率远远高于GUI中,在制作2D游戏时都是将所有贴图绘制在平面模型对象之上,最后用摄像机以90度垂直的角度照射这这些平面。

  我们盘点一下unity3d 2d游戏中必备的几个元素。

  摄像机:无论是3D游戏还是2D游戏摄像机都是非常重要的属性,移动摄像机即可更改屏幕中显示的内容,游戏地图的坐标永远都不会发生改变。

  地图:2D游戏中的地图一般是由tile拼接而成,它可由地图编辑器生成然后将每一块tile绘制在整个贴图中,最后将贴图贴在平面网格面之上即可。还有一种作法是将两个或两个以上屏幕大小平面以队列的形式排在屏幕后面,当摄像机移动超出第一块面显示范围时,将它的坐标移动在第二块面后面,此时地图就形成了一个排序的队列。为了让地图的效果更加完美,一般地图可以由好几层来组成,比如背景层、与主角的遮挡曾、物理层等等。

  地图拼接:地图的排序队列中两张图应当是可以无缝拼接,这个应当是由美术来提供资源,这里我就不那么细致了将远离说明白即可。

主角:它的范围就比较广的,敌人、物品等等出现在地图之上的都可以使用它。如果控制主角移动,摄像机移动的同时主角也当跟随移动,并且保持屏幕中的移动比例,除非摄像机无法移动,这时将直接移动主角在屏幕中的坐标。

Unity3D-游戏退出

阅读数 10174

AiOS

博文 来自: wuming22222
没有更多推荐了,返回首页