2019-08-20 11:20:30 weixin_38744526 阅读数 10722
  • Unity3D实战入门之第三人称射击游戏(TPS)

    这是一套第三人称射击游戏开发的入门基础课程。 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建一款3D射击游戏的雏形。麻雀虽小,五脏俱全,这款小游戏难度不大,但第三人称射击游戏该有的模块、功能它都有涉及。通过案例游戏的开发,学习者可以对第三人称射击游戏入门,对后续复杂大中型3D游戏的开发有实际的借鉴意义。 这套课程,对初次接触3D射击类游戏的学习者而言,是一块极好的跳板。

    1724 人正在学习 去看看 伍晓波

最近在写论文做毕业设计,真是一个头两个大。写过论文的伙伴一定都懂,头发一撮一撮地掉,好心痛!

我的毕设需要用到树莓派编程然后转接到Unity3D利用多媒体投影显示内容,这中间需要用到网络通信多线程。

查了一些资料,决定选择Python Socket来实现功能。Socket是任何一种计算机网络通讯中最基础的内容,网上也能查到好多Python Socket 套接字编程的指南和教程。

不过,教程太多弄得我眼花缭乱,也没明白Socket通信多线程是咋回事,偶然发现了一个讲Python 多线程的小视频,我觉得讲的超详细,很容易懂,特来分享给大家~

如果你也想知道Python多线程是怎么实现的,跟我一起看看下方视频,听知名技术专家李刚老师对Socket多线程和Python的TCP支持与创建TCP服务端的详细解析,

并发编程+网络编程

李刚老师出版的《疯狂java》体系图书曾得到市场的广泛认可,经过多次再版,并被多家高校选作教材。上方视频来自于李刚老师的在线视频课程《21天通关Python》第八章 并发编程+网络编程

鉴于大家都有学习Python的困惑,今天就给大家推荐一本巨有影响力的Python实战书,上线时间仅2个月,就超越了众多实力派,成京东和当当网上的长期畅销图书,并且收获了3.4W的五星好评。

这本书可谓是笔者独家私藏图书之一了,对我学习Python有着莫大的帮助,在京东上也常常"断货",这次拿出来给大家分享一下,希望能帮到大家。

《21天通关Python》视频课程以畅销图书为教材,由图书作者李刚亲自操刀讲解;上手门槛低,可作为0基础掌握Python教材;书籍+线上复合型学习场景特别适合Python小白学习!

点此查看课程:https://edu.csdn.net/bundled/detail/49?utm_source=jiansuopy58_1
(含图书邮寄+视频教程+社群答疑+导师带队)

笔者跟大家分享一个福利!下单时输入优惠码csdn66,立减20元,券后仅需99元
扫码入Python技术交流群,可免费听技术讲座+领学习资料+视频课免费看
在这里插入图片描述

2013-11-20 20:12:45 huangfe1 阅读数 830
  • Unity3D实战入门之第三人称射击游戏(TPS)

    这是一套第三人称射击游戏开发的入门基础课程。 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建一款3D射击游戏的雏形。麻雀虽小,五脏俱全,这款小游戏难度不大,但第三人称射击游戏该有的模块、功能它都有涉及。通过案例游戏的开发,学习者可以对第三人称射击游戏入门,对后续复杂大中型3D游戏的开发有实际的借鉴意义。 这套课程,对初次接触3D射击类游戏的学习者而言,是一块极好的跳板。

    1724 人正在学习 去看看 伍晓波



那抱歉,上次那个Unity+kinect还没有更新,最近在深一步研究,不久将更新(绝对不负众望)!现在进入正题,十分钟带你打造unity3D第一人称射击游戏!

看完本篇博客,你将学会第一人称控制,粒子的添加,碰撞的检测,鼠标的监听,画2d图像,预制物体克隆,添加力,添加声音等等!(本篇博客假设你已经对unity稍微有点了解)

一,打开unity,创建一个场景,添加一个plane,(gameobject->createother->plane)。

二,添加虚拟第一人称任务(现在没搞模型,模型后面可以自己添加);Assert->importpackages->Charactercontroll,之后你将Project面板里面看到这个资源包,打开里面的charactercontroll文件,将里面的first Person controll拖动到合适的位置。

