位置: 编程技术 - 正文
推荐整理分享unity之项目剖析(3)(unity example project),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:unity 项目管理,unity项目模板,unity开发项目,unity项目模板,unity 项目管理,unity项目总结,unity项目总结,unity项目教程,内容如对您有帮助,希望把文章链接给更多的朋友!
1.4、为角色的移动添加动作
根据1.2节,渲染材质的获取可以从一张大图片中获取一部分,准备好两张图片,一张站立的图片,一张跑动的图片,如下:
站立图片
跑动图片
创建两个材质(Material),分别添加这两张图片,使用Transparent/diffuse 的shader。
接着创建一个获取材质的类:AniSprite
public class AniSprite : MonoBehaviour {
private Vector2 size;//表示tiling
private Vector2 offset;
public void aniSprite (int columSize, int framePerSecond, bool moveDirection) {
//参数columnSize表示这张图片有多上个子动作,比如run就有个。
//参数framPerSecond用于控制角色动作变更的速度,通常有多少个子动作就设置为多少
//因此run这个材质应该设置为.
//参数moveDirection表示角色移动的方向
int index = (int)(Time.time * framePerSecond);
//只要玩家按住左右键,这个index的就会不断地上升
index %= columSize;
//事实上,index的只需要取0~columnSize-1就足够了
if (moveDirection) {
//moveDirection用于表示角色的移动方向
size = new Vector2 (1.0f / columSize, 1);
//这个算法根据1.2节可以很容易理解,把Tiling当做vector2
//其中x = 1.0f/columSize, y=1,这样就可以逐步获取run的动作了。(y=1表//示获取整张图片的y轴,下面的offset将表示对x轴的切割)
offset = new Vector2 (index * size.x, 0);
//重新解释一下Tiling和offset的作用,Tiling表示显示的范围,而offset表示//将该范围移动多少距离。(类放大镜的作用)
}
else {
size = new Vector2 (-1.0f / columSize, 1);
offset = new Vector2 (-index * size.x, 0);
//如果方向相反,需要加入-号
}
renderer.material.mainTextureScale = size;
//该方法用于控制渲染,通常的渲染只会渲染整个材质球,如果要精确的渲染就需要//这两个方法
renderer.material.mainTextureOffset = offset;
}
}
写好这个类,在playController类中调用该类的方法就可以控制角色的移动动作了。修改之后的playController类如下:
public class PlayerController : MonoBehaviour {
public float moveSpeed; //角色移动速度
public Vector3 velocity = Vector3.zero;//角色第移动向量
AniSprite aniPlay;
private CharacterController controller;
public Material runMaterial;
public Material idleMaterial;
//添加两个材质球,用于更改角色的动作
void Start () {
aniPlay = GetComponent ("AniSprite") as AniSprite;
//获取脚本组件可以用这个方法!
controller = GetComponent<CharacterController> ();
}
void Update () {
velocity = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
if (velocity.x == 0) {
//移动向量的x为0表示角色没有移动,渲染静止动作(idleMaterial)
transform.renderer.material = idleMaterial;
aniPlay.aniSprite(1, 1, true);
}
if (velocity.x > 0) {
//角色向左移动,渲染移动动作
transform.renderer.material = runMaterial;
aniPlay.aniSprite (, , false);
//根据run这张图片,包含了个子动作,因此两个参数都为,第三个参数
//作用是决定材质渲染的方向,false为左,true为右
velocity *= moveSpeed;
}
if (velocity.x < 0) {
transform.renderer.material = runMaterial;
aniPlay.aniSprite (, , true);
velocity *= moveSpeed;
}
controller.Move (velocity * Time.deltaTime);
}
}
这样角色跑起来就有动作了而不是像之前那种漂移了,下一次将写角色的跳跃。
【Unity3d】火炬之光的X射线效果 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多Unity3D资源、Unity3D培训视频、Unity3D教程、Unity3D常见问题、Unity3D项目源码,【狗刨学习
创建敌人和玩家之间的AI 创建敌人和玩家之间的AIusingUnityEngine;usingSystem.Collections;publicclassEnemyAI:MonoBehaviour{//敌人冲向的目标publicTransformtarget;//敌人移动速度publicintmoveSpeed=5;//敌人
Unity3D实现闪光灯效果 Unity3D闪光灯效果的实现代码:usingUnityEngine;usingSystem.Collections;//定义一个Light类publicclassLight:MonoBehaviour{//定义一个时间长度publicfloatduration=1.0F;//定义一个
友情链接: 武汉网站建设