找回密码
 立即注册
查看: 3610|回复: 85

[常见问题] 将脚本指定给角色总是出错,郁闷

[复制链接]
发表于 2013-10-7 22:16 | 显示全部楼层 |阅读模式
初学者按照这本书第三章学第3人称射击游戏

按教程做的,然后按教程步骤把脚本指定给角色,总是提示错误

按play运行,提示如下


初学中,无法解决,请大侠们指教!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2013-10-7 22:24 | 显示全部楼层
怕自己脚本输入出错 ,又将该书光盘上脚本文件复制到我的脚本了,。。。真是没理解是怎么回事出错了
发表于 2013-10-8 09:15 | 显示全部楼层
贴脚本看看
 楼主| 发表于 2013-10-8 09:47 | 显示全部楼层
using UnityEngine;
using System.Collections;

[AddComponentMenu("mygame/Player")]
public class Player : MonoBehaviour {
public float m_speed =1;
protected Transform m_transform;
       
        // Use this for initialization
        void Start () {
       
                m_transform = this.transform;
        }
       
        // Update is called once per frame
        void Update () {
               
        //纵向移动
        float movev = 0;
               
        //水平移动距离
        float moveh = 0;
               
        //按上键
        if ( Input.GetKey( KeyCode.W ) )
                {
                        movev -= m_speed*Time.deltaTime;
                }
               
        //按下键
        if ( Input.GetKey( KeyCode.S ) )
                {
                        movev += m_speed*Time.deltaTime;
                }
               
        //按左键
        if ( Input.GetKey( KeyCode.A ) )
                {
                        moveh += m_speed*Time.deltaTime;
                }
               
        //按右键
        if ( Input.GetKey( KeyCode.D ) )
                {
                        moveh -= m_speed*Time.deltaTime;
                }
               
        //移动
        this.m_transform.Translate( new Vector3( moveh,0,movev ) );
               
        }
}
 楼主| 发表于 2013-10-8 09:51 | 显示全部楼层
if ( Input.GetKey( KeyCode.W ) )
是看到别人实例控制移动这么写
原脚本是这部分是这样
if ( Input.GetKey( KeyCode.UpArrow ) )
        {
            movev -= m_speed * Time.deltaTime;
        }

        // 向下移动
        if ( Input.GetKey( KeyCode.DownArrow ) )
        {
            movev += m_speed * Time.deltaTime;
        }

        //向左移动
        if ( Input.GetKey( KeyCode.LeftArrow ) )
        {
            moveh += m_speed * Time.deltaTime;
        }

        // 向右移动
        if ( Input.GetKey( KeyCode.RightArrow ) )
        {
            moveh -= m_speed * Time.deltaTime;
 楼主| 发表于 2013-10-8 10:12 | 显示全部楼层
sorry,上面贴错了 那是第二章控制飞船移动的 结果是飞船不会动 但没显示说脚本出错,可以指定给角色,但角色不会移动 可以进入play模式。
以下才是fps的脚本 显示是图示的错误,指定给角色时显示有错
using UnityEngine;
using System.Collections;



public class Player : MonoBehaviour {
        //组件
        public Transform m_transform;
    CharacterController m_ch;
       
        //角色移动速度
        float m_movSpeed = 3.0f;
        //重力
        float m_gravity = 2.0f;

        //生命值
        public int m_life = 5;
         
        // Use this for initialization
        void Start () {
        //获取组件
        m_transform = this.transform;
        m_ch = this.GetComponent<CharacterController>();
       
        }
       
        // Update is called once per frame
        void Update () {
       
                // 如果生命值为0,什么也不做
                 if (m_life <= 0)
            return;

        Control();
        }
       
        void Control()
        {
                 float xm = 0, ym = 0, zm = 0;

               
                //重力运动
                ym -= m_gravity*Time.deltaTime;
               
                //上下左右运动
                 if (Input.GetKey("W")){
            zm += m_movSpeed * Time.deltaTime;
        }
        else if (Input.GetKey("S")){
            zm -= m_movSpeed * Time.deltaTime;
        }

        if (Input.GetKey("A")){
            xm -= m_movSpeed * Time.deltaTime;
        }
        else if (Input.GetKey("D")){
            xm += m_movSpeed * Time.deltaTime;
        }
                       
        //移动
         m_ch.Move( m_transform.TransformDirection(new Vector3(xm, ym, zm)) );
               
               
        }
       
        void OnDrawGizmos()
    {
        Gizmos.DrawIcon(this.transform.position, "Spawn.tif");
    }
       
}

发表于 2013-10-8 22:15 | 显示全部楼层
这个看不有什么错误,建议你看一下Console窗口里的的错误提示信息
 楼主| 发表于 2013-10-8 23:41 | 显示全部楼层
错误已经找到了,很是郁闷的错误,居然是在注解上。注解//后面我是用搜狗拼音输入汉字的,我用光盘自带的脚本复制过来,就没有错误,但是他的注解是乱码的,我用搜狗拼音改了下,居然就出错了,我用微软的全拼改回去,居然有对了,郁闷了好几天问题居然是这样的,飞船也可以移动了!!!差点让我放弃继续学习{:soso_e134:}
 楼主| 发表于 2013-10-8 23:45 | 显示全部楼层
//生命值  //生命值  有谁碰到过这种情况吗?用两个看去一模一样注解,一个用微软全拼,一个用搜狗拼音,微软的注解可以通过,搜狗的注解居然是出错?

点评

在mono里面写代码尽量不要用中文注解,用的话尽量多用些英文隔开  详情 回复 发表于 2013-12-20 13:03
 楼主| 发表于 2013-10-8 23:56 | 显示全部楼层
还有一个奇怪的现象是,我的unity3d版本,如果脚本指定角色后出错删除掉再重新建个script,一定要按下图上那个图标reset才能有效,否则搞死人

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-15 23:13 , Processed in 0.131680 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表