三,然后我们将添加一个虚拟的枪口,作为子弹的发生点!这个你可以创建一个椭圆,放在摄像机的最中间


 然后要将椭圆设置为摄像机的子物体,这样他将随着摄像机运动(不能设置为任务模型的子物体,因为任务模型的不能上下移动,也就不是这样后不能上下射击)。也就是在hierahcry面板中点击你创建椭圆,拖到摄像机上,这样他就成了摄像机的子物体。可以点击运行测试下,你会发现这东西只是虚拟枪口,所以我们设置它看不见,点击椭圆,在修改面板上,有个MeshRender,你单击下,椭圆就看不见了,但是它存在,然后再点击CapsuleColisder,取消他的碰撞(以免影响子弹的射击);
三,子弹的射击

我们首先创建一个圆,(用这个圆来模拟子弹,如果你自己有子弹模型,就用子弹模型),然后在project中创建一个prefab,用于之后的克隆子弹,现在我们来子弹一点火焰效果,Assert->importpackage->particles导入粒子,点击里面的fire,将里面的Flame拖到游戏中,位置和你创建的球(子弹)一样,然后将你设置的,然后同样的方法,将火焰设置为,子弹的子物体,这样,火焰将和子弹一起运动,自己在属性面板里 修改火焰的大小,然后将子弹拖到你创建的prefab中,修改prefab的名字为balls!添加一个刚体属性,Rigidbody(Addcomment->ragidbody)然后删除游戏中的子弹(嗯,删除)!现在子弹的预制物体已经创建好了,现在我们来射击!

四 ,点击鼠标,发生子弹

现在 就是敲代码码的时候了

var aim:Transform;
//克隆子弹
private var ball:Transform;
//绘制准星的材质
var material:Material;
function Start () {

}

function Update () {
//将鼠标的图标隐藏
Screen.showCursor=false;
//var zj=Vector3(Screen.width/2,Screen.height/2,0);
//var ray:Ray=Camera.main.ScreenPointToRay(Input.mousePosition);
//定义一个方向,为发射点y轴方向
var dir=aim.transform.TransformDirection(Vector3.up);
//var dir=ray.direction;
//按下鼠标左键
if(Input.GetMouseButtonDown(0)){
//实列化一个球,发射点的位置,
ball=Instantiate(balls,aim.position,Quaternion.identity);
//在某一个方向加一个力
ball.rigidbody.AddForce(dir.normalized*1000);
print("----------->>>");
//三秒后删除小球
Destroy(ball.gameObject,3);
}
}

 这里用到了,Screen.showCursor=false;将鼠标隐藏,要将他放在updatae中,放在start中不行var dir=aim.transform.TransformDirection(Vector3.up);这是定义一个方向,子弹将以这个方向射击

其他的没什么解释的了,注释很详细了,方法里面传入的参数,查一下API文档就行

五 ,现在们开始绘制准星

 

//绘制准星的材质

var material:Material;

先定义 一个材质,用来绘制图像

 

//绘制准星
function OnPostRender(){
DrawRecent(Screen.width/2,Screen.height/2,10,10);
}
//绘制四边形的方法
function DrawRecent(x:float,y:float,width:float,height:float){
//材质通道设置为默认的0
 material.SetPass(0);
 //绘制2D图形
  GL.LoadOrtho();
 //绘制长方体
 GL.Begin(GL.QUADS);
 //传入四个点的相对屏幕的坐标,先后分别是左上角,左下角,右下角,右上角
  GL.Vertex(new Vector3(x/Screen.width,y/Screen.height,0));
  GL.Vertex(new Vector3(x/Screen.width,(y+height)/Screen.height,0));
  GL.Vertex(new Vector3((x+width)/Screen.width,(y+height)/Screen.height,0));
  GL.Vertex(new Vector3((x+width)/Screen.width,y/Screen.height,0));
  //结束绘画
  GL.End();
}

 这个没什么好解释的,注释有,按照各个规则就是

 

然后就是,如果你射击到了敌人,敌人就着火

四,射击敌人

首先我们,创建几个cube,这个用来模拟敌人,如果你有好的模型,就用模型。给cube创建ridibody

然后给它一个标签,在属性面板上面有个Tag,点击,选择player,给个player标签,你也可以点击addTag自己添加一个Tag,现在我们创建一个prefab预制火火焰,创建一个空物体,将先前导入的fires拖到空物体中

将空物体放入prefab中,改名为fires

现在 我们添加碰撞事件

新建一个脚本,

 

#pragma strict
//预制火焰
var fires:Transform;
//克隆火焰
private var fire:Transform;
function Start () {

}

