Unity3D实现人物移动示例
作者:文艺V 发布时间:2022-08-15 21:51:58
标签:Unity3D,人物移动
一个是通过W、A、S、D来移动人物(示例一),另个是按屏幕上的按钮来移动人物(示例二)。很简单,只改了几行代码。
下面是“Assets”文件夹里面的资源。
示例一:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class E3_07keyboard : MonoBehaviour
{
//动画数组
private Object[] animUp;
private Object[] animDown;
private Object[] animLeft;
private Object[] animRight;
//地图贴图
private Texture2D map;
//当前人物动画
private Object[] tex;
//人物X坐标
private int x;
//人物Y坐标
private int y;
//帧序列
private int nowFram;
//动画帧的总数
private int mFrameCount;
//限制一秒多少帧
private float fps = 5;
//限制帧的时间
private float time = 0;
void Start()
{
//得到帧动画中的所有图片资源
animUp = Resources.LoadAll("up");
animDown = Resources.LoadAll("down");
animLeft = Resources.LoadAll("left");
animRight = Resources.LoadAll("right");
//得到地图资源
map = (Texture2D)Resources.Load("map/map");
//设置默认动画
tex = animUp;
}
void OnGUI()
{
//绘制贴图
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), map, ScaleMode.StretchToFill, true, 0);
//绘制帧动画
DrawAnimation(tex, new Rect(x, y, 32, 48));
//点击按钮移动人物
if (Input.GetKey(KeyCode.W))
{
y -= 2;
tex = animUp;
}
if (Input.GetKey(KeyCode.S))
{
y += 2;
tex = animDown;
}
if (Input.GetKey(KeyCode.A))
{
x -= 2;
tex = animLeft;
}
if (Input.GetKey(KeyCode.D))
{
x += 2;
tex = animRight;
}
}
void DrawAnimation(Object[] tex, Rect rect)
{
//绘制当前帧
GUI.DrawTexture(rect, (Texture)tex[nowFram], ScaleMode.StretchToFill, true, 0);
//计算限制帧时间
time += Time.deltaTime;
//超过限制帧则切换图片
if (time >= 1.0 / fps)
{
//帧序列切换
nowFram++;
//限制帧清空
time = 0;
//超过帧动画总数从第0帧开始
if (nowFram >= tex.Length)
{
nowFram = 0;
}
}
}
}
示例二
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class E3_07button : MonoBehaviour
{
//动画数组
private Object[] animUp;
private Object[] animDown;
private Object[] animLeft;
private Object[] animRight;
//地图贴图
private Texture2D map;
//当前人物动画
private Object[] tex;
//人物X坐标
private int x;
//人物Y坐标
private int y;
//帧序列
private int nowFram;
//动画帧的总数
private int mFrameCount;
//限制一秒多少帧
private float fps = 5;
//限制帧的时间
private float time = 0;
void Start()
{
//得到帧动画中的所有图片资源
animUp = Resources.LoadAll("up");
animDown = Resources.LoadAll("down");
animLeft = Resources.LoadAll("left");
animRight = Resources.LoadAll("right");
//得到地图资源
map = (Texture2D)Resources.Load("map/map");
//设置默认动画
tex = animUp;
}
void OnGUI()
{
//绘制贴图
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), map, ScaleMode.StretchToFill, true, 0);
//绘制帧动画
DrawAnimation(tex, new Rect(x, y, 32, 48));
//点击按钮移动人物
if (GUILayout.RepeatButton("向上"))
{
y -= 2;
tex = animUp;
}
if (GUILayout.RepeatButton("向下"))
{
y += 2;
tex = animDown;
}
if (GUILayout.RepeatButton("向左"))
{
x -= 2;
tex = animLeft;
}
if (GUILayout.RepeatButton("向右"))
{
x += 2;
tex = animRight;
}
}
void DrawAnimation(Object[] tex, Rect rect)
{
//绘制当前帧
GUI.DrawTexture(rect, (Texture)tex[nowFram], ScaleMode.StretchToFill, true, 0);
//计算限制帧时间
time += Time.deltaTime;
//超过限制帧则切换图片
if (time >= 1.0 / fps)
{
//帧序列切换
nowFram++;
//限制帧清空
time = 0;
//超过帧动画总数从第0帧开始
if (nowFram >= tex.Length)
{
nowFram = 0;
}
}
}
}
来源:https://blog.csdn.net/qq_39588003/article/details/98651857


猜你喜欢
- 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Thre
- CoordinatorLayout 实现了多种Material Design中提到的滚动效果。目前这个框架提供了几种不用写动画代码就能工作的
- 本文实例讲述了Java文件操作工具类fileUtil。分享给大家供大家参考,具体如下:package com.gcloud.common;i
- 本文实例为大家分享了C#字数统计(字母、数字、汉字、符号)的具体代码,供大家参考,具体内容如下namespace 测试1{ public p
- 一、Java中锁的概念自旋锁:是指当一个线程获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能被成功获取,
- 在开发中当程序发生ANR或者异常,我们会将信息存在本地,然后上传服务器,这样可以实时去发现问题修改问题。那我们需要获取文件之后需要对文件进行
- 前言在实现红黑树之前,我们先来了解一下符号表。符号表的描述借鉴了Algorithms第四版,详情在:https://algs4.cs.pri
- 本文实例为大家分享了Android实现页面滑动切换动画的具体代码,供大家参考,具体内容如下实现两个页面滑动切换,一些相册的效果也是如此一个A
- 嵌入式Servlet容器在Spring Boot中,默认支持的web容器有 Tomcat, Jetty, 和 Undertow1、原理分析那
- 本文实例讲述了WPF设置窗体可以使用鼠标拖动大小的方法。分享给大家供大家参考。具体实现方法如下:private void Window_Lo
- Class类中获取方法:public Method[] getMethods();//获取包括自身和继承(实现)过来的所有的public方法
- 概述:堆排序是利用构建“堆”的方法确定具有最大值的数据元素,并把该元素与最后位置上的元素交换。可将任意一个由n个数据元素构成的序列按照(a1
- yml 文件规则yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的。不支持tab缩进可以使用 "-
- 一、系统介绍本系统实现扑克的分发,抢地主,电脑自动出牌等功能。二、系统展示1.扑克分发2.抢地主3.出牌4.游戏胜利三、系统实现Card.j
- 本文实例讲述了C#实现中英文混合字符串截取的方法,是C#字符串操作中非常常用的一个方法。分享给大家供大家参考之用。具体方法如下:具体功能代码
- FeignClient设置动态Url1. 需求描述一般情况下,微服务内部调用都是通过注册中心,eureka,zookeeper,nacos等
- 在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目。预想的基本流程如下:1、用户网站注册,填写用户名、密码、em
- 在我们开发SpringBoot后端服务时,一般需要给前端统一响应格式,方便前端调试及配置错误提示等等。这篇文章讲讲实际工作中统一响应格式及统
- 废话开篇:iOS与android在实现列表界面的时候是有重用机制的,目的就是减少内存开销,用时间换空间。个人感觉flutter并没有特别强调
- 使用NOPI导入Excel文档NOPI版本:2.3.0,依赖于NPOI的SharpZipLib版本:0.86,经测试适用于.net4.0+记