function Update () {

}//碰撞监听
function OnCollisionEnter(other:Collision){
//如果碰到的事cube(先前我们将cube的tag设置成了player)
if(other.transform.tag=="Player"){
//克隆一个火焰
fire=Instantiate(fires,other.transform.position,Quaternion.identity);
//设置火焰的父对象为箱子,这样火焰将和物体一起运动,
fire.transform.parent=other.transform;}
}

 五,你想加入声音嘛?如果你想,接着看两种方式添加音乐,首先添加背景音乐,点击摄像机,AddCommpent->aduio->aduiosource

 

首先 下载你需要的背景音乐,将音乐拖进Asset文件夹中,然后将音乐拖进刚才添加的aduiosource的中

然后 教你添加动作音效,在第一和代码中加入var music:AudioClip;

然后再发生子弹的那个方法中,AudioSource.PlayClipAtPoint(music,transform.position);播放,

六:挂载脚本

你首先将以第一个脚本,挂到摄像机上面,然后将第一个frefab(balls)拖到变量中

第二个脚本放在balls上,将fires和音乐拖到变量中!!

OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 现在开火!!!!!!!!!

 

 

 

源码下载

2013-10-10 17:29:53 lzhq1982 阅读数 14420
  • Unity3D实战入门之第三人称射击游戏(TPS)

    这是一套第三人称射击游戏开发的入门基础课程。 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建一款3D射击游戏的雏形。麻雀虽小,五脏俱全,这款小游戏难度不大,但第三人称射击游戏该有的模块、功能它都有涉及。通过案例游戏的开发,学习者可以对第三人称射击游戏入门,对后续复杂大中型3D游戏的开发有实际的借鉴意义。 这套课程,对初次接触3D射击类游戏的学习者而言,是一块极好的跳板。

    1724 人正在学习 去看看 伍晓波

本系列文章由Aimar_Johnny编写,欢迎转载,转载请注明出处,谢谢。

http://blog.csdn.net/lzhq1982/article/details/12581957


我们的世界不能只有水流山川,花草树木,让我们的主角正式登场吧。这篇文章将介绍怎样加载人物,并赋予第三人称视角,第三人称控制,很简单哦。

制作模型是美术童鞋的事,俺是个程序,偷下懒,到网上找资源吧,于是我邂逅了我们的主角,是个prefab,不知道prefab是什么的童鞋请好好的学习基础教程,把她拖到我们的场景中来吧,整体放大了2倍,来,跟大家见个面(其实网上很多教程都是用的这个资源)


这个美眉很强大,除了会各种攻击,跑,跳,竟然还会江南style,制作者真风趣。


下面让我们的美眉动起来吧。本篇教程先介绍个简单的。

先给她加个Character Controller组件(Component->Physics->Character Controller),这是unity自带的很强大的角色控制器组件,会给角色自动加上胶囊体包围盒,如果包围盒不合适,适当调整Center(重心),Radius(包围盒半径),Height(包围盒高度)。调整后如下图:



OK,让我们的主角动起来吧。Character Controller资源包自带了两个脚本,ThirdPersonCamera和ThirdPersonController,没有加载Character Controller资源包的请先加载,然后在Project->Standard Assets->Character Controllers->Sources->scripts里,你能找到这两个脚本,分别是第三人称相机脚本和第三人称控制脚本,直接拖给角色吧。两个代码都很长,有兴趣的自行研究一下,其中ThirdPersonCamera的属性基本都是控制摄像机与角色之间的距离,速度等,可以保持默认,但ThirdPersonController需要我们将几个动画文件赋给它。包括idle(休息),Walk(走),Run(跑),Jump(跳),我的设置如下:


运行游戏,相机始终会追踪我们的角色了,再用键盘控制我们的角色行走,跑,跳吧。下面上个美眉跑的图。


到这里,我们还一句代码都没写过,不过你已经实现最基本的角色行为了。下一节我们将用代码实现一些我们角色特有的行为,比如攻击,鼠标控制行走等。

2015-11-03 21:51:01 VioletTD 阅读数 2410
  • Unity3D实战入门之第三人称射击游戏(TPS)

    这是一套第三人称射击游戏开发的入门基础课程。 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建一款3D射击游戏的雏形。麻雀虽小,五脏俱全,这款小游戏难度不大,但第三人称射击游戏该有的模块、功能它都有涉及。通过案例游戏的开发,学习者可以对第三人称射击游戏入门,对后续复杂大中型3D游戏的开发有实际的借鉴意义。 这套课程,对初次接触3D射击类游戏的学习者而言,是一块极好的跳板。

    1724 人正在学习 去看看 伍晓波

      个人比较喜欢制作策略类的第三人称游戏,可以召唤怪物,不知道大家喜不喜欢!如果喜欢的话就支持我一下吧!当然,如果你有一些好的功能和想法,可以一起讨论研究!欢迎大家来这里做客!

        所以今天来分享一下最近做的项目中的,游戏角色的单选和移动! 我用的是Unity3D中的自动寻路<NavMeshAgent>组件来实现的,下面是游戏角色的组件,要看仔细哦!

          首先在游戏对象的下面添加一个2D -> Sprite 的精灵图片(图片可以自行添加) 的子对象叫ColorBG 作为一个选中的标记

           下面动画系统Animator的截图

                好了,下面就是代码部分了
<pre name="code" class="csharp">using UnityEngine;
using System.Collections;
using UnityEngine.UI;
/// <summary>
/// 功能: 游戏对象的单选和移动
/// 创建者: VioletTD
/// 修改时间: 2015年11月3日 22:50
/// 感谢: Me加油!
/// </summary>
public class RabbitController : Singleton<RabbitController>{
	public bool didSelectPlayer;//是否被选中
	private GameObject colorBG;//精灵图片的游戏对象,下面使用GameObject.Find("ColorBG") 找到并实例化
	private Animator animator;//用于获取到游戏对象本身的动画系统
	private RaycastHit hit;//射线的命中点
	private Vector3 targetPos;//用于记录玩家的移动到的(寻路组件)的目标点
	void Awake () {
		animator = GetComponent<Animator>();//获取游戏对象的动画系统
		didSelectPlayer = false;//初始化是否被选中 为假    游戏对象没有被选中
		colorBG.SetActive (false);//初始化精灵图片的标示为 没有被选中
		targetPos = Vector3.zero;//初始化玩家移动的目标点为  Vector3(0,0,0)
		GetComponent<NavMeshAgent>().speed = 0.2f;//寻路组件的游戏对象的移动速度为0.2f
	}
	void Update () {
		PlayerMoveMethod ();//在Update中调用游戏对象移动的方法
	}
	#region PlayerMoveMethod()
	void PlayerMoveMethod()//游戏对象的移动放
	{
		if(Input.GetMouseButtonDown (1))//如果点击鼠标的右键
		{
			if(didSelectPlayer)//如果游戏对象被选中
			{
				Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);//创建从摄像机发射到鼠标的摄像
				if(Physics.Raycast (ray,out hit))//物理静态类的射线投射方法
				{
					if (hit.collider.CompareTag ("Ground")) //如果射线命中的为地面
					{
						targetPos = hit.point;//把射线命中的地面的点赋值给 游戏对象移动的目标点
						GetComponent<NavMeshAgent>().SetDestination (targetPos);//设置寻路组件的目的地为  游戏对象移动的目标点
						transform.LookAt (targetPos);//游戏对象看向该点
						animator.SetFloat ("Walk",0.2f);//设置Float类型的"Walk"  值为0.2f  大于0.1就会播放行走的动画
					}
				}
			 }
		}
		if(Input.GetMouseButtonDown (0) && didSelectPlayer)//如果游戏对象在选中状态下     再次点击鼠标左键   设置游戏对象为未选中状态
		{
			didSelectPlayer = false;//设置为false
			colorBG.SetActive (false);//标记背景为不显示
		}
		if(!didSelectPlayer)//如果玩家在没有选中的状态 就会停止移动
		{
			GetComponent<NavMeshAgent>().SetDestination (transform.position);//设置寻路组件的目的地为本身
			animator.SetFloat ("Walk",0f);// Float类型的"Walk"  值为0  小于0.1就会停止播放行走动画
		}
	}
	#endregion
	void OnMouseUpAsButton()//如果鼠标点击并抬起
	{
		didSelectPlayer = true;//设置选中为True
		colorBG.SetActive (true);//脚下的圆圈为True  显示
	}
}



谢谢大家的支持!!!!!!!

2018-08-10 13:38:33 ChengTong007 阅读数 2535
  • Unity3D实战入门之第三人称射击游戏(TPS)

    这是一套第三人称射击游戏开发的入门基础课程。 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建一款3D射击游戏的雏形。麻雀虽小,五脏俱全,这款小游戏难度不大,但第三人称射击游戏该有的模块、功能它都有涉及。通过案例游戏的开发,学习者可以对第三人称射击游戏入门,对后续复杂大中型3D游戏的开发有实际的借鉴意义。 这套课程,对初次接触3D射击类游戏的学习者而言,是一块极好的跳板。

    1724 人正在学习 去看看 伍晓波

在网上搜到的,在这里记录下,以后用,如果有侵权的地方,谅解下!!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class MouseLook : MonoBehaviour 
{
    //定义镜头与角色的初始距离,开始的时候定义成私有变量,我改成公有变量,为了方便在代码面板上修改
    public float m_distanceAway = 4.5f;
    //镜头初始高度
    public float m_distanceUp = 1.5f;
    //镜头改变时的平滑度
    private float m_smooth = 5f;
    //玩家对象
    public Transform m_player;
    //自己
    private Transform m_transsform;
 
    private float maxSuo = 100.0f;//镜头缩放范围
    private float minSuo = 2.0f;
 
    private float maxSD = 20.0f;
    private float minSD = 1f;
    void Start () 
    {
        m_transsform = this.transform;//定义自己
        m_player = GameObject.Find("Player").transform;
    }
    
    
    void Update () 
    {
        Zoom();//缩放
        CameraSet();//相机设置
        //定义一条射线
        RaycastHit hit;
        if (Physics.Linecast(m_player.position + Vector3.up,m_transsform.position,out hit))
        {
            string name = hit.collider.gameObject.tag;
            if (name != "MainCamera")
            {
                //如果射线碰撞的不是相机,那么就取得射线碰撞点到玩家的距离
                float currentDistance = Vector3.Distance(hit.point,m_player.position);
                //如果射线碰撞点小于玩家与相机本来的距离,就说明角色身后是有东西,为了避免穿墙,就把相机拉近
                if (currentDistance < m_distanceAway)
                {
                    m_transsform.position = hit.point;
                }
            }
        }
    }
    /// <summary>
    /// 设置相机
    /// </summary>
    void CameraSet()
    {
        //取得相机旋转的角度
        float m_wangtedRotationAngel = m_player.transform.eulerAngles.y;
        //获取相机移动的高度
        float m_wangtedHeight = m_player.transform.position.y + m_distanceUp;
        //获得相机当前角度
        float m_currentRotationAngle = m_transsform.eulerAngles.y;
        //获取相机当前的高度
        float m_currentHeight = m_transsform.position.y;
        //在一定时间内将当前角度更改为角色面对的角度
        m_currentRotationAngle = Mathf.LerpAngle(m_currentRotationAngle, m_wangtedRotationAngel, m_smooth * Time.deltaTime);
        //更改当前高度
        m_currentHeight = Mathf.Lerp(m_currentHeight, m_wangtedHeight, m_smooth * Time.deltaTime);
        //返回一个Y轴旋转玩家当前角度那么多的度数
        Quaternion m_currentRotation = Quaternion.Euler(0, m_currentRotationAngle, 0);
        //玩家的位置
        Vector3 m_position = m_player.transform.position;
        //相机位置差不多计算出来了
        m_position -= m_currentRotation * Vector3.forward * m_distanceAway;
        //将相机应当到达的高度加进应当到达的坐标,这就是相机的新位置
        m_position = new Vector3(m_position.x, m_currentHeight, m_position.z);
        m_transsform.position = Vector3.Lerp(m_transsform.position, m_position, Time.time);
        //注视玩家
        m_transsform.LookAt(m_player);
    }
 
    /// <summary>
    /// 按鼠标滚轮缩放
    /// </summary>
    void Zoom()
    {
        //实现滑轮拖动
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            if (Camera.main.fieldOfView <= maxSuo)//缩放的范围
            {
                Camera.main.fieldOfView += 2;
            }
            if (Camera.main.orthographicSize <= maxSD)
            {
                Camera.main.orthographicSize += 0.5f;
            }
        }
 
        //Zoom in
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            if (Camera.main.fieldOfView >= minSuo)
            {
                Camera.main.fieldOfView -= 2;
            }
            if (Camera.main.orthographicSize >= minSD)
            {
                Camera.main.orthographicSize -= 0.5f;
            }
        }
    }
}
 

没有更多推荐了,返回